SSH

SSH (Secure Shell) è un protocollo di rete che permette di accedere in modo sicuro a un computer remoto. SSH utilizza la crittografia asimmetrica per autenticare il server e la crittografia simmetrica per proteggere la comunicazione tra client e server. Inoltre, SSH supporta l'inoltro di porte, la compressione dei dati e l'inoltro di agenti di autenticazione.

Le principali componenti di sicurezza di SSH includono:

  • Autenticazione del server: il server invia il suo certificato digitale al client durante la fase di handshake. Alla prima connessione, il client deve verificare l'autenticità del certificato del server e memorizzarlo in modo sicuro per le connessioni successive. Alle connessioni successive, il client verifica che il certificato del server corrisponda a quello memorizzato. Questo meccanismo garantisce che il client si stia connettendo al server corretto e non a un server malevolo che sta eseguendo un attacco Man-in-the-Middle.
  • Autenticazione del client: il client può autenticarsi al server utilizzando la password, la chiave pubblica o altri metodi di autenticazione supportati dal server. L'autenticazione del client è opzionale e può essere configurata dal server.
  • Crittografia dei dati: i dati trasmessi tra client e server sono crittografati utilizzando la crittografia simmetrica. La chiave di sessione viene negoziata durante il processo di handshake e utilizzata per criptare e decriptare i dati trasmessi. Viene anche controllata l'integrità e l'autenticità dei dati.

L'autenticazione del client in SSH può avvenire in diversi modi, i due più comuni sono:

  • Password: il client inserisce la password per autenticarsi al server. Questo è il metodo di autenticazione più comune, ma è anche il meno sicuro, poiché le password possono essere soggette a attacchi di forza bruta o di dizionario.
  • Chiave pubblica: il client genera una coppia di chiavi pubblica e privata e invia la chiave pubblica al server. Il server memorizza la chiave pubblica del client e la utilizza per autenticare il client durante le connessioni successive. Questo metodo è più sicuro delle password, poiché richiede la conoscenza della chiave privata per autenticarsi.

Chiavi SSH

Le chiavi SSH possono sfruttare diversi algoritmi di crittografia, tra cui RSA, DSA ed ECDSA. Le chiavi SSH sono generalmente memorizzate nei file id_rsa (chiave privata) e id_rsa.pub (chiave pubblica) nella directory .ssh dell'utente. Le chiavi pubblica vengono salvate nel server remoto nel file authorized_keys per consentire l'autenticazione dei client.

Esistono diversi tipi di chiavi SSH, tra cui:

  • Chiavi RSA: utilizzano l'algoritmo RSA per l'autenticazione. Le chiavi RSA sono comunemente utilizzate e supportate da molti server SSH.
  • Chiavi DSA: utilizzano l'algoritmo DSA per l'autenticazione. Le chiavi DSA sono meno comuni rispetto alle chiavi RSA.
  • Chiavi ECDSA: utilizzano l'algoritmo ECDSA (Elliptic Curve Digital Signature Algorithm) per l'autenticazione. Le chiavi ECDSA sono più recenti e offrono una maggiore sicurezza rispetto alle chiavi RSA e DSA.
  • Chiavi ED25519: utilizzano l'algoritmo EdDSA (Edwards-curve Digital Signature Algorithm) per l'autenticazione. Le chiavi ED25519 sono ancora più recenti e offrono una maggiore sicurezza rispetto alle chiavi ECDSA.

I file che contengono la chiave privata avranno il nome id_rsa per RSA, id_dsa per DSA, id_ecdsa per ECDSA e id_ed25519 per ED25519. I file che contengono la chiave pubblica avranno il nome id_rsa.pub per RSA, id_dsa.pub per DSA, id_ecdsa.pub per ECDSA e id_ed25519.pub per ED25519.

Sono consigliabili RSA e ED25519 per la maggiore sicurezza e supporto da parte dei server SSH moderni. In particolare ED25519 è preferibile per la sua maggiore sicurezza e prestazioni rispetto a RSA. Le chiavi RSA a 1024 bit sono considerate obsolete e poco sicure, mentre le chiavi RSA a 2048 bit sono ancora considerate sicure, ma è preferibile utilizzare chiavi più lunghe per una maggiore sicurezza. Le chiavi pubbliche ED25519 sono molto più corte rispetto alle chiavi RSA, il che le rende più facili da trasmettere e memorizzare e hanno una sicurezza paragonabile a quella di RSA con ~ 3000 bit.