A volte, quando si spiega come impostare il sistema di autenticazione a chiave pubblica di SSH, mi viene chiesto quale sia migliore, le chiavi RSA o DSA. Nei prossimi paragrafi cercherò di rispondere a questa domanda. Prefazionerò la mia discussione con la rivelazione che, pur avendo una certa esperienza nelle LAN Ethernet e nel networking TCP/IP, ho al massimo una comprensione amatoriale della crittografia. La seguente discussione si basa su ricerche su Internet, alcune delle quali sono contraddittorie e come tutte le cose su Internet, alcuni collegamenti sono più affidabili di altri.
In primo luogo, cosa sono le chiavi RSA e DSA?
DSA o Digital Signature Algorithm, è uno standard del governo degli Stati Uniti progettato dalla NSA per le firme digitali. Esso deriva dall'algoritmo ElGamal Signature. La sicurezza si basa sulla difficoltà di risolvere alcuni 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 quantificare grandi numeri. A differenza di DSA, RSA può essere usato per criptare un intero messaggio.
La mia comprensione è che risolvere i problemi logaritmici e di factoring è altrettanto difficile, ma ho trovato alcuni riferimenti che dicono che il problema logaritmico è più difficile (ho anche trovato riferimenti che dicono che sono altrettanto difficili).
Cose che non credo abbiano importanza, ma che potreste aver sentito o che potreste sentire in futuro:
- DSA è più veloce nella firma rispetto a RSA, ma RSA è più veloce durante la fase di verifica, poiché l'autenticazione richiede entrambe le fasi la differenza non ha importanza.
- Come ho detto sopra DSA può essere usato solo per l'autenticazione mentre RSA può essere usato sia per l'autenticazione che per criptare un messaggio. Tuttavia, SSH usa le chiavi solo per l'autenticazione, quindi anche in questo caso la differenza non ha importanza.
- Per la stessa lunghezza della chiave, DSA genererà un file di firma più piccolo. Tuttavia, poiché ogni chiave prenderà un blocco del disco, questo non ha importanza.
- Le chiavi DSA erano originariamente limitate a 1024 bit, ma non è più così.
- Ho cercato nel "National Vulnerability Database" per "chiave e DSA" e "chiave e RSA" e ho trovato 2 vulnerabilità che riguardano le chiavi DSA e 5 vulnerabilità che riguardano le chiavi RSA. Per quanto ne so, tutte queste vulnerabilità sono state affrontate nelle ultime versioni di OpenSSL/OpenSSH, ora parte dell'Internet Security Pack per OpenVOS.
Cose a favore della DSA:
- DSA può essere usato solo con il protocollo SSH 2, mentre RSA può essere usato con i protocolli 1 e 2 (vedere "SSH 2″ contro "OpenSSL e OpenSSH Release 2"). Il protocollo 1 ha alcuni significativi difetti di progettazione ed è stato sostituito dalla versione 2 del protocollo. Lo vedo come un motivo per favorire leggermente l'uso delle chiavi DSA, una sorta di protezione integrata dall'uso del vecchio protocollo obsoleto.
Cose a favore della RSA:
- Un cattivo generatore di numeri casuali perde bit di chiave DSA (non chiedetemi come).
- Il sito web openssh.org sembra essere muto sul tema del quale è meglio, ma le versioni più recenti di ssh-keygen creano una chiave RSA se non si specifica il tipo.
- Sembrano esserci più (e più recenti) RFC che fanno riferimento a chiavi RSA che a chiavi DSA.
Alcuni confronti (le dimensioni dei file includono testo che non fa parte della chiave):
Tempo di creazione DSA | Tempo di creazione 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, la cosa veramente importante è la lunghezza della chiave. Dato l'ambiente attuale, raccomanderei una lunghezza della chiave di 2048. Oggi può sembrare eccessivo, ma non sono sicuro che sarà così tra 5 anni.
Per quanto riguarda il tipo di chiave da utilizzare, mi devo orientare verso le chiavi RSA.