Fonti di entropia per Linux


9

Diciamo che voglio un gigabyte di dati casuali da / dev / random, adatto per un pad una tantum (quindi / dev / urandom è fuori.) Come posso seminare il mio / dev / random con abbastanza entropia per fare questo? Sto cercando comandi e programmi specifici per questo. Non voglio comprare nulla. Sto usando Arch Linux, se questo fa la differenza.


Un programma del genere non trasformerebbe / dev / random in qualcosa che ha lo stesso problema di / dev / urandom che non vuoi usare? O ti riferisci a qualcosa che ottiene ulteriore entropia da un dispositivo o dalla rete?
Anthon,

@Anthon Sto parlando di programmi specifici per l'estrazione di casualità da una fonte di entropia, come rumore di sparo, rumore termico, alcuni dispositivi, ecc ... Il programma non farebbe la casualità stessa.
PyRulez,

... per esempio, un comando o un programma che dice Here — type something:e quindi misura i delta del tempo tra i tasti con una precisione maggiore di quella che un essere umano può controllare?
G-Man dice "Ripristina Monica" il


1
Menziona un pad una tantum come una delle due eccezioni all'affermazione che _'... quasi tutti gli algoritmi crittografici ... "solo" offrono sicurezza computazionale ". A meno che tu non possa citare qualcosa che mi è sfuggito quando dice che i pad una tantum non possono usare l'urandom?
Inutile il

Risposte:


4

Due programmi che possono aumentare il pool di entropia senza richiedere hardware aggiuntivo sono rng-toolse haveged. rng-toolsutilizza RNG disponibili nelle moderne CPU e chipset, havegedutilizza la casualità della CPU moderna (comportamento della cache, ecc.). Entrambi sono disponibili in Arch e la wiki di Arch ha una pagina interessante che li discute. Non ho provato a usarli per generare un gigabyte di dati, ma dovrebbe essere possibile in un ragionevole lasso di tempo.

Escludi esplicitamente l'acquisto di qualsiasi cosa, ma solo per completezza c'è un articolo interessante in LWN sull'entropia con NeuG , che include la discussione havegede vari altri approcci. È possibile acquistare una scheda STM8S in grado di eseguire NeuG per meno di $ 10 o un FST-01 per $ 35.


4

Sfortunatamente / dev / random non è adatto anche per l'uso in un pad one-time, almeno non il tipo di pad one-time (con garanzie di sicurezza dimostrabili) che la maggior parte delle persone immagina quando pensa o implementa i pad one-time. La maggior parte delle informazioni di seguito sono riassunte dall'articolo (molto lungo) su http://www.2uo.de/myths-about-urandom/

Il problema è che / dev / random non è veramente casuale; utilizza un CSPRNG per generare il suo output. In effetti, / dev / random usa esattamente lo stesso CSPRNG di / dev / urandom. L'unica differenza è che / dev / blocchi casuali se la sua stima interna dell'entropia è insufficiente.

La parola "stima" nella frase precedente è la chiave. La maggior parte delle persone pensa che questa stima sia sempre accurata e perfetta, ma in realtà non è affatto accurata. Nel momento in cui la stima è sbagliata, perdi tutte le garanzie di sicurezza dimostrabili del pad una tantum e tutto ciò che ti rimane è la sicurezza computazionale - non meglio di se avessi usato / dev / urandom!

Ottenere la stima dell'entropia solo un po 'male non rende il tuo pad una tantum solo un po' insicuro. La provabile garanzia di sicurezza di un pad una tantum è tutto o niente.

La premessa di questa domanda è che i problemi con / dev / random possono essere "risolti" aggiungendo più entropia. Sfortunatamente, questa premessa è sbagliata. Una fonte dannosa di entropia è molto peggio di nessuna entropia, perché le fonti entropiche spesso hanno accesso ai dati interni e possono esportare questi dati di nascosto usando l'output RNG - vedi http://blog.cr.yp.to/20140205-entropy .html per una discussione completa (troppo lungo per riassumere qui). In particolare, una fonte hardware di entropia (come raccomandato da molte altre risposte) è una pessima scelta dal punto di vista della sicurezza, dal momento che l'hardware è in una posizione privilegiata per fare cose dannose ed è essenzialmente non udibile.


Non ho detto che lo stavo risolvendo con più entropia, avevo solo bisogno di più per una chiave più grande. Questo è un buon punto se è difettoso. Puoi consigliarmi delle alternative?
PyRulez,

