Sicurezza

/dev/random vs /dev/urandom e sono sicuri??

/dev/random vs /dev/urandom e sono sicuri??

Iniziare

Chi avrebbe mai pensato che generare un numero casuale sarebbe stato un tale casino, dovrebbe essere altrettanto semplice quanto indovinare un numero ovunque tra un dato intervallo. Ma non è così semplice come sembra e anche finora tutte le macchine hanno dimostrato di non essere in grado di generare da sole un vero numero casuale.

Perché le macchine non possono generare da sole un vero numero casuale?

Le macchine sono solo insiemi di meccanismi e circuiti istruiti, e quindi non possono essere istruite a pensare a un numero casuale da solo senza alcun aiuto. Ed è per questo che fino ad ora e oltre, abbiamo coinvolto la natura o gli umani con macchine per generare un vero numero casuale. Non discuteremo qui come generare un vero numero casuale ma discuteremo dei generatori di numeri casuali già implementati e del loro funzionamento e dei loro punti deboli.

Perché è così importante generare un vero numero casuale??

Sorge la domanda: perché la generazione di veri numeri casuali è importante e la risposta è a causa di problemi di sicurezza?. La maggior parte degli algoritmi crittografici si basa sulla generazione di numeri casuali poiché questi numeri casuali vengono utilizzati per creare chiavi crittografiche e se i numeri casuali generati non sono di natura veramente casuale, questi rendono l'insieme di queste tecniche crittografiche più deboli e tali chiavi possono essere previste relativamente più facilmente usando l'algoritmo che è stato usato per generare quelle chiavi casuali. Questa è la ragione più importante per un vero numero casuale, oltre ad applicazioni come il gioco d'azzardo.

Generatore di numeri casuali nei kernel Linux:

L'argomento per la nostra discussione di oggi si basa su Linux Random Number Generator, su quali fattori si basa questo generatore ed è davvero così casuale o è solo un altro numero casuale tipicamente inaffidabile.

Linux utilizza Pseudo Random Number Generator (PRNG) o Cryptographically Secure Pseudo Random Number Generator (CSPRNG), il che significa che utilizza formule matematiche complesse e proprietà ambientali per ottenere la massima casualità. Linux è stato il primo sistema operativo a includere PRNG nel suo spazio kernel. Questo è stato implementato da Theodore Ts'o nel 1994.

Linux ha tre categorie di generatori di numeri casuali, /dev/random, /dev/urandom, /dev/arandom. Questi tutti e tre sono i file in cui Linux memorizza i numeri casuali. I numeri casuali in questi file vengono generati utilizzando il rumore ambientale dei driver del dispositivo e altre fonti other. Inoltre, per garantire la casualità nei suoi numeri casuali, Linux usa l'entropia che è l'estensione dell'incertezza o del disordine tra di loro. Puoi anche trovare la pagina del manuale per Linux Random Number Generator (RNG) qui:

http://man7.org/linux/man-pages/man4/random.4.html

/dev/casuale contro /dev/urandom contro /dev/random:

La principale differenza tra /dev/random, /dev/urandom e /dev/arandom è che /dev/random si blocca se l'entropia non indica una casualità sufficiente, /dev/urandom non si blocca mai, anche quando il generatore di numeri pseudo casuali non è completamente seminato all'avvio e infine /dev/arandom si blocca solo quando il generatore di numeri pseudo casuali non è ancora completamente seminato. In breve, /dev/random è il più sicuro di tutti, poi arriva /dev/arandom e il meno sicuro è /dev/urandom. Normalmente /dev/random e /dev/urandom sono usati perché /dev/arandom in molti termini è simile a /dev/urandom. La stima dell'entropia per il pool di numeri casuali in breve viene utilizzata per determinare la casualità dei numeri generati. Maggiore è l'entropia, più casualità si ottiene e meglio è. L'attuale quantità di entropia e la dimensione del suo pool di entropia sono disponibili su /proc/sys/kernel/random/ denominati rispettivamente entropy_avail e pool_size, che possono essere visualizzati nel terminale utilizzando i comandi:

cat /proc/sys/kernel/random/entropy_avail

E:

cat /proc/sys/kernel/random/pool_size

Sia urandom che casuale vengono utilizzati in scenari diversi. 'Urandom' viene utilizzato dove c'è un bisogno costante di numeri casuali e la sua casualità non è molto importante mentre 'random' viene usato dove c'è un problema di sicurezza e la sua casualità dovrebbe essere affidabile in quanto blocca l'emissione di numeri casuali se l'entropia non è all'altezza il segno. Sebbene l'entropia per urandom (casuale illimitato) non sia molto più debole, ma si consiglia di utilizzare casuale quando è richiesta maggiore sicurezza a causa della possibilità di attacchi al numero generato da urandom.

Debolezze nei generatori di numeri casuali di Linux

Per hardware di memoria non volatile:

Per i kernel Linux, il generatore di numeri casuali non va bene per l'hardware integrato come i router, in cui lo stato di avvio è prevedibile e la fonte di entropia sufficiente è limitata. Per questo tipo di hardware, si consiglia di salvare e utilizzare lo stato Random Number Generator (RNG) prima dello spegnimento che verrà utilizzato all'avvio successivo. In tali casi di router, gli aggressori possono compromettere e prevedere i numeri casuali generati solo se hanno accesso a tutti i collegamenti del router e stanno intercettando i suoi collegamenti di comunicazione o se hanno accesso direttamente allo stato RNG salvato dal router stesso.

Per questa falla di RNG in caso di hardware, i generatori di entropia di terze parti vengono in soccorso. Questi generatori di entropia come "haveged" utilizzano la temporizzazione della cache del processore, dispositivi di input audio e video esterni per aumentare l'entropia a un livello accettabile.

Stima dell'entropia:

Come accennato in precedenza, il kernel Linux determina la casualità in termini di entropia ma in realtà non calcola l'entropia ogni volta e utilizza invece le stime dell'entropia. Diverse ricerche hanno anche rivelato che la stima dell'entropia dei numeri casuali utilizzata in Linux non sono stime adatte o più vicine, rendendo così la casualità complessiva dei numeri più debole.

Sebbene ci siano alcuni punti deboli in Linux Random Number Generator, ma è un'opzione di gran lunga migliore rispetto ad altri RNG, per non dimenticare le patch in corso fornite dai contributori e dagli sviluppatori di Linux.

Concludendo:

Tutto questo da parte mia riguardava il generatore di numeri casuali nel kernel di Linux. Mi sono divertito a diffondere questa conoscenza con te. Spero che tu abbia imparato qualcosa di nuovo attraverso di esso e anche che condividerai ulteriormente la conoscenza con il mondo. Infine, grazie per aver investito tempo in questo articolo.

Come sviluppare un gioco su Linux
Un decennio fa, non molti utenti Linux avrebbero previsto che il loro sistema operativo preferito un giorno sarebbe diventato una piattaforma di gioco...
Porte open source di motori di gioco commerciali
Ricreazioni del motore di gioco gratuite, open source e multipiattaforma possono essere utilizzate per riprodurre titoli di giochi vecchi e abbastanza...
I migliori giochi da riga di comando per Linux
La riga di comando non è solo il tuo più grande alleato quando usi Linux, ma può anche essere una fonte di intrattenimento perché puoi usarla per gioc...