Perché usare [x] per generare keypairs casuali è una cattiva idea?

3

Chiunque abbia generato grandi coppie di chiavi pubbliche / private GPG ha trovato questo fastidioso messaggio: "Non sono disponibili abbastanza byte casuali. Per favore fai qualche altro lavoro per dare al sistema operativo la possibilità di raccogliere più entropia!"

Alla ricerca di risposte, troverai spesso risposte come queste:

Use rngd -r /dev/urandom [1] [2]
Install and use rng-tools [3]
Make a symlink so /dev/urandom is used instead of /dev/random [4]

Dopo di che trovi un commento (di solito con una netta mancanza di spiegazione, solo uno sfogo violento):

Oh my god, that's a horrible idea!!

Perché questi metodi alternativi di generazione di coppie di chiavi casuali sono una cattiva idea? Che cosa rende l'attesa di /dev/random per finire in modo molto più sicuro?

    
posta IQAndreas 13.10.2014 - 18:19
fonte

1 risposta

8

rng-tools funge da ponte tra il generatore di numeri casuali dell'hardware del tuo computer (se ne ha uno) e /dev/random Se ti fidi dell'hardware RNG del tuo computer, non c'è niente di sbagliato nell'usarlo. Se, d'altra parte, non ha un RNG hardware, rng-tools può essere usato per far pensare al kernel che ci sia più casualità nel suo pool di entropia di quanto non sia in realtà.

Il problema con il suggerimento nel tuo primo link ( rngd -r /dev/urandom ) è che stai inserendo l'output del pool di entropia del kernel in esso, e fingendo che questo rappresenti nuovi dati. Allo stesso modo, il suggerimento "link simbolico% da% a /dev/random " nel terzo link forza /dev/urandom a utilizzare una fonte di casualità non necessariamente alta quando si aspetta una fonte di casualità di alto grado.

Il problema con l'utilizzo di casualità di basso livello durante la generazione di keypair RSA è che se la tua coppia di chiavi condivide un fattore con la coppia di chiavi di qualcun altro, c'è un attacco banale che può dedurre la tua chiave privata dalla tua chiave pubblica (usa l'algoritmo di Euclide per calcolare il GCD delle due chiavi pubbliche, che è uno dei fattori principali, quindi utilizzare la divisione semplice per calcolare l'altro primo). Questo è particolarmente un problema con i sistemi embedded che generano una coppia di chiavi al primo avvio, quando non hanno molta o nessuna entropia disponibile.

    
risposta data 14.10.2014 - 00:13
fonte

Leggi altre domande sui tag