C'è un granello di verità in questo, in effetti più verità che mito, ma ciò nonostante l'affermazione riflette un fondamentale fraintendimento di ciò che sta accadendo. Sì, muovere il mouse durante la generazione di una chiave con GPG può essere una buona idea. Sì, lo spostamento del mouse contribuisce all'entropia che rende casuali i numeri casuali. No, muovere il mouse non rende la chiave più sicura.
Tutti i buoni generatori casuali adatti alla crittografia, e Linux è in quella categoria, hanno due componenti:
- Una fonte di entropia, che non è deterministica. Lo scopo dell'entropia è avviare il generatore di numeri casuali con dati imprevedibili. La fonte di entropia deve essere non deterministica:altrimenti un avversario potrebbe riprodurre lo stesso calcolo.
- Un generatore di numeri pseudocasuali, che produce numeri casuali imprevedibili in modo deterministico da uno stato interno mutevole.
L'entropia deve provenire da una fonte esterna al computer. L'utente è una fonte di entropia. Ciò che l'utente fa per lo più non è casuale, ma il tempismo preciso delle sequenze di tasti e dei movimenti del mouse è così imprevedibile da essere leggermente casuale - non molto casuale, ma a poco a poco si accumula. Altre potenziali fonti di entropia includono la temporizzazione dei pacchetti di rete e il rumore bianco della telecamera o del microfono. Diverse versioni e configurazioni del kernel possono utilizzare un diverso insieme di sorgenti. Alcuni computer hanno circuiti RNG hardware dedicati basati sul decadimento radioattivo o, in modo meno impressionante, circuiti elettronici instabili. Queste fonti dedicate sono particolarmente utili in dispositivi e server incorporati che possono avere un comportamento abbastanza prevedibile al loro primo avvio, senza che un utente faccia cose strane.
Linux fornisce numeri casuali ai programmi tramite due dispositivi:/dev/random
e /dev/urandom
. La lettura da entrambi i dispositivi restituisce qualità crittografica. Entrambi i dispositivi utilizzano lo stesso stato RNG interno e lo stesso algoritmo per trasformare lo stato e produrre byte casuali. Hanno limitazioni peculiari che non rendono nessuna delle due la cosa giusta:
/dev/urandom
può restituire dati prevedibili se il sistema non ha ancora accumulato sufficiente entropia./dev/random
calcola la quantità di entropia disponibile e blocca se non ce n'è abbastanza. Questo suona bene, tranne per il fatto che il calcolo si basa su considerazioni teoriche che fanno diminuire linearmente la quantità di entropia disponibile con ogni bit di output. Quindi/dev/random
tende a bloccarsi molto rapidamente.
I sistemi Linux salvano lo stato RNG interno su disco e lo ripristinano all'avvio. Pertanto l'entropia si trasferisce da uno stivale all'altro. L'unico momento in cui un sistema Linux può mancare di entropia è quando è appena installato. Una volta che c'è sufficiente entropia nel sistema, l'entropia non diminuisce; solo il calcolo difettoso di Linux diminuisce. Per ulteriori spiegazioni su questa considerazione, leggi /dev/urandom
è adatto a generare una chiave crittografica, da parte di un crittografo professionista. Vedi anche Puoi spiegare la stima dell'entropia usata in random.c.
Muovere il mouse aggiunge più entropia al sistema. Ma gpg può leggere solo da /dev/random
, non /dev/urandom
(un modo per risolvere questo problema è creare /dev/random
lo stesso dispositivo 1:9 di /dev/urandom
), quindi non è mai a rischio di ricevere numeri casuali non abbastanza casuali. Se non muovi il mouse, la chiave è il più casuale possibile; ma ciò che può accadere è che gpg venga bloccato in una lettura da /dev/random
, in attesa che il contatore di entropia del kernel salga.
GPG utilizza il generatore di numeri casuali di Linux (kernel). Il generatore del kernel ottiene l'entropia (casualità) da tutti i tipi di luoghi, tra cui il tempo di interruzione, per determinati interrupt. Lo spostamento del mouse (e la digitazione, l'attività del disco, ecc.) genereranno interruzioni.
Quindi, muovere il mouse in effetti alimenta potenzialmente il generatore di numeri casuali. Ma se dipende dall'esatta versione del kernel in uso; le versioni più recenti non usano (almeno nei miei test) interruzioni della tastiera o del mouse per l'entropia. L'attività del disco, tuttavia, lo fa (quindi, ad esempio, eseguendo sync
aggiungerà una quantità potenzialmente grande di entropia, a seconda di quanta ne viene scaricata).
In breve:questo non è vero sulle attuali versioni di Linux. Era su quelli più vecchi.
Tuttavia, se il generatore esaurisce l'entropia, dovrebbe semplicemente fermarsi, quindi la generazione della chiave si bloccherà fino a quando non verrà generata un po' di entropia. Quindi sarebbe un problema permanente, non un problema di sicurezza.
Puoi vedere quanta entropia è disponibile da cat /proc/sys/kernel/random/entropy_avail
.