Ci sono diversi fattori in gioco qui:
- Il meccanismo fisico HRNG utilizzato all'interno del microprocessore ARM.
- La logica di supporto sul silicio all'interno del microprocessore.
- Il microcodice distribuito sul microprocessore.
- L'implementazione del RNG in Linux.
Secondo il produttore, quel particolare chip utilizza il rumore di un transistor di polarizzazione inversa, in un progetto HRNG a collettore aperto. Questo è precisamente l'hardware che sto usando nel mio attuale progetto HRNG, ma molto più piccolo. È uno dei modi più economici per implementare un HRNG direttamente nel silicio; mentre io sto usando transistor discreti, il processore ARM si riduce semplicemente a qualche puntina di silicio sul chip die.
Sappiamo che questo meccanismo è una strong fonte di casualità, perché si basa su un fenomeno chiamato tunneling quantico , che è noto per essere probabilistico e casuale. L'idea di base è che gli elettroni "saltano" casualmente sopra la banda proibita all'interno del transistor, portando a un segnale fluttuante in modo casuale. Possiamo quindi amplificare questo (un semplice amplificatore a transistor PNP lo farà) e interpretare l'uscita come 1 o 0 campionando il risultato ad una frequenza fissa - se supera una certa soglia è un 1, altrimenti è uno 0.
Un leggero deficit di questo meccanismo è che qualsiasi dispersione DC porterà ad una inclinazione verso 1s che appare più spesso di 0 secondi. Per ovviare a questo, possiamo usare un semplice trucco chiamato decorrelazione di von Neumann, che essenzialmente consiste nel codificare le coppie di bit 01 e 10 su 0 e 1 rispettivamente, ignorando tutte le coppie 00 e 11. Ciò produce un flusso statisticamente non distorto.
Posso quasi certamente garantire che questo è il meccanismo con cui produce numeri casuali. C'è un'alternativa principale (due porte NOT polarizzate inverse in parallelo) ma è coperta da un brevetto Intel, quindi dubito che ARM stia usando quello. Sfortunatamente, l'unico modo per sapere con certezza è di prendere un po 'di acido e decapare un chip, quindi prendere un microscopio e iniziare il reverse engineering del silicio. Non ho l'attrezzatura di riserva disponibile per questo.
La potenziale vulnerabilità che potresti trovare in tale esplorazione è che i segnali di clock ad alta frequenza o altre linee di dati HF sono instradati molto vicino all'RGNG o alla sua logica di supporto, portando a potenziali interferenze. Questo di solito è improbabile nei circuiti integrati, ma stiamo parlando di applicazioni ad alta sensibilità qui, quindi vale la pena cercarlo. Anche se fosse il caso, però, non vedo che fornisca un utile disallineamento da una prospettiva crittanalitica.
Il prossimo potenziale di sfruttamento è il microcodice. Recentemente, un ricercatore ha dimostrato che era possibile applicare patch al microcode per i processori Intel per cercare modelli unici nel buffer delle istruzioni e rilevare quando l'istruzione RDRAND veniva utilizzata per riempire il pool /dev/random
. Identificherebbe quindi la posizione di quel buffer del pool nella cache del processore e lo azzererebbe effettivamente, causando la copia del pool zero nella memoria del sistema. Ciò significava che /dev/random
avrebbe costantemente prodotto lo stesso valore controllato dagli attaccanti, con risultati ovviamente devastanti. Se è stato utilizzato un trucco simile ma più sottile nel microcode ARM, potrebbe essere possibile ridurre in modo massiccio l'entropia dell'HRNG in un modo che è noto solo al creatore del cerotto. Rilevare questi trucchi sarebbe difficile, ma potrebbe essere fatto estraendo il microcodice e analizzandolo.
Infine, l'ultimo problema è il design RNG all'interno del kernel di Linux. Il pool /dev/random
viene in genere alimentato da una serie di fonti basate sullo stato, utilizzando un algoritmo di missaggio basato su una funzione crittografica. Tuttavia, quando sono disponibili istruzioni RDRAND o simili, il motore semplicemente svela i dati sul pool. Questa non è esattamente una buona idea, perché rende facile avvitare i dati del pool in modo significativo producendo determinati valori. Se fosse usata la funzione di missaggio più strong, l'attaccante avrebbe bisogno di romperlo (o fare qualcosa di più evidente) al fine di ottenere un controllo significativo sul pool.
Non c'è una risposta ovvia alla tua domanda. I generatori di numeri casuali dell'hardware possono essere di altissima qualità, ma è difficile analizzarne l'implementazione solo con un dispositivo consumer. Detto questo, se hai intenzione di diffidare del tuo hardware, non puoi davvero fare alcuna garanzia in primo luogo. Se si desidera limitare interamente la portata della sfiducia alla qualità dei numeri casuali prodotti, quindi progettare il sistema di supporto in base a tale circostanza.