Posso implementare una fonte di entropia (debole) in FPGA?


12

Sto lavorando con una piattaforma IoT in FPGA per la valutazione e la prototipazione. Devo fornire supporto per TLS e per questo ho bisogno di una fonte di entropia.

Capisco che le vere fonti di rumore casuali sono abbastanza specialistiche (anche se pratiche) in FPGA, dal momento che le prestazioni del dispositivo sono spesso piuttosto buone (e difficili da trovare parametri di caso angolare), ma posso implementare un generatore di sequenza pseudo-casuale senza alcun i problemi.

Ho solo alcuni canali I / O standard (uart, I2C, ecc.), Nulla di simile può fornire anche molto per eseguire il seeding di un PRBS, tranne forse un ingresso audio ADC. Esistono forse trucchi affidabili per la generazione di entropia in un FPGA che dovrei prendere in considerazione?

Supponendo che io uso un PRBS, posso potenzialmente collegare una fonte di rumore esterna che potrei certamente usare come seme. Sono interessato a sapere quanto questo effettivamente aggiungerebbe alla mia implementazione TLS. Questo sarebbe affidabile e sicuro, o solo leggermente migliore rispetto all'utilizzo di una sequenza pseudo-casuale fissa? Dovrei continuare a eseguire il polling della fonte di rumore esterna per ulteriore entropia?

Va bene se la fonte di entropia con cui finisco non è propriamente crittografica (dal momento che è solo per la prototipazione), ma mi piacerebbe capire il compromesso qualità-prezzo.

Risposte:


6

È necessario? Puoi implementare un generatore casuale crittograficamente sicuro se hai due cose: un po 'di archiviazione sicura riscrivibile e un seme iniziale. Cioè, è sufficiente seminare l'RNG una volta, quindi salvarne lo stato e disattivarlo. Non è l'ideale, sarebbe meglio mescolare periodicamente l'entropia, ma va bene, specialmente per un protoipo di sviluppo.

È necessario disporre di uno spazio di archiviazione sicuro riscrivibile. Se il dispositivo ha solo ROM e memoria non sicura, questo approccio non è possibile. Deve esserci una posizione in cui è possibile memorizzare lo stato RNG in modo tale che gli avversari non possano né leggerlo né modificarlo.

Il modo in cui funziona è che, all'avvio del dispositivo, carica lo stato RNG corrente e lo utilizza per generare alcuni byte casuali sufficienti per una dimensione doppia dello stato RNG. Scrivi la prima metà come nuovo stato RNG salvato e usa la seconda metà come stato RNG iniziale per la sessione corrente. Con qualsiasi PRNG crittograficamente sicuro, questo produce un PRNG crittograficamente sicuro. Si noti che è fondamentale non riutilizzare uno stato RNG memorizzato, ecco perché è necessario scrivere un nuovo stato RNG indipendente prima di iniziare a utilizzare RNG.

L'iniezione iniziale di entropia può avvenire durante la produzione o quando il dispositivo è installato. Di solito queste cose accadono con una connessione a un PC che può generare l'entropia per conto del dispositivo.


OK, quindi in questo contesto non credo che l'archiviazione debba essere sicura, dato che il modello di utilizzo non è un prodotto di consumo. Si può presumere che qualsiasi utente malintenzionato non abbia accesso fisico al mio dispositivo (sebbene possano avere un dispositivo identico) . Quindi non posso impedire un clone.
Sean Houlihane,
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.