Quali sono le probabilità di generare la stessa chiave ssh?

26

Potrei generare chiavi ssh sul client come (senza password):

ssh-keygen -b 8192 -t rsa -f /home/THEUSER/.ssh/id_rsa -P '' -v

e copia il id_rsa.pub generato sul server:

ssh-copy-id -i /home/THEUSER/.ssh/id_rsa.pub '-p PORTNUMBER SSHUSER@SERVER-IP-ADDRESS'

Quanto è probabile che qualcuno generi la stessa chiave con ssh-keygen? in modo che potessero accedere anche senza password!

Penso che abbia una possibilità molto bassa, ma voglio sapere: quanto costa?

    
posta LanceBaynes 06.04.2011 - 20:34
fonte

4 risposte

39

La possibilità è molto inferiore rispetto a qualsiasi di questi eventi:

  • Il computer si attiva spontaneamente durante il processo di generazione della chiave.
  • La Gran Bretagna viene spazzata via da un asteroide cadente durante lo stesso secondo.
  • Un gorilla canaglia sfuggito da uno zoo entra nel tuo salotto e ti ferisce.
  • Vinci alla lotteria milioni di dollari per tre volte di fila.

Quindi la conclusione di base è che non ti devi preoccupare di ottenere due volte la stessa chiave SSH: in realtà non succederà nella tua vita.

Su un punto di vista più teorico, ci sono circa 2 8164 possibili chiavi RSA a 8192 bit (che è davvero molto). Tuttavia, ssh-keygen utilizzerà un generatore di numeri pseudo-casuali che funziona su un seed interno molto più ridotto, che dipende dal sistema operativo ma in genere avrà dimensioni di almeno 160 bit. Questo riduce il numero di possibili chiavi a un numero molto più basso (ma comunque enorme), 2 160 . Anche con un'enorme potenza di calcolo (non sto parlando di uno studente annoiato con poche decine di PC, piuttosto, pensa "Google"), la probabilità di trovare la stessa chiave dopo alcuni anni di sforzo è inferiore a 2 < sup> -100 . Comparativamente, si può stimare che gli eventi I elencati sopra si presentino con probabilità all'incirca uguali a 2 -45 , 2 -50 , 2 -60 e 2 -71 , rispettivamente: questi sono miliardi di volte più probabile.

Naturalmente, con un PRNG difettoso, qualsiasi cosa vada.

    
risposta data 06.04.2011 - 23:07
fonte
6

Per prima cosa, leggi il Compleanno di attacco , che spiegherà la coincidenza e le probabilità che ci siano mai due chiavi generate esattamente lo stesso. Le probabilità di questo sono superiori alle probabilità che tu prenda una chiave e vedere se qualcuno l'abbia mai generata. (Quante persone nella stanza sono nate il 7 luglio rispetto a quante persone nella stanza hanno lo stesso compleanno.)

Ora, le probabilità che qualcuno generi la TUA chiave sono 1/2 key_size. Nel caso della crittografia a chiave pubblica, 1/2 ^ (bits_of_entropy). Non si prevede che una chiave RSA a 4096 bit abbia 4096 bit di entropia. Non sono sicuro di cosa sia la conversione. Ci si aspetta che una chiave simmetrica a 128 bit abbia 128 bit di entropia. (Questo è tutto ignorando gli attacchi che possono interrompere i singoli round, ecc.)

Ora, anche questo non tiene conto della cattiva implementazione come un bug di OpenSSL molto brutto .

Ma, fondamentalmente, nessuno genererà mai la tua chiave individuale per caso, e probabilmente neanche con un attacco.

    
risposta data 06.04.2011 - 23:02
fonte
6

ssh-keygen usa la funzione libcrypto di OpenSSL BN_rand() per generare il punto di partenza per la generazione chiave di subprime, che a sua volta usa RAND_bytes() come fonte di casualità. Accade nella funzione gen_candidates() di moduli.c della distribuzione di origine OpenSSH.

Sulla maggior parte delle piattaforme questa sarà casualità di qualità piuttosto buona (ciò che RAND_bytes() fa è un po 'dipendente dalla piattaforma, per maggiori informazioni controlla rand_lib.c nella distribuzione OpenSSL).

Per tutti gli scopi pratici, a meno che non si utilizzi un libcrypto il cui PRNG è stato sabotato da un manutentore eccessivamente zelante e incompetente, le collisioni non succederanno.

    
risposta data 07.04.2011 - 23:00
fonte
2

Tratto da research! rsc :

Last week, Debian announced that in September 2006 they accidentally broke the OpenSSL pseudo-random number generator while trying to silence a Valgrind warning. One effect this had is that the ssh-keygen program installed on recent Debian systems (and Debian-derived systems like Ubuntu) could only generate 32,767 different possible SSH keys of a given type and size, so there are a lot of people walking around with the same keys.

Many people have had fingers pointed at them, but it is not really interesting who made the mistake: everyone makes mistakes. What's interesting is the situation that encouraged making the mistake and that made it possible not to notice it for almost two years.

Come diceva Jeff Ferland in un precedente post: "Ora, anche questo non tiene conto delle cattive implementazioni come un brutto bug OpenSSL" (che in effetti sembra essere lo stesso bug di cui abbiamo parlato sopra).

"In teoria, non c'è differenza tra teoria e pratica. In pratica, c'è. ", Yogi Berra

    
risposta data 28.07.2014 - 18:51
fonte

Leggi altre domande sui tag