Protégez vos clés SSH avec Touch ID sur macOS
Vous utilisez probablement des clés SSH pour vous connecter à vos serveurs et vous savez aussi qu'elles sont stockées sur votre disque, bien au chaud dans ~/.ssh/, accessibles à n'importe quel malware qui passerait par là. Pas très rassurant quand on y pense...
Mais bonne nouvelle les amis ! Sur macOS, il existe une fonctionnalité méconnue qui permet de stocker des clés cryptographiques directement dans le Secure Enclave de votre Mac, et de les utiliser pour SSH. Du coup, la donnée de la clé privée est conçue pour ne pas être exportable, reste enfermée dans cette puce dédiée, et les opérations de signature peuvent être protégées par Touch ID selon la configuration choisie. Arian van Putten , un chercheur indépendant, a documenté cette fonction qui est pourtant native dans macOS.
Le principe c'est que macOS expose une bibliothèque (/usr/lib/ssh-keychain.dylib) qui permet à OpenSSH d'interfacer avec le Secure Enclave via l'API CryptoTokenKit d'Apple. C'est un peu comme avoir une YubiKey intégrée dans votre Mac, sauf que vous n'avez rien à acheter.
Pour créer une identité protégée par le Secure Enclave, y'a une commande un peu obscure :
sc_auth create-ctk-identity -l ssh -k p-256-ne -t bio
Ensuite pour générer les fichiers de référence compatibles SSH :
ssh-keygen -w /usr/lib/ssh-keychain.dylib -K -N ""
Et pour injecter tout ça dans l'agent SSH :
ssh-add -K -S /usr/lib/ssh-keychain.dylib
À chaque connexion SSH, Touch ID vous demandera de poser votre doigt pour autoriser la signature. Impossible d'exporter la clé, impossible de la voler, même si quelqu'un a accès à votre machine.
Maintenant si vous préférez une interface graphique plutôt que de taper des commandes cryptiques, y'a Secretive qui fait exactement ça mais avec une jolie app native. Elle crée des clés dans le Secure Enclave, vous notifie quand elles sont utilisées, et depuis la version 3.0 , elle supporte même les clés post-quantiques ML-DSA (FIPS 204) sur macOS Tahoe pour ceux qui veulent anticiper l'ère post-quantique. Pour les vieux Mac sans Secure Enclave, l'app peut aussi utiliser une YubiKey.
Et pour ceux qui ont plein de clés SSH existantes et qui veulent juste ajouter l'authentification Touch ID par-dessus, y'a aussi fssh . Ce petit outil chiffre vos clés avec AES-256-GCM (avec HKDF et salt unique par fichier) et stocke la clé maître dans le Keychain de macOS avec les flags d'accès appropriés pour exiger Touch ID. Du coup à chaque connexion, votre empreinte déverrouille tout ça temporairement et c'est hyper pratique pour naviguer entre plusieurs serveurs sans se retaper les passphrases.
Bref, que vous passiez par les commandes natives, Secretive, ou fssh, l'idée c'est de ne plus jamais laisser vos clés SSH en clair sur le disque. Votre empreinte digitale devient la seule façon de les utiliser, et ça c'est quand même bien plus secure que de faire confiance aux permissions de fichiers...
Merci à Lorenper pour le tuyau !