1
Questa è una buona risposta, tranne l'ultimo bit sulle fonti hardware. Le fonti hardware di entropia sono l'unico modo affidabile e verificabile per ottenere l'entropia. Tu (o qualcuno di cui ti fidi) devi controllare l'origine, il che richiede la presenza di informazioni di progettazione e la verifica che il processo di produzione rispetti le informazioni di progettazione. Puoi anche combinare le fonti di entropia in modo che se almeno una di esse va bene, il risultato va bene (NB devi combinarle correttamente per quello).
Gilles 'SO- smetti di essere malvagio' il

Gilles, leggi il secondo link che ho pubblicato. È completamente falso affermare che se almeno una fonte di entropia va bene, il risultato va bene. L'intero scopo di quel link è di confutare questa falsa affermazione!
djao,

Inoltre, non è sufficiente controllare la fonte e il processo di fabbricazione. È necessario controllare il singolo dispositivo per assicurarsi che il dispositivo sia stato prodotto in base al processo di produzione. Questo è un compito molto più difficile rispetto all'analogo compito nel software, che consiste semplicemente nel controllare un checksum.
djao,

Per quanto riguarda le alternative: non esiste un modo magico alternativo per ottenere 1 GB di dati casuali da un PC. Avresti bisogno di un dispositivo hardware per questo (ma poi presta attenzione a ciò che ho detto sull'hardware difficile da controllare). Se eri disposto a usare / dev / random, allora / dev / urandom è altrettanto buono; non è peggio di / dev / random per tutte le applicazioni crittografiche.
djao,

3

Sembra che un componente HW sia l'idea migliore. Ci sono alcuni IC del generatore HW là fuori, ma devi fidarti di loro come vengono.

Due probabilmente una buona soluzione sono indurre i componenti a creare rumore; due principali soluzioni sembrano essere il bias della temperatura e il rumore avanche creato con un diodo (vedi http://web.archive.org/web/20061117145903/http://willware.net:8080/hw-rng.html )

Dato che componenti come il giroscopio e l'accelerometro sono diventati più sensati, farli lavorare con la massima sensibilità e usare il loro valore LSB può anche essere una buona soluzione, ma AFAIK nessuno lo ha verificato.

È divertente perché ci sono molti documenti su NOT do RNG, ma non un'implementazione HW aperta e verificata


2

Puoi usare pycsprng.py . Crittograficamente sicuro? Non ne sono del tutto sicuro, ma vorrei un peer-review.

python pycsprng.py | pv | dd of=data.file bs=1024 count=1000

Il pipe to pvè facoltativo e ti aiuterà a sapere quanti dati sono stati trasferiti.

Potresti scoprire che blocchi di dimensioni maggiori (bs) aumentano le prestazioni. Dovrai regolare il conteggio per non generare un file troppo grande se aumenti la dimensione del blocco.


3
Questo usa solo /dev/urandom...
Stephen Kitt il

1
pycsprng.pyè letteralmente uno script da 10 SLOC che ottiene casualità os.urandom. I documenti affermano che "I dati restituiti dovrebbero essere abbastanza imprevedibili per le applicazioni crittografiche [...] Su un sistema simile a UNIX questo interrogherà /dev/urandom" . In realtà lo fa (è fonte obsoleta però) e Security.SE dice che va bene per la crittografia .
gronostaj,

Non una volta cripto pad!
PyRulez,

0

Quello che ottieni da un canale microfonico analogico quando non colleghi un microfono è di solito solo statico. Instradalo attraverso bzip2, ad esempio, per lo sbiancamento, mescolalo con un'altra fonte di casualità (urandom o un altro jack per microfono), forse conduci il risultato attraverso openssl per una buona misura e ciò che ottieni dovrebbe essere abbastanza casuale.

Tuttavia, sarebbe difficile dimostrare eventuali proprietà di sicurezza rigide e veloci sulla casualità del risultato.


0

Se stai usando il kernel Linux 2.6.9 o più recente sul processore amd64 / x86_64, l'ambiente virtuale o fisico, puoi provare ncomputers.org/pandom un vero generatore di numeri casuali, che offre entropia di 8 KiB / s di 64 ubits / 64 bit attraverso/dev/random

uscita campione


Collegamenti interrotti, impossibile trovare un backup.
slm

0

Per generare 100 MB di dati casuali generati dall'hardware, è possibile:

  • Registra 20 minuti di audio (96 kHz 16 bit mono) con il microfono integrato del tuo computer (disponibile su un laptop). Otterrai un file WAV di ~ 220 MB.

  • Scarta i bit non utili e mescola i bit dei dati binari (molti modi per farlo) con un po 'di matematica

  • Esporta i bit mescolati come file binario di ~ 100 MB

Ecco un articolo su questo: un tentativo di generare entropia reale e dati casuali con l'audio (e il microfono incorporato del tuo computer) .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.