A volte, quando spiego come configurare il sistema di autenticazione con chiave pubblica SSH, mi viene chiesto quale sia la chiave migliore tra RSA e DSA. Nei prossimi paragrafi cercherò di rispondere a questa domanda. Premetto che, pur avendo una certa esperienza in materia di LAN Ethernet e reti TCP/IP, la mia conoscenza della crittografia è al massimo amatoriale. La discussione che segue si basa su ricerche effettuate su Internet, alcune delle quali sono contraddittorie e, come tutte le cose che riguardano Internet, alcuni link sono più affidabili di altri.
Innanzitutto, cosa sono le chiavi RSA e DSA?
Il DSA, o Digital Signature Algorithm, è uno standard del governo statunitense progettato dalla NSA per le firme digitali. Deriva dall'algoritmo di firma ElGamal. La sicurezza si basa sulla difficoltà di risolvere determinati tipi di funzioni logaritmiche. Può essere utilizzato solo per le firme digitali.
RSA prende il nome dalle iniziali degli autori, Ron Rivest, Adi Shamir e Leonard Adleman, che per primi hanno pubblicato l'algoritmo. Si basa sulla difficoltà di scomporre in fattori primi numeri di grandi dimensioni. A differenza del DSA, l'RSA può essere utilizzato per crittografare un intero messaggio.
A mio avviso, risolvere i problemi logaritmici e di fattorizzazione è ugualmente difficile, ma ho trovato alcuni riferimenti che affermano che il problema logaritmico è più difficile (ho anche trovato riferimenti che affermano che sono ugualmente difficili).
Cose che non ritengo importanti, ma che potresti aver sentito o potresti sentire in futuro:
- Il DSA è più veloce nella firma rispetto all'RSA, ma l'RSA è più veloce nella fase di verifica; poiché l'autenticazione richiede entrambe le fasi, la differenza non è rilevante.
- Come ho detto sopra, DSA può essere utilizzato solo per l'autenticazione, mentre RSA può essere utilizzato sia per l'autenticazione che per crittografare un messaggio. Tuttavia, SSH utilizza le chiavi solo per l'autenticazione, quindi anche in questo caso la differenza non ha importanza.
- A parità di lunghezza della chiave, DSA genererà un file di firma più piccolo. Tuttavia, poiché ogni chiave occuperà un blocco del disco, anche in questo caso non ha importanza.
- Le chiavi DSA erano originariamente limitate a 1024 bit, ma ora non è più così.
- Ho cercato "chiave e DSA" e "chiave e RSA" nel "National Vulnerability Database" e ho trovato 2 vulnerabilità relative alle chiavi DSA e 5 vulnerabilità relative alle chiavi RSA. Per quanto ne so, tutte queste vulnerabilità sono state risolte nelle ultime versioni di OpenSSL/OpenSSH, ora parte dell'Internet Security Pack per OpenVOS.
Aspetti a favore del DSA:
- Il protocollo DSA può essere utilizzato solo con il protocollo SSH 2, mentre RSA può essere utilizzato con i protocolli 1 e 2 (vedere "SSH 2" rispetto a "OpenSSL e OpenSSH Release 2"). Il protocollo 1 presenta alcuni difetti di progettazione significativi ed è stato sostituito dalla versione 2. Ritengo che questo sia un motivo per preferire leggermente l'uso delle chiavi DSA, una sorta di protezione integrata dall'uso del protocollo precedente ormai obsoleto.
Aspetti a favore della RSA:
- Un generatore di numeri casuali difettoso causerà la fuga di bit della chiave DSA (non chiedetemi come).
- Il sito web openssh.org sembra non esprimersi in merito a quale sia la soluzione migliore, ma le versioni più recenti di ssh-keygen creano una chiave RSA se non si specifica il tipo.
- Sembra che ci siano più RFC (e più recenti) che fanno riferimento alle chiavi RSA rispetto alle chiavi DSA.
Alcuni confronti (le dimensioni dei file includono testo che non fa parte della chiave):
| Tempo di creazione DSA | Ora di creazione della RSA | Byte DSA | Byte RSA | DSA.pub byte | RSA.pub byte | |
| 1024 bit | 1 secondo | 1 secondo | 736 | 951 | 610 | 230 |
| 2048 bit | 8 secondi | 2 secondi | 1264 | 1743 | 1122 | 402 |
| 4096 bit | 50 secondi | 25 secondi | 2304 | 3311 | 2146 | 742 |
Indipendentemente dalla chiave utilizzata, ciò che conta davvero è la lunghezza della chiave. Considerando l'attuale contesto, consiglierei una lunghezza di 2048 bit. Oggi potrebbe sembrare eccessivo, ma non sono così sicuro che lo sarà anche tra cinque anni.
Per quanto riguarda il tipo di chiave da utilizzare, propendo per le chiavi RSA.
