gdzieś w okolicach 2013 roku (a konkretnie, na ‘małego’ Mikołaja) do OpenSSH dodano obsługę nowego formatu przechowywania kluczy.
jest to istotne o tyle, że nowy format pozwala zmienić używany do tej pory hash MD5 (baaaaaardzo szybko i efektywnie przeszukiwany przez dzisiejsze GPU) na inny. w tym konkretnym przypadku używamy modyfikacji algorytmu bcrypt, która w popularnym ‘łamaczu’ hashy hashcat zwalnia wielbiciela naszego hasła do klucza prywatnego z wydajności gigahashy na co najwyżej kilohashe.
co trzeba zrobić? po pierwsze, zadbać o klucze. ja od dawna używam 2048 bitowych kluczy RSA i ponieważ sprzęt sieciowy jeszcze nie zawsze radzi sobie z nowinkami, muszę przy nich zostać. mój klucz prywatny dzisiaj wygląda w ten sposób:
ja@mac:~/.ssh$ more id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,0cc175b9c0f1b6a831c399e269772661
FlXcooESd57Gh39IyP2n8vvsxWqxPUs7WHjCzhCrmVz583d7ar6dEzUE7Ey2jCvd
v1/VB17mCNG3nm+IEd+FcBnXe6zUu6y174oB1EWOavoYsXJc4XfVdJuhUDlSONW1
[....]
Yfxn6111NRH+vndRADSrT+/BaAdpspkqBov/XxFGitFSZSxM4s/TqOq/j8ofS0X9
-----END RSA PRIVATE KEY-----
zmiana formatu jest prosta - przy okazji można zadbać o nowe, lepsze, mocniejsze hasło chroniące klucz - możemy podać inne:
ja@mac:~$ ssh-keygen -o -p -f id_rsa -a 64
Enter old passphrase: tu wpisujemy stare hasło
Enter new passphrase (empty for no passphrase): tu pierwszy raz nowe, oby mocniejsze
Enter same passphrase again: tu również nowe, drugi raz dla pewności
Your identification has been saved with the new passphrase.
-a 64
oznacza ilość rund KDF, które zostaną użyte do mocniejszego zabezpieczenia naszego klucza. spowalnai to jego weryfikację - ale na nowoczesnym sprzęcie nie na tyle, żeby było to szczególnie widoczne. znakomicie natomiast spowalnia potencjalnego atakującego.
klucz zapisany zostanie w tym samym pliku ale w nowym, odporniejszym formacie:
ja@mac:~/.ssh$ more id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
JrgJWuW/Ow0KaZKPzMoD5L7/RwXJF74ts61ONcC1wsZZXV8hxarat0Uw6fim5naPkfEonZ
DXYm8GSuJlGqMJxTHmG2UYxaqQctuWGicz8TAu+wK1kcNCjImuCBMPFvx9AEcBDr9ahJvB
[...]
PqT2crQeHPC3IZsrFyoQ8YHQiElISCKCcGL/miZjlTuS6aA2nexGghmqjLGMrlGpg2gXMV
-----END OPENSSH PRIVATE KEY-----
jeśli już przy tym jesteśmy, polecam dorzucić poniższe linie do .ssh/config
- zapewnią utrzymanie połączenia przez keepalives mimo np. zbytnio agresywnych limitów NAT (szybkie wygasanie sesji potrafi zabić sesję SSH), oraz za każdym razem wyświetli wizualny obraz certyfikatu serwera, do którego się łączymy - co zapewnia dodatkową ochronę poza samą weryfikacją kryptograficzną że ’to ten sam’:
ja@mac:~$ more .ssh/config
VisualHostKey=yes
ServerAliveInterval 30
ServerAliveCountMax 5