guest@6admin.io:~$

SSH : Augmenter la sécurité de vos clefs avec PKCS#8

En deux trois commandes :

$ mv ~/.ssh/id_rsa ~/.ssh/id_rsa.old
$ openssl pkcs8 -topk8 -v2 des3 -in ~/.ssh/id_rsa.old -out ~/.ssh/id_rsa
$ chmod 600 ~/.ssh/id_rsa
# Check that the converted key works; if yes, delete the old one:
$ rm ~/.ssh/id_rsa.old

Et un petit script en prime pour le faire à la volée :

#!/bin/bash
: << 'TITLE.sh'
 Version: 0.1
 Authors: nobody@vhalholl.info
 Description: hardening ssh private key w/ pkcs#8
              http://martin.kleppmann.com/2013/05/24/improving-security-of-ssh-private-keys.html
 Dependencies: openssl
TITLE.sh

DEP=$(which openssl);[ ! -z $DEP ]&& {
 for k in $(echo $(for i in $(ls *);do file $i; done |grep private |cut -d : -f1));do
 echo "backup $k"; mv $k .$k.old
 echo "convert $k"; openssl pkcs8 -topk8 -v2 des3 -in .$k.old -out $k; chmod 600 $k
 done;
 exit 0;
}
echo "Openssl not found" && exit 1

Le PKCS#8 enveloppe la clé privée RSA dans une couche de chiffrement 3DES avec un KDF renforcé (PBKDF2). La passphrase de la clé devient plus coûteuse à brute-forcer: chaque tentative de déchiffrement nécessite des itérations supplémentaires du KDF. C’est le même principe que bcrypt ou scrypt pour les mots de passe, appliqué aux clés SSH.

La conversion est transparente pour SSH: la clé continue de fonctionner exactement comme avant, seul le format interne change. Et si la conversion rate, le backup .old est toujours là.

[edit: 2026] L’implémentation Ansible de tout ceci: le rôle ssh .