Come utilizzare la crittografia One Time Pad con un Raspberry Pi
ComeNon è mai stato più difficile avere la certezza assoluta che qualsiasi messaggio inviato possa essere trasmesso o ricevuto in assoluta segretezza.
Questo sacro graal della crittografia ha a lungo frustrato gli esperti di sicurezza, e la maggior parte delle persone è disposta ad accontentarsi di utilizzare programmi di crittografia come gpg, che seppur teoricamente irrisolvibile resisterà a tutti i tentativi di cracking per molto tempo dopo aver spinto verso l'alto le margherite.
E se, comunque, ci fosse un modo per essere certi che le tue e-mail personali, le foto del tuo gattino domestico, i backup delle dichiarazioni dei redditi negli ultimi dieci anni e così via fossero al sicuro anche se intercettati? Inserisci il One Time Pad.
- Come stare al sicuro online
The Notorious OTP
In termini semplici, un One Time Pad è una serie di numeri casuali che concorda con qualcuno con cui desideri comunicare, di solito incontrando di persona e scambiando pad.
Quando si invia un messaggio, è necessario prima convertirlo in numeri, quindi aggiungere ciascuno di questi numeri ai numeri nel pad. Una volta che il destinatario riceve il messaggio, può lavorare all'indietro usando la sua copia del pad, deducendo i numeri per recuperare il messaggio originale.
Un'implementazione dell'OTTP che codifica il messaggio “Il falco è volato.”A condizione che i numeri siano veramente casuali, nessun altro vede il pad, e lo stesso testo non è codificato due volte con lo stesso pad, quindi nemmeno il supercomputer più veloce del mondo non può decodificare il messaggio.
La forza della crittografia sta nella casualità dei numeri dei pad. Senza saperlo, chiunque intercettasse un messaggio potrebbe vedere la parola "LINUX" crittografata come "OSYAJ" ma non avrebbe modo di sapere che non è un'altra parola di cinque lettere, come "CILE".
L'One Time Pad ha iniziato a risuonare in una forma o in una forma sin dal 1880, ma fu solo nel 1917 che Gilbert Vernam e formalmente brevettarono una macchina per automatizzare il processo.
In questo caso sono stati usati due rulli di nastro perforato, uno con il messaggio originale e uno con il pad di numeri casuali.
Gli agenti del KGB negli Stati Uniti furono pronti a sfruttarlo durante la Guerra Fredda, piazzando pastiglie all'interno di nichel scavati, noci finte e qualsiasi numero di nascondigli vile.
Nel 21 ° secolo, i computer come Raspberry Pi si prestano bene ad essere trasportati facilmente e sono perfetti per generare ed elaborare One Time Pad. Ma per capire perché, è necessario capire le insidie del One Time Pad.
- Vedi altri progetti Raspberry Pi
OTP diventa termico
Per procedere, è necessario che la stampante di Adafruit sia configurata e funzionante. Fortunatamente il sito ha una guida eccellente a questo.
Innanzitutto installa rng-tools come indicato nel Passaggio 1 della procedura dettagliata alla pagina successiva. Dovrai anche modificare / etc / default / rng-tools nel tuo editor di testo preferito. Rimuovi il # all'inizio della riga HRNGDEVICE = / dev / hwrng. Salva ed esci.
Usa sriavvio udo /etc/init.d/rng-tools per essere sicuri che il Raspberry Pi stia usando solo l'hardware RNG ora.
Quindi, scarica il software otp-gen:
$ git clone https://github.com/iworkinpixels/otp-gen.git
A questo punto, se lo desideri, puoi andare nella cartella opt-gen / e scappare da un sample pad per vedere come appare:
$ cd otp-gen
$ sudo ./otp.py
$ nano otp.txt
Successivamente dobbiamo assicurarci che il software si avvii automaticamente all'avvio della macchina:
$ sudo nano /etc/rc.local
Scorri fino alla fine di questo file e inserisci le tre righe seguenti sopra le parole "exit 0":
$ cd / home / pi / otp-gen
$ ./otp.sh
$ python ./otp.py
Se hai scaricato la cartella otp-gen in qualsiasi altro punto oltre a / home / pi /, modifica la prima riga di conseguenza.
Usa Ctrl + X per uscire dall'editor di testo e premi Y per salvare le modifiche.
Successivamente usa sudo reboot per riavviare il tuo Raspberry Pi. La stampante dovrebbe stampare un messaggio che dice che è connesso alla rete insieme al tuo indirizzo IP, quindi mettere in pausa.
Basta premere il pulsante per generare il proprio time pad. Ripeti tutte le volte che vuoi.
L'entropia non è più quella di una volta ...
Bruce Schneier una volta descrisse l'One Time Pad come “teoricamente sicuro, ma ... non sicuro in senso pratico.”
Ciò riflette il fatto che ci sono stati dei tempi in cui le pratiche di pagamento in tempo reale sono state infrante in pratica, nonostante la loro sicurezza teorica. Negli anni '40, ad esempio, il programma di controspionaggio statunitense di SIGINT Venona fu in grado di decifrare un certo numero di messaggi OTP sovietici semplicemente perché alcuni pad erano stati riutilizzati.
Questo peccato cripto-cardinale è stato commesso perché i sovietici semplicemente non potevano generare pad abbastanza velocemente per le migliaia di messaggi giornalieri inviati durante la guerra.
Una falla simile è stata trovata dai codicelli tedeschi in Cryptonomicon di Neal Stephenson. Gli inglesi impiegano una zattera di vecchie signore con piccole macchine da bingo per disegnare palline numerate per generare pastiglie.
Sfortunatamente i vecchi non sempre obbediscono alle migliori pratiche - non riescono a distogliere lo sguardo ogni volta che disegnano una palla come da istruzioni, nel senso che selezionano inconsciamente numeri prevedibili.
Avanti veloce verso il 21 ° secolo e il problema non è migliorato molto. Interi libri sono stati dedicati a questo argomento, ma è sufficiente dire che i computer generalmente non sono molto bravi a generare casualità.
Di solito quando è necessario un sito Web o un programma ti chiederà di muovere il mouse per fornire un cosiddetto “fonte di rumore” lavorare da.
Principalmente però quando un computer richiede grandi quantità di casualità, si formerà una stringa di dati pseudo-casuali dal tuo entropy pool, che, mentre è ideale per determinare dove il prossimo blocco cadrà quando suonerai Tetris, non è perfetto quando si tratta di sicurezza.
Per fortuna una delle funzionalità meno conosciute del Raspberry Pi è che ha il suo generatore di numeri casuali hardware incorporato, che in combinazione con la suite rng-tools può generare esattamente il tipo di casualità di alta qualità necessaria per un OTP.
Il secondo ostacolo affrontato da chi utilizza OTP ha a che fare con la generazione e distribuzione delle chiavi. I sovietici non erano in grado di tenere il passo con le richieste della guerra, e nella vita reale le macchine da bingo delle vecchie signore britanniche finirebbero probabilmente per fumare con il numero di volte in cui avrebbero dovuto essere agitate.
Un modo piuttosto drammatico per essere certi dati è stato cancellato. Per motivi di sicurezza, potrebbe essere meglio prendere in considerazione strumenti di cancellazione sicura prima di raggiungere una fiamma ossidricaFortunatamente l'RNG hardware integrato nel Raspberry Pi può generare grandi quantità di dati in un breve lasso di tempo. Ad esempio, un pad con 10.000 serie di numeri casuali a cinque cifre può essere generato in pochi secondi attivando l'RNG dell'hardware (vedere il passaggio 1 della nostra guida alla pagina successiva) e quindi immettendo:
$ sudo base64 / dev / hwrng | tr -dc '0-9' | piega -sw 5 | head -c 10000> bobtoaliceotp.txt
Max out il tuo MAC
È meglio prima di inviare qualsiasi informazione privata con un OTP per inviare prima un messaggio Challenge-Response. Tecnicamente potresti concordare due parole in codice da utilizzare con il tuo destinatario: uno potrebbe indicare che sei tu e che sei in grado di parlare liberamente, ad esempio, “Everest” - e un altro potrebbe rivelare che stai parlando sotto coercizione - per esempio, “Passero”.
Ciò significa tuttavia che lo stesso testo viene crittografato ogni volta, rendendo i messaggi più facili da decifrare.
Un sistema migliore è quello di scegliere da una lista di parole o frasi prestabilite. Un modo per farlo sarebbe quello di concordare un libro - le directory e gli almanacchi sono tipi perfetti di libri per questo - e nel tuo “sfida” messaggio che potresti inviare una pagina e una riga arbitrarie.
Ad esempio, potresti accettare di utilizzare l'edizione del 1992 di Almanack di Wisden Cricketer. Bob può messaggio Alice dicendo, “613-1.” Alice può rispondere con la prima riga della pagina 613, che è: “Il Worcestershire era l'unica contea a vincere due trofei nel 1991.”
Può quindi aggiungere una propria sfida al messaggio, ad esempio chiedendo la pagina 582, riga 4.
Se Alice risponde con qualcosa di diverso dalle parole corrette, Bob saprà che non è lei o lei è sotto costrizione, e lo stesso vale per la sua risposta a lei.
Puoi aumentare ulteriormente la sicurezza di questo sistema accettando in anticipo che la risposta alla sfida non dovrebbe essere la riga richiesta nel messaggio ma quella (diciamo) tre righe dopo, o forse la stessa riga nella pagina seguente.
Il file di testo risultante può quindi essere stampato, ad esempio dalla stampante termica di Adafruit. Questa stampante ha il vantaggio che, a differenza della maggior parte delle stampanti laser, non registra il numero di serie, la marca o il modello su ciascun foglio stampato (su questo, vedere questo sito Web).
Può contenere anche fino a 15 m di carta, che saranno sufficienti per generare lunghi messaggi. Usando questo in combinazione con l'eccellente programma di otp-gen, puoi stampare i tuoi pad automaticamente anche con il semplice tocco di un pulsante (vedi la casella 'OTP goes Thermal' in questa pagina).
Una volta che le risme di carta sono state stampate in modo sicuro e nascoste, viene in seguito il problema della distribuzione fisica dei pad.
Questo è senza dubbio il motivo principale per cui l'OTP non ha visto un uso molto diffuso. Si dice che il telefono rosso che corre tra Washington e Mosca, ad esempio, sia protetto da un OTP, principalmente perché entrambi i Superpowers sono abbastanza ricchi e melodrammatici da avere uomini con occhiali scuri da ammanettare a valigette e scambiare pastiglie a intervalli regolari.
Ovviamente se hai dei blocchi di carta stampati, è possibile spedirli per posta al destinatario, ma in questo caso l'OTP non sarebbe più sicuro di una normale lettera perché potrebbe essere stata intercettata e copiata lungo il percorso. Lo stesso vale per l'utilizzo di programmi di crittografia regolari come GnuPG.
L'unico modo per essere sicuri che il tuo pad non possa essere intercettato è di consegnarlo di persona. Ancora una volta l'umile Raspberry Pi viene alla ribalta qui perché è estremamente piccolo e facile da trasportare. Dopo aver incontrato la persona con cui desideri scambiare messaggi, puoi dare loro una copia della scheda MicroSD del tuo Raspberry Pi o dello stesso Raspberry Pi.
Per garantire la perfetta sicurezza dei tuoi messaggi, è necessario eliminare i pad che sono stati precedentemente utilizzati.
Se hai stampato il tuo, è probabile che un piccolo strappo e un accendino Zippo siano utili qui. (Sono disponibili altri accendini.)
Altrimenti, eseguire il comando shred sul pad che hai appena usato dovrebbe essere sufficiente per prevenire il recupero. Sia le schede SD che Raspberry Pis sono anche economiche, quindi se senti davvero di doverle distruggere una volta che i pad sono cambiati, puoi farlo anche tu.
Il basso costo di un Raspberry PI è anche un'ottima risposta a un'altra critica comune, ovvero che un OTP è in genere molto difficile da scalare oltre due persone che scambiano messaggi.
Se decidi di formare una società segreta, potrebbe essere meglio designare una persona per incontrare regolarmente ciascun membro e scambiare pastiglie. Quella persona può quindi sedersi al centro della rete e agire come una stanza di compensazione per i messaggi, inoltrandoli tra i membri come necessario.
Anche usando un Raspberry Pi, tuttavia, è ancora possibile intercettare i pad e comunicare può essere complicato. Questo è il motivo per cui è opportuno utilizzare alcune best practice per il tuo OTP.