Con l'algoritmo di crittografia RSA, esiste la garanzia che a due entità diverse non vengano assegnate le stesse chiavi private?
Con l'algoritmo di crittografia RSA, esiste la garanzia che a due entità diverse non vengano assegnate le stesse chiavi private?
Probability.
Quando si genera una coppia di chiavi RSA a 1024 bit, uno dei primi lavori è selezionare una coppia di primi p e q in modo tale che il prodotto di tali numeri (es. p moltiplicato per q ) ha una dimensione di 1024 bit. Il modo più semplice per farlo è selezionare entrambi i valori da qualche parte intorno a 512 bit ciascuno, come 2 512 × 2 512 = 2 1024 . Tieni presente che seleziono 1024 bit poiché ora è considerata la dimensione della chiave accettabile più bassa, in cui avrai la più alta probabilità di collisione primaria.
Ora, se supponiamo che i solo valori a 512 bit siano usati per p e q , possiamo ora stimare quanti primi ci sono sono in questo intervallo. I hanno discusso questo in una risposta ad un'altra domanda su RSA, ma io 're-iterate qui. La funzione di conteggio dei primi ci consente di stimare il numero di numeri primi in un determinato intervallo. Non è veramente definito, in quanto è solo una stima, e ci sono vari modi per calcolarlo. Il modo più semplice e più semplice è semplicemente π (x) = x / ln (x) , dove π è il PCF e ln()
è log naturale. Come ho spiegato nella risposta collegata, è probabile che ci siano da qualche parte intorno ai numeri primi di 1.885 × 10 151 nell'intervallo 2 512 < n < 2 513 .
Ciò significa che, assumendo un'implementazione ideale, la possibilità di scegliere valori pari a p o q in due coppie di chiavi RSA generate in modo indipendente è all'incirca una in ...
18,850,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
È leggermente meno probabile che vincere il jackpot nella lotteria nazionale del Regno Unito 21 pareggi di fila ( 13.983.815 21 = 1.143 × 10 150 ).
Tutto ciò presuppone che l'implementazione sia ideale. Tuttavia, questo non è sempre il caso. Ad esempio, c'era un un bug in OpenSSL che ha causato l'utilizzo di dati di stack non inizializzati come il pool casuale per la generazione di numeri primi RSA, il che significava che il numero effettivo di uscite possibili dall'RNG era piuttosto ridotto. Le coppie di chiavi risultanti sono ora nella lista nera dalla maggior parte delle implementazioni per prevenire lo sfruttamento. Un altro esempio è che in molti dispositivi incorporati (ad esempio dispositivi firewall, router, ecc.) Determinati valori di crittografia, come le chiavi di sessione SSH, vengono generati all'inizio nel processo di avvio del sistema, quando non vi è molta entropia disponibile. Ciò porta a una situazione in cui il numero di possibili chiavi generate è significativamente inferiore a quello che potresti aspettarti, portando potenzialmente a attacchi di predizione.
Il tl; dr è che lo spazio chiave è così grande che la selezione casuale di due numeri primi uguali (p o q) quando si calcolano in modo indipendente due coppie di chiavi RSA è fenomenalmente improbabile.
In sostanza, statistiche. Le possibilità di generare due chiavi private identiche in un ambiente con buona casualità sono effettivamente nulle.
Leggi altre domande sui tag encryption public-key-infrastructure rsa