Probabilmente usi la crittografia, in una forma o nell’altra, ogni giorno. Potresti non sapere che lo sei, ma lo sei. E la mia ipotesi è che tu non ci pensi un secondo. Hai un servizio di TV via cavo o satellitare basato su abbonamento? Indovinate un po’, alcuni di quei contenuti saranno crittografati. Ti connetti a siti web utilizzando https://? E ‘ piu ‘ cifratura. Mai creato un .file zip con una password? Hai capito, che usa la crittografia.,
Potrei andare avanti e una lista decine di altri esempi di crittografia ogni giorno, ma non lo farò. Per quanto riguarda Android, supporta anche la crittografia, non solo per il web con https:// ma anche per i file e dati. Android 6.0 Marshmallow utilizzato la crittografia completa del disco, mentre Android 7.0 Torrone ha aggiunto l’opzione per la crittografia per file. L’idea è che se il telefono dovesse cadere nelle mani di ostili, allora i tuoi dati privati sono sicuri.
Allora, qual è la crittografia? È il processo di prendere dati semplici, incluso il testo, e convertirlo in una forma illeggibile (da esseri umani o computer)., Il processo di crittografia si basa su una chiave, l’analogia qui è un blocco che ha bisogno di una chiave, e solo le persone con la chiave possono sbloccare (decifrare) i dati e rimetterli nella sua forma originale. Ciò significa che chiunque entri in possesso dei tuoi dati crittografati non può leggerli a meno che non abbia la chiave.
Come ha detto il personaggio di Tom Jericho nell’eccellente film Enigma, “Trasforma i messaggi di testo in gobbledygook. All’altra estremità c’è un’altra macchina, che traduce il messaggio nel testo originale.”Crittografia e decrittografia!,
Tutto è iniziato con Caesar
L’arte della scrittura segreta, quella che chiameremmo crittografia, esiste da almeno 2500 anni, tuttavia l’esempio più famoso dell’antichità è quello del cifrario di sostituzione usato da Giulio Cesare per inviare messaggi a Cicerone., Un cifrario a sostituzione funziona in questo modo, si inizia con l’alfabeto su una linea e poi aggiungere una seconda linea con l’alfabeto spostato lungo un po’:
A B C D E F G H I J K L M N O P Q R S T U V W X Y ZX Y Z A B C D E F G H I J K L M N O P Q R S T U V W
Se si desidera crittografare la parola “CIAO”, quindi prendere la prima lettera, H, e guardare la lettera al di sotto di esso, che ti dà E. Quindi E dà la B e così via. La forma criptata di CIAO è EBIIL. Per decifrarlo si cerca E sulla riga in basso e si vede la H sopra di essa, quindi la B sul fondo per ottenere la E sopra di essa e così via. Completa il processo per ottenere CIAO.,
In questo caso la “chiave” è 3, perché l’alfabeto è stato spostato tre a destra (puoi anche spostarti a sinistra). Se si passa alla chiave per dire 5, si ottiene questo:
A B C D E F G H I J K L M N O P Q R S T U V W X Y ZV W X Y Z A B C D E F G H I J K L M N O P Q R S T U
Ora la versione crittografata di HELLO sarebbe CZGGJ. Molto diverso da EBIIL. In questo caso la chiave è 5. Magia!
Tuttavia ci sono alcuni problemi importanti con questa forma di crittografia. Prima di tutto ci sono solo 26 chiavi. Potresti aver sentito parlare di persone che parlano di chiavi a 128 bit o chiavi a 256 bit, beh questa è una chiave a 5 bit (cioè 26 in binario è 11010)., Quindi non ci vorrebbe troppo tempo per provare tutte le 26 varianti e vedere quale inizia a produrre un testo comprensibile.
In secondo luogo, l’inglese (e altre lingue) ha determinate caratteristiche. Ad esempio, E è la lettera più popolare in inglese, quindi se hai un buon pezzo di testo potresti vedere quale lettera appare più frequentemente e quindi indovinare che è E. Sposta l’alfabeto inferiore per abbinare E con il carattere più comune e probabilmente hai decifrato il codice. Inoltre ci sono solo poche lettere che possono raddoppiare in inglese, come OO, LL, SS, EE e così via., Ogni volta che vedi un doppio come II o GG (dagli esempi sopra), dovresti provare prima ad abbinare quelli sugli alfabeti.
La combinazione della piccola chiave e il fatto che la stessa lettera crittografa sempre la stessa lettera corrispondente sull’alfabeto cifrato significa che questa è una crittografia molto debole. E oggi con i computer che fanno il duro lavoro, questo è al di là debole!,
Più alfabeti e crittografia infrangibile
Le debolezze del cifrario di sostituzione Caesar possono essere leggermente alleviate usando più di un alfabeto spostato. L’esempio seguente può essere esteso a 26 alfabeti spostati di cui diversi vengono utilizzati contemporaneamente, ma non tutti.
A B C D E F G H I J K L M N O P Q R S T U V W X Y ZZ A B C D E F G H I J K L M N O P Q R S T U V W X YY Z A B C D E F G H I J K L M N O P Q R S T U V W XX Y Z A B C D E F G H I J K L M N O P Q R S T U V WW X Y Z A B C D E F G H I J K L M N O P Q R S T U VV W X Y Z A B C D E F G H I J K L M N O P Q R S T U
Quindi se impostiamo la chiave su WVY significa che usiamo prima l’alfabeto che inizia con W, poi quello che inizia con V e infine quello che inizia con Y. Questo viene quindi ripetuto per codificare l’intero messaggio. Così CIAO sarebbe diventato DZJHJ., Si noti che ora la doppia L in HELLO non è codificata come lo stesso carattere, ora è J e poi H. Inoltre, la prima J nel testo crittografato è il codice per L mentre la seconda è il codice per O. Quindi J ora non rappresenta sempre la stessa lettera di testo normale.
Una versione di questa idea, con 26 alfabeti, è la base del codice Vigenère che è stato pubblicato nel 16 ° secolo da Blaise de Vigenère. Un’idea simile fu descritta anche da Giovan Battista Bellaso nel 1553., Il cifrario Vigenère rimase indistruttibile per 300 anni fino a quando non fu incrinato da Charles Babbage e poi da Friedrich Kasiski. Il segreto per rompere il codice Vigenère è capire che alla fine le stesse parole possono essere codificate usando le stesse lettere perché gli stessi alfabeti vengono usati ancora e ancora. Quindi la parola “E” potrebbe essere codificata in modo diverso le prime volte che appare, ma alla fine verrà codificata usando di nuovo le stesse lettere. La ripetizione è generalmente la caduta di un cifrario.,
La ripetizione è la debolezza del codice Caesar, del Vigenère e di tutte le varianti, ma c’è un modo per usare un codice alfabeto per creare un codice segreto infrangibile senza ripetizioni, si chiama one-time pad. L’idea è che piuttosto che usare un alfabeto spostato, viene utilizzata una sequenza casuale di lettere. Questa sequenza deve essere veramente casuale e deve avere la stessa lunghezza del messaggio.
I S T H I S U N B R E A K A B L EP S O V Y V U B M W S P A H Q T D
Invece di fare una sostituzione diretta questa volta usiamo addition, con una torsione., Ad ogni lettera dell’alfabeto viene assegnato un numero, A è 0, B è 1, C è 2 e così via. I è la nona lettera dell’alfabeto, il che significa che ha un valore di 8. P (la lettera sotto di esso sul nostro one-time-cipher pad) 15. 8 + 15 = 25 che significa X. La seconda lettera del nostro messaggio è S, che ha il valore 18. Si dà il caso che S sia anche la lettera sul nostro pad di una volta (che non è affatto un problema). 18 + 18 = 36. Ora ecco la svolta, non c’è la 36a lettera dell’alfabeto. Quindi eseguiamo quella che viene chiamata operazione di modulo., Ciò che significa fondamentalmente è che abbiamo diviso il risultato per 26 (il numero di lettere nell’alfabeto) e usiamo il resto. 36 / 26 = 1 resto 10. La lettera con il valore di 10 è K. Se continui a farlo il messaggio crittografato finale è:
X K H C G N O O N N W P K H R E H
Il motivo per cui questo codice è infrangibile è che usi la chiave (la stringa casuale) solo una volta. Ciò significa che chiunque tenti di decodificare il messaggio non ha alcun punto di riferimento e non c’è ripetizione. Il prossimo messaggio da inviare utilizzerà una chiave casuale completamente diversa e così via.,
Il problema più grande con i pad monouso è ottenere le chiavi dell’altra parte in modo che possano decifrare il messaggio. Tradizionalmente questo è stato fatto usando un libro sotto forma di blocco note, con i diversi codici su ogni pagina. Quali pagine erano in uso cambierebbe ogni giorno e una volta che un codice è stato utilizzato potrebbe essere strappato dal pad e scartato. Tuttavia questi pad devono essere trasportati in un metodo sicuro. Perché se qualcun altro ottiene i codici, la crittografia può essere incrinata., Ciò significava fondamentalmente che dovevi incontrare l’altra parte prima della mano e concordare quali codici sarebbero stati utilizzati e quando. È il metodo più sicuro, ma è anche il più ingombrante, e certamente non è una soluzione praticabile per il mondo digitale moderno di oggi.
L’era digitale
Durante il XX secolo la crittografia divenne meccanizzata, l’esempio più famoso fu la macchina Enigma usata dai nazisti durante la seconda guerra mondiale. Tuttavia dopo la guerra la crittografia divenne computerizzata., Ci sono tre grandi vantaggi per la crittografia computerizzata:
- I computer sono flessibili, a differenza delle scatole meccaniche, i computer possono essere programmati per eseguire molte operazioni diverse su un messaggio e il numero e la complessità di queste operazioni possono essere modificati in tempi relativamente brevi.
- Velocità.
- I computer si occupano di numeri binari non solo di lettere.
I punti 1 e 2 sono molto importanti, specialmente quando si confrontano i computer con i metodi di crittografia meccanica. Tuttavia il cambiamento di paradigma è che i computer si occupano di numeri e non di lettere., Ciò significa che la crittografia può essere applicata a qualsiasi tipo di dati. Un messaggio di testo, un’immagine, un file audio, un film, un database, file su uno smartphone e così via.
Con il passaggio dalle lettere al binario è arrivato un cambiamento nel modo in cui viene eseguita la crittografia. Le lettere intere non devono più essere crittografate, ma invece gli uni e gli zeri possono essere manipolati per produrre nuove sequenze. La parola CIAO in ASCII a 8 bit è 0100100001000101010011000100110001001111. Da qui il binario può essere manipolato in una miriade di modi diversi. Può essere diviso, spostato, aggiunto, moltiplicato, qualunque cosa.,
Il metodo utilizzato per elaborare gli uni e gli zeri è noto come algoritmo crittografico e ci sono molti diversi tipi di algoritmi. Le caratteristiche principali di un algoritmo di crittografia sono la sua sicurezza (può essere incrinato) e le sue prestazioni (quanto tempo ci vuole per codificare o decodificare i dati).
I cifrari di flusso sono come pad una tantum in quanto i dati non sono solo crittografati contro una singola chiave, ma piuttosto una sequenza di numeri pseudo-casuali basati sulla chiave. La differenza tra un pad una tantum e un codice stream è che con un pad una tantum la chiave deve essere veramente casuale. Con cifrari flusso utilizzando la stessa chiave significa che si ottiene la stessa sequenza di numeri, che è ciò che rende possibile decodificare il messaggio., Tuttavia senza la chiave la sequenza sembra casuale ed è quindi difficile da rompere.
La debolezza di RC4 era che in alcune circostanze e in alcune condizioni (principalmente quando gli stessi dati venivano ripetutamente crittografati) allora è possibile indovinare quali numeri potrebbero venire dopo nella sequenza. Questa ipotesi riduce il numero di combinazioni possibili e consente di utilizzare un attacco di forza bruta (in cui viene tentata ogni combinazione). Per far funzionare l’attacco sono necessari molti dati. L’RC4 NO MORE attack deve raccogliere 75 ore di dati crittografati, in base a 4450 richieste al secondo.,
L’altro tipo principale di cifratura è il cifrario a blocchi. Funziona dividendo i dati in blocchi più gestibili, ad esempio a 64 bit. Ogni blocco viene elaborato più volte, noto come round (come nel pugilato). Per ogni round il blocco è diviso in due parti uguali, la sinistra e la destra. La parte destra rimane intatta mentre la parte sinistra viene crittografata utilizzando una funzione speciale, chiamata funzione rotonda. La funzione round prende due ingressi, la chiave e la parte destra (la parte che è rimasta intatta). Il risultato della funzione round viene quindi “aggiunto” alla parte sinistra usando XOR.,
Questo modello è conosciuto come un cifrario Feistel, dal nome del suo inventore Horst Feistel che ha lavorato sulla crittografia presso IBM. Il suo lavoro alla fine ha portato allo sviluppo del Data Encryption Standard (DES). Nel 1977 DES divenne lo standard di crittografia ufficiale per gli Stati Uniti e vide l’adozione in tutto il mondo. DES utilizza 16 turni che lavorano su blocchi a 64 bit. Il problema con DES è che la NSA ha limitato la dimensione della chiave a 56 bit. Mentre nel 1977 questo era sufficiente, alla fine del 1990 è diventato possibile per le organizzazioni non governative di rompere DES messaggi crittografati.,
JARGON BUSTER
Esclusivo OR (XOR) – Questa è un’operazione logica a livello di bit che viene applicata a 2 bit di input A e B. L’Esclusivo OR restituisce true o false (1 o 0) alla domanda, “A o B, ma non, A e B”. Si può pensare ad esso come, “uno o l’altro, ma non entrambi”. Quindi, se A è 1 e B è 0 allora questo è l’uno o l’altro, quindi il risultato è 1 (vero). Lo stesso risultato vale per A è 0 e B è 1. Ma se A è 0 e B è 0, il risultato è 0 (false), poiché entrambi hanno lo stesso valore. False è anche dato per A è 1 e B è 1.,
Ma la vera magia di XOR è che è reversibile. Se A XOR B = C allora B XOR C = A e A XOR C = B. Questo è molto importante per la crittografia in quanto significa che i dati possono essere crittografati (dove A sono i dati) utilizzando una chiave (B) per ottenere i dati crittografati (C). Successivamente i dati crittografati possono essere decifrati da XOR con la chiave di nuovo per ottenere i dati originali. Il motivo per cui XOR viene utilizzato in combinazione con complicate funzioni rotonde e operazioni di spostamento dei bit è perché da solo XOR può essere rotto usando l’analisi della frequenza (a causa della chiave costantemente ripetuta).,
In risposta alle debolezze del DES, è stato proposto un nuovo standard chiamato Triple DES (3DES). Che fondamentalmente ha crittografato i dati tre volte con DES, ma con tre chiavi diverse. 3DES ha offerto un modo per aumentare la dimensione della chiave da 56 bit a 168 bit senza la necessità di progettare un algoritmo di cifratura a blocchi completamente nuovo. A causa di alcuni dettagli tecnici, la chiave effettiva è di 112 bit, ma se tu avessi una macchina che potrebbe rompere DES in 1 minuto, ci vorrebbe la stessa macchina circa 260.658 anni per rompere una chiave Triple-DES.,
Mentre DES aveva servito il suo scopo per quasi 25 anni, la lunghezza della chiave limitata significava che era tempo per un altro standard di crittografia. Nel 2001, il National Institute of Standards and Technology (NIST) degli Stati Uniti ha pubblicato l’Advanced Encryption Standard (AES). Non è un cifrario di Feistel, ma piuttosto una rete di permutazione di sostituzione. Utilizza ancora blocchi e round proprio come DES, tuttavia durante ogni round l’ordine dei bit nel blocco viene scambiato e il risultato viene combinato con la chiave usando XOR.
AES utilizza chiavi a 128, 192 o 256 bit e funziona su blocchi di 128 bit., Il numero di giri utilizzati dipende dalla dimensione della chiave. Il minimo è 10, che viene utilizzato per le chiavi a 128 bit e il massimo è 14, che viene utilizzato per le chiavi a 256 bit.
AES, Android e l’architettura ARMv8
AES è al centro dei sottosistemi di crittografia in Android. Per Android 5.0 e Android 6.0, Google ha imposto l’uso di AES con almeno una chiave a 128 bit per i dispositivi che supportano la crittografia completa del disco., Con Android 7, Google è passato a file based encryption (FBE) che consente di crittografare diversi file con chiavi diverse consentendo al contempo di decifrare i file in modo indipendente. Sembra che FBE in Android 7 usi AES a 256 bit.
Quando ARM ha effettuato il passaggio da 32 bit a 64 bit, ha definito una nuova revisione della sua architettura di set di istruzioni chiamata ARMv8. Oltre a definire il set di istruzioni per i chip ARM a 64 bit, ha anche aggiunto nuove istruzioni per implementare parti dell’algoritmo AES nell’hardware. Durante ogni round vari bit vengono scambiati e sostituiti., Il modo in cui i bit vengono manipolati è ben definito (e parte dello standard), quindi le estensioni AES in ARMv8 consentono a quelle parti della crittografia di accadere nell’hardware piuttosto che nel software.
Il risultato è una crittografia fulminea, che dovrebbe avere un impatto trascurabile sulle prestazioni complessive del sistema. L’implementazione AOSP della crittografia basata su file utilizza AES-256 e richiede una prestazione di almeno 50 MB/s.
Crittografia a chiave pubblica e wrap-up
La maggior parte di ciò che abbiamo discusso fino ad ora è noto come crittografia simmetrica., Per crittografare e decifrare un messaggio, sia il mittente che il destinatario devono conoscere la chiave segreta. Esiste una forma di crittografia chiamata crittografia asimmetrica in cui ci sono due chiavi, una per crittografare i messaggi e una diversa per decrittografarli. La chiave di crittografia può essere pubblicata liberamente per tutti coloro che desiderano inviare un messaggio al destinatario, tuttavia la chiave di decrittografia deve rimanere segreta, ma deve solo essere conosciuta dal destinatario. Ciò significa che c’è una chiave pubblica e una chiave privata. Questo sistema è la base di come funziona la sicurezza su Internet, come funziona il protocollo https://., Tuttavia questa è una storia per un altro giorno!
In chiusura voglio aggiungere un avvertimento. La crittografia è un argomento complesso e c’è molto di più per la crittografia di quanto ho scritto qui.