Crittologia

author
17 minutes, 52 seconds Read
Cose di crittografia? Sembra divertente.

Obiettivi dell’unità

Capire, abbastanza bene, in cosa consiste la crittografia e la crittoanalisi, e soprattutto sapere cosa può e non può garantire.

Sfondo

Alice e Bob possono essere persone ma anche client e server, computer peer, archivi di dati, router di rete, ecc. Mallory può spoofare uno dei partecipanti, aggiungere, modificare o cancellare messaggi reali, dirottare la connessione, fare un denial of service, iniettare malware, ecc.

Obiettivi:

  • Riservatezza: Recuperare $m$ dovrebbe costare a Eva più di quanto $m$ valga.
  • Autenticazione: Bob dovrebbe essere in grado di verificare che è stata Alice ad inviare $m$.
  • Integrità: Bob dovrebbe essere in grado di verificare che $m$ non sia stato manomesso.
  • Non ripudio: Alice non dovrebbe essere in grado di negare l’invio di $m$.

I migliori crittosistemi assumono che Eve e Mallory conoscano $E$, $D$, $c$, e, se $k_e \neq k_d$, allora anche $k_e$. La maggior parte dei criptosistemi non si basano sul fatto che i loro algoritmi siano tenuti segreti, perché:

  • Se il tuo algoritmo segreto è compromesso (qualcuno potrebbe lasciare il tuo gruppo), devi cambiarlo, e questo è molto più difficile che cambiare semplicemente una chiave!
  • Gli algoritmi pubblici possono essere sottoposti a migliaia di esperti alla ricerca di difetti, quindi si ha un certo grado di fiducia in quelli che resistono allo scrutinio.

Altra lettura: Sicurezza attraverso l’oscurità, il principio di Kerchoff e questa discussione.

Lo studio della crittografia include la progettazione di vari cifrari, metodi di crittoanalisi (attacchi), scambio di chiavi, autenticazione delle chiavi, hashing crittografico, firma digitale, e questioni sociali (legali, politiche, ecc.). Vedi la pagina di Wikipedia sugli argomenti di crittografia.

NON FARE QUESTA COSA DA SOLO NELLE APPLICAZIONI REALI

Certo, va bene giocare a casa, ma non provare MAI a rollare la tua crittografia per qualcosa di reale. Lasciatelo ai professionisti. Se diventi un professionista tu stesso, allora, mmmmm, ok.
Questo è stato un importante annuncio di servizio pubblico.

Definizioni

Parole da sapere:

Crittografia L’arte e la scienza di creare cifrari. Crittoanalisi L’arte e la scienza di rompere i codici, cioè l’estrazione di $m$ dati $c$, $E$, $D$, ed eventualmente $k_e$. Criptologia Lo studio della crittografia e della crittoanalisi.

Esercizio: Scopri la steganografia. In che modo è diversa dalla crittografia?

Criptosistema Una particolare serie di algoritmi e protocolli per la crittografia, la decrittografia e la generazione di chiavi. Esempi: Cramer-Shoup cryptosystem, Rabin cryptosystem, Benaloh cryptosystem, RSA cryptosystem. Sistema crittografico Qualsiasi sistema che utilizza la crittografia. Cifrario Un algoritmo usato in un sistema crittografico.

Esercizio: In che modo un “codice” è diverso da un “cifrario”? I codici sono più sicuri dei cifrari? Perché non sono usati così spesso?

Confusione La proprietà di avere la relazione tra il testo in chiaro, il testo cifrato e la chiave così complicata da essere inutile per il crittoanalista. Diffusione La proprietà di avere modelli statistici nel testo in chiaro diffusi ampiamente nel testo cifrato.

Timeline

Se ti piace la storia….

  • Articolo sulla storia della crittografia di Wikipedia
  • Timeline di Wikipedia
  • Timeline di Carl Ellison

Tipi di cifrari

Queste sono alcune utili categorie di cifrari. Notate che un particolare cifrario può appartenere a più di una di queste categorie.

  • Classico: Un cifrario abbastanza facile da essere eseguito a mano, di solito basato sui caratteri. Chiamato anche manuale.
  • Moderno: Praticamente qualsiasi cifrario che non sia classico.
  • Sostituzione: Ogni carattere del testo in chiaro viene sostituito con uno o più caratteri per creare il testo cifrato.
  • Trasposizione: I caratteri del testo in chiaro sono riorganizzati per formare il testo cifrato.
  • Monoalfabetico: Un cifrario di sostituzione in cui un carattere del testo in chiaro è sempre sostituito dallo stesso carattere.
  • Polialfabetico: Un cifrario di sostituzione che essenzialmente usa più mappature di sostituzione monoalfabetiche.
  • Omofonico: Una sostituzione in cui un carattere può corrispondere a uno di un insieme di caratteri.
  • Poligrafico: Una sostituzione di blocchi di caratteri per blocchi di caratteri.
  • Periodico: Un cifratore polialfabetico in cui lo schema di sostituzione si ripete.
  • Non periodico: Autoesplicativo se si capisce il periodico.
  • Blocco: La crittografia non avviene per carattere ma per blocchi di caratteri.
  • Stream: Un cifrario che opera su un flusso di dati di lunghezza sconosciuta, di solito incorporando un feedback.
  • Chiave segreta: Un cifrario in cui $k_e$ e $k_d$ sono uguali o banalmente derivabili l’uno dall’altro; richiede che le parti si incontrino in segreto per scambiarsi le chiavi che useranno. Chiamato anche simmetrico.
  • Chiave pubblica: Uno schema in cui la chiave di crittografia di ognuno è conosciuta pubblicamente ma la sua chiave di decrittazione è tenuta segreta. Chiamato anche asimmetrico.

Crittografia a chiave segreta

I cifrari a chiave segreta (detti anche a chiave simmetrica) sono molto più veloci dei cifrari a chiave pubblica, ma la gestione delle chiavi può essere un problema enorme.

  • Se $n$ persone in un gruppo devono comunicare, hanno bisogno di $frac{n(n-1)}{2}$ chiavi.
  • Le chiavi devono essere distribuite in modo sicuro (in segreto).
  • Le chiavi devono essere tenute al sicuro.
  • Le chiavi devono essere cambiate frequentemente, il che alimenta il mal di testa della distribuzione.

NOTA

Negli esempi basati sui caratteri che seguono, assumeremo (senza alcuna perdita di generalità) un alfabeto di 26 simboli (A..Z).

Cifra di Cesare

Un cifrario completamente patetico e insicuro per gli standard moderni. La chiave di cifratura $k_e$ è un piccolo intero e $k_d = k_e$. Per cifrare, aggiungi $k_e$ ad ogni carattere del testo in chiaro; per decifrare, sottrai.

Esempio: Per k=5, ATTACKATDAWN diventa FYYFHPFYIFBS

Triviale da decifrare: basta indovinare $k_e$.

Sostituzione monoalfabetica

Invece di aggiungere semplicemente un offset fisso ad ogni carattere, puoi precompilare una tabella di sostituzione generando una permutazione casuale del tuo alfabeto. Per esempio:

 ABCDEFGHIJKLMNOPQRSTUVWXYZ MQHPSVJYCURFTBILAKWNGZDOEX

Ora ATTACKATDAWN è ora MNNMHRMNPMDB.

Non si decifra indovinando la chiave (ci sono $n!$ chiavi possibili), ma l’analisi della frequenza può decifrare qualsiasi cifrario a sostituzione monoalfabetica, purché il messaggio sia abbastanza lungo.

Per le tecniche la cui chiave è una permutazione, un modo per rendere la chiave più facile da ricordare è quello di scegliere una frase, disporre le sue lettere uniche, poi riempire le lettere mancanti in ordine. Per esempio, PREMATURE OPTIMIZATION IS THE ROOT OF ALL EVIL produce questa mappatura di sostituzione:

 PREMATUOIZNSHFLVBCDGJKQWXY

Sostituzione omofonica

Ogni lettera del testo in chiaro corrisponde a uno o più simboli nel testo cifrato. Il numero di obiettivi dovrebbe essere proporzionale alla sua frequenza (per sconfiggere l’analisi di frequenza). Esempio:

 A 12 15 36 50 56 70 81 95 B 51 84 C 16 44 65 D 04 06 48 82 E 01 17 19 34 47 49 58 60 67 77 85 90 F 13 27 G 09 28 H 26 42 53 59 68 71 I 35 73 76 86 91 96 J 18 K 07 L 29 40 54 87 M 25 30 N 21 61 62 69 74 94 O 02 03 08 10 57 75 93 P 41 98 Q 97 R 32 38 43 45 80 83 S 14 22 39 79 89 99 T 00 20 23 33 46 52 72 78 88 U 11 64 66 V 37 W 63 92 X 31 Y 24 55 Z 05

Per cifrare, scegliere a caso tra le possibilità. Esempio, una possibile cifratura di ATTACKATDAWN è

 56 78 20 95 65 07 12 72 06 50 92 61

Semplice Vigenère

Il cifrario noto come cifrario semplice di Vigenère a turni non fu affatto inventato da Vigenère… sembra sia stato descritto per la prima volta da Giovan Battista Bellaso. La chiave è una stringa che si aggiunge al testo in chiaro con l’addizione modulare, come in questo esempio (A=0, B=1, C=2, …, Z=25):

 Plaintext: TAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRDFLOOR Key: QUARKQUARKQUARKQUARKQUARKQUARKQUARKQUARKQUARKQUAR Ciphertext: JUKVKSIPPYVSOLBFILZMONOEYHGANSBWOOYDNHVDXCRUPBIOI

Per generare il testo cifrato a mano si può usare una ruota dei codici o una tabula recta.

Questo schema non è sicuro perché la chiave si ripete. Se la lunghezza della chiave può essere determinata, il crittoanalista può fare analisi di frequenze multiple (una per ogni valore di spostamento nella chiave). I metodi per determinare la lunghezza della chiave sono il metodo Kaisiski e il test di Friedman.

Per i dati binari (cioè, una sequenza di bit) l’addizione modulare base-2 è solo un semplice xor. Esempio:

 Plaintext: 0110000101010000111101001010101010010000001111101 Key: 0000011100000111000001110000011100000111000001110 Ciphertext: 0110011001010111111100111010110110010111001110011

Auto-Key Vigenère

Vigenère ha effettivamente creato un cifrario autokey che è più forte perché la chiave non si ripete mai. Invece la “chiave” è composta dalla frase chiave seguita dal testo in chiaro, come questa:

 Plaintext: TAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRDFLOOR Key: QUARKTAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRD Ciphertext: JUKVKVOZCOHMDSFUMZCTNHZVQPFOJWCOOTWYVVBHUBYHYSWFU

Questa usava il testo in chiaro come parte della chiave. Si potrebbe anche usare il testo cifrato. Vedi come?

Cifrari moderni a chiave automatica

È ancora possibile decifrare i cifrari Vigenère a chiave automatica con l’analisi linguistica, perché la chiave contiene testo ed è quindi probabile che abbia lettere ad alta frequenza. I moderni cifrari a chiave automatica generano i valori di spostamento con un generatore di numeri casuali. La chiave semina il generatore.

Esercizio: Implementare un cifratore a chiave automatica nel linguaggio di programmazione di tua scelta.

One Time Pad

Se la chiave:

  • è lunga quanto o più del messaggio da codificare
  • è veramente generata in modo casuale
  • è usata una e una sola volta

Allora hai un cifratore provabilmente sicuro chiamato one time pad. Il tuo algoritmo attuale può usare la sostituzione polialfabetica o anche la semplice xorazione del messaggio con la chiave, purché tu soddisfi i tre criteri di cui sopra.

Il one-time pad non può mai essere decifrato. È uno schema di crittografia perfetto, da una prospettiva matematica, comunque.

Esercizio: Perché allora i one time pad non sono comunemente usati, dato che sono i cifrari più sicuri possibili?

Playfair

Questo è un esempio di cifrario a sostituzione poligrafica, che sostituisce coppie di caratteri. La chiave è una permutazione di {A..I,K..Z}, per esempio:

 Z C B M L G D A Q E T U O K H F S X V N P I Y R W

Per criptare, scrivete il testo in chiaro (senza spazi o punteggiatura), inserendo una X tra le lettere doppie e alla fine se necessario per rendere il testo di lunghezza uniforme.Poi per ogni coppia di lettere:

  • Lasciate che $(a,b)$ sia la riga e la colonna del primo carattere e $(c,d)$ sia la riga e la colonna del secondo.
  • Se $a \neq c$ e $b \neq d$ allora restituite $(a,d)(b,c)$.
  • Se $a = c$ allora ritorna $(a,(b+1) \bmod 5)(c,(d+1) \bmod 5)$.
  • Se $b = d$ allora ritorna $((a+1) \bmod 5,b)((c+1) \bmod 5,d)$.
Esempio: THEN ATTACK FROM THE EASTTH EN AT XT AC KF RO MT HE XE AS TXUT HW GO FO DB TV YK ZK NH NA DX OFUTHWGOFODBTVYKZKNHNADXOF

La decriptazione esegue le regole al contrario. Il cifrario Playfair è piuttosto insicuro.

Four-square

Codifica i digrafi come Playfair, ma leggermente più forte perché permette le lettere doppie e non produce digrafi cifrati invertiti per digrafi invertiti. Esempio

 a b c d e G I V E M f g h i k L B R T Y l m n o p O D A H C q r s t u F K N P Q v w x y z S U W X Z P R E M A a b c d e T U O I Z f g h i k N S H F L l m n o p V B C D G q r s t u K Q W X Y v w x y z
Esempio: THEN ATTACK FROM THE EASTTH EN AT TA CK FR OM TH EE AS TXNI VL EV FM MO BV DF NI MA VV NX

Ok, quindi leggermente più forte di Playfair ma allora? I computer possono decifrare queste cose in pochi secondi, o forse minuti (dato abbastanza testo cifrato).

Semplice trasposizione a blocchi

Il cifratore a trasposizione più semplice suddivide il messaggio in blocchi di dimensione n, poi rimescola ogni blocco secondo una permutazione di $(1..n)$.

Esempio: Per la chiave $(4,1,6,3,2,5)$ il messaggio GETTHATHEALTHINSPECTOR diventa TGATEHATTEHLSHENIPRCOT.

Trasposizione colonnare

Scrivi il messaggio riga per riga in una griglia, poi leggilo in colonne. Totalmente insicuro. La chiave è solo il numero di righe. Indovina.

Rail Fence

Il rail fence non è migliore dell’ultimo, solo più divertente. La chiave è il numero di binari su cui si scrive il testo in chiaro in modo ascendente e discendente, generando il testo cifrato leggendo un binario alla volta.

Esempio: Per codificare "fill out and file a WS2475 form" su 4 binari:

 f t l 4 m i u a i e 2 7 r l o n f a s 5 o l d w f

si legge poi il testo cifrato "ftl4miuaie27rlonfas5oldwf". Questo è banale da decifrare. Basta indovinare $k$.

Combinazione di sostituzione e trasposizione

La sola trasposizione è molto debole; la sostituzione è debole; combinarle è meglio. Si possono mescolare molti dei classici cifrari a sostituzione con varie trasposizioni, o usare alcuni cifrari a combinazione speciale come bifid. Inoltre, la maggior parte delle famose macchine a rotore e dei cifrari moderni usano questa combinazione; infatti applicano queste trasformazioni molte volte.

Bifido

Questo sostituisce le lettere con le loro coordinate in una griglia e fa una trasposizione a colonne sulle coordinate. Esempio:

 Z C B M L G D A Q E T U O K H F S X V N P I Y R W

Scrivi le coordinate (riga, colonna) sotto ogni lettera del testo in chiaro (es, “A” è alla riga 1, colonna 2; “T” è alla riga 2, colonna 0, ecc.):

 ATTACKATDAWN 122102121143 200213201244

Poi leggi in righe, raggruppa per due e cerca le lettere del testo cifrato:

 122102121143200213201244 A U B A D R T B Q T A W

Trifid

Come Bifid, ma su un cubo. Esempio:

 Z C B M L F V N P G D A Q E X I R W T U O K H S Y . J

Per cifrare, prima scrivi le coordinate:

 ATTACKATDAWN 000001000022 122102121110 200210201221
 000001000022122102121110200210201221 Z C Z O S F H Q V I N .

Enigma

La Enigma era la famosa macchina tedesca a rotore della seconda guerra mondiale (in realtà una famiglia di macchine).La maggior parte delle versioni implementava un cifrario a sostituzione polialfabetica con un periodo di 16900 più una scheda per lo scrambling (trasposizione). La chiave consisteva nell’ordine dei rotori, la posizione iniziale di ogni rotore, le impostazioni dell’anello e le impostazioni della scheda (circa 1,6 × 1020 possibilità). C’era una nuova chiave ogni giorno (più o meno) pre-pubblicata nei libri di codice.

Gli alleati furono in grado di decifrarla grazie ad alcune debolezze nel suo design…

  • Nessuna lettera si criptava da sola
  • L’auto-reciprocità significava che c’erano meno possibilità di configurazione dello scrambler

…ma soprattutto, molte debolezze nel modo in cui veniva usato…

  • Era molto facile trovare i presepi. La maggior parte dei messaggi iniziava con un bollettino meteorologico.
  • Presto, le chiavi dei messaggi apparivano due volte di seguito.

…e ottenendo cifrari dalle navi catturate.

Si può leggere come Enigma fu rotto dalla NSA, e da Wikipedia.

Moderni metodi crittografici

Ora che abbiamo la teoria dell’informazione di Shannon, computer molto potenti, e secoli di teoria e pratica alle spalle, le tecniche più moderne:

  • operano su stringhe di bit, non su stringhe di caratteri
  • sono attente a mascherare completamente i modelli e le ridondanze nel testo in chiaro
  • utilizzano chiavi casuali (che possono anche essere riutilizzate)
  • garantiscono che cambiamenti molto piccoli nel testo in chiaro influenzino una grande porzione del testo cifrato (e viceversa). Questo è chiamato effetto valanga.

Inoltre, è bello se il cifrario è:

  • efficiente
  • tollerante ai guasti

La maggior parte dei cifrari sono a blocchi o a flusso. I cifrari a blocchi richiedono un padding e possono funzionare in diversi modi (vedere il libro di Schnier o l’articolo di Wikipedia.)

  • ECB – Electronic Codebook
  • CBC – Cipher Block Chaining
  • CFB – Cipher Feedback
  • OFB – Output Feedback
  • CTR – Contatore
  • BC – Catena a blocchi
  • PCBC – Propagazione della catena a blocchi cifrati
  • CBCC – Catena a blocchi cifrati con Checksum

DES

A Wikipedia

IDEA

A Wikipedia

RC4

A Wikipedia

RC6

A Wikipedia

Blowfish

A Wikipedia

Twofish

A Wikipedia

AES

A Wikipedia

AES è il nuovo standard, che sostituisce DES. È stato il vincitore del concorso (nel 2001), dove è stato presentato con il nome Rijndael, battendoRC6, Serpent, MARS e Twofish.

Key Exchange

Diffie e Hellman (i vincitori del Turing Award 2015) e il loro amico Merkle dimostrarono nel 1976 che era possibile per due persone scambiarsi una chiave segreta senza doversi incontrare in segreto:

  • Alice sceglie un primo $n$ e lo invia in chiaro a Bob
  • Alice sceglie un primitivo mod $n$ (come trovarlo), chiamato $g$, e lo invia in chiaro a Bob
  • Alice sceglie un intero segreto $a$, e manda $g^a \bmod n$ in chiaro a Bob
  • Bob sceglie un intero segreto $b$, e manda $g^b \bmod n$ in chiaro ad Alice
  • Alice calcola ($g^b \bmod n)^a \bmod n$ e Bob calcola ($g^a \bmod n)^b \bmod n$. Questa è la chiave! (È $g^{ab} \bmod n$)

Questo è probabilmente sicuro, purché $n$ sia molto grande e $frac{n-1}{2}$ sia anche primo, perché sebbene Eve conosca $g$, $n$, $g^a \bmod n$ e $g^b \bmod n$, non c’è un modo efficiente per ottenere $a$ o $b$ da questi.Questo è il problema dei logaritmi discreti, ricordi?

Esempio con piccoli $n$:

  • Alice sceglie $n=208799$ e $g=13$ e li invia a Bob
  • Alice sceglie $a=152335$ e Bob sceglie $b=98113$
  • Alice invia a Bob $13^{152335} \bmod 208799 = 73033$
  • Bob manda ad Alice $13^{98133} \bmod 208799 = 147540$
  • Alice calcola $147540^{152335} \bmod 208799 = 8435$
  • Bob calcola $73033^{98133} \bmod 208799 = 8435$
  • La chiave segreta è $8435$.

Non fate questo con piccoli valori di $n$.

In generale, a meno che non otteniate qualche tipo di certificazione, non provate a mettere in sicurezza nessun sistema del mondo reale da soli. Ma naturalmente dogo avanti e impara gli algoritmi e fai pratica di codifica per ora.

Crittografia a chiave pubblica

I cifrari a chiave pubblica risolvono l’incubo della gestione delle chiavi dei cifrari a chiave segreta, al costo della velocità. In un gruppo di $n$ persone si ha bisogno solo di $n$ chiavi pubbliche e $n$ chiavi private.

Crittografia RSA

Diffie-Hellman non fa crittografia; scambia solo una chiave.RSA può criptare e decriptare. Ecco come. Ogni persona

  • Genera due grandi numeri primi, $p$ e $q$.
  • Sceglie un valore $e$ relativamente primo di $(p-1)(q-1)$.
  • Pubblica la sua chiave pubblica $(N,e)$ dove $N = pq$.
  • Computa $d$ = inverso modulare di $e$ relativo a $(p-1)(q-1)$, mantenendolo segreto.
  • Distrugge $p$ e $q$.

Ora guarda questo:

  • Per inviare un messaggio $m$ a Bob, Alice invia $c = m^e \bmod N$.
  • Bob lo decodifica facilmente perché $m = c^d \bmod N$.
Esercizio: Fai una ricerca sulla matematica dietro l’RSA. Perché funziona, in dettaglio? La tua risposta farà uso dei teoremi alla base della funzione totiente di Eulero; assicurati di mostrare come si riduce a $(p-1)(q-1)$ quando $pq$ è primo, tra le altre cose.
Esercizio: Diffie-Hellman (DH) è talvolta considerato parte della crittografia a chiave pubblica, anche se si occupa dello scambio di chiavi e non è esso stesso un algoritmo di crittografia. Perché, allora, alcune persone lo considerano a chiave pubblica? (La risposta a questo richiede qualche ricerca.)

Un esempio banale:

ATTENZIONE!
Questo esempio è solo a scopo illustrativo. Non implementate mai il vostro algoritmo di crittografia. Assicurati anche di capire quanto sia terribile la crittografia a chiave pubblica con chiavi così piccole. Le chiavi reali dovrebbero avere migliaia di bit.

Utilizziamo una chiave a 16 bit (NON FATELO IRL). Genera due primi a caso da 8 bit:

$p = 163\\q = 173$

Genera un primo a 16 bit per l’esponente di codifica:

$e = 64013$

Ora:

$n = pq = 28199 \mathsf{modInverse}(e, (p-1)(q-1)) = 6797$

Codifichiamo la stringa ¿Dónde está ud.?. Eccola in UTF-8:

c2 bf 44 c3 b3 6e 64 65 20 65 73 74 c3 a1 20 75 64 2e 3f

In decimale:

194 191 68 195 179 110 100 101 32 101 115 116 195 161 32 117 100 46 63

Ora applichiamo la funzione di codifica a ciascuno::

$194^{64013} \bmod 28199 = 15626$
$191^{64013} \bmod 28199 = 19945$
$68^{64013} \bmod 28199 = 27982$
$\vdots$
$63^{64013} \bmod 28199 = 18384$

Il testo cifrato è:

15626 19445 27982 22746 2679 7739 16824 23107 9054 23107 8378 16412 22746 5566 9054 881 16824 17864 18384

Per decodificare:

$15626^{6797} \bmod 28199 = 194$
$19445^{6797} \bmod 28199 = 191$
$27982^{6797} \bmod 28199 = 68$
$\vdots$
$16824^{6797} \bmod 28199 = 63$

Abbiamo indietro il messaggio originale!

A proposito
Siccome la crittografia simmetrica è molto più veloce, puoi prima generare una chiave segreta e trasmetterla su una linea protetta dalla crittografia a chiave pubblica. Ora tutte le comunicazioni future possono usare la chiave segreta.

Hashing crittografico

Un hash, noto anche come fingerprint, checksum, message digest è un modello di bit (di solito circa 160 bit), generato da un messaggio da una funzione di crittografia. Affinché l’hash sia sicuro, o crittografico, deve essere computazionalmente impossibile

  • trovare un messaggio che abbia un hash ad un dato valore (onewayness)
  • trovare due messaggi che abbiano lo stesso valore (collision-resistance)

Matematica, una funzione hash crittografica $H$ produce un hash da un messaggio, $H(m) = c$, tale che $m$ non può essere efficientemente determinato da $c$, e non si può trovare efficientemente $m_1 \neq m_2$ tale che $H(m_1) = H(m_2)$,

Di solito il cambiamento di un solo bit nel messaggio farà sì che il digest sia completamente e totalmente diverso.

$ cat willThis is my will.I leave 1000 dollars to Aliceand everything else to Bob.Signed, Eve.$ md5sum willc18feb890752c9e680c99d1e909fd761 will$ sed "s/1/9/g" will > Will$ cat WillThis is my will.I leave 9000 dollars to Aliceand everything else to Bob.Signed, Eve.$ md5sum Will85570bc2d0458b1f98f484261dee7d4d Will

Un hash sicuro fornisce un modo per determinare se un messaggio è stato manomesso.

Vedi Steve Friedl’s Illustrated Guide to Cryptpgraphic Hashes.

Message Authentication Codes

Sono simili agli hash crittografici eccetto che usano una chiave segreta, mentre gli hash usano solo il messaggio stesso.

$MAC(m, k) = c$

Per maggiori informazioni:

  • MACs vs. Hashes su StackOverflow
  • Firme digitali su Wikpedia
  • MAC su Wikipedia

Firme digitali

Come può Bob essere sicuro che il messaggio venga da Alice e non da qualcun altro? In pratica, di solito si firma un hash, non l’intero messaggio.

RSA per le firme digitali

Per Alice inviare un messaggio a Bob,

  • Alice cripta m con la sua chiave privata
  • Alice cripta con la chiave pubblica di Bob
  • Bob decripta con la sua chiave privata
  • Bob decripta con La chiave pubblica di Alice

$m = A(B'(B(A'(m)))$

DSA

A Wikipedia

Cryptanalysis

Questo è un grande argomento e non sarà trattato qui. Invece, ecco una lista di tecniche.

  • Analisi della frequenza
  • Attacco noto del testo in chiaro
  • Attacco noto del testo cifrato
  • Attacco scelto del testo in chiaro
  • Attacco scelto attacco a chiave
  • Crittanalisi lineare
  • Crittanalisi differenziale
  • Furto
  • Corruzione
  • Ricatto
Esercizio: Fate un po’ di auto-apprendimento sulla crittoanalisi o trovate un corso online divertente.

Esempi di programmazione

Heh, non mostreremo come roll-your-own crypto. Guarderemo alcune librerie esistenti.

Trasmetti dati su una rete IP?
Usa TLS.
Continua a leggere, però, se vuoi usare alcune divertenti librerie di crittografia.

Esempi JavaScript

Riferimento: Node crypto.

Esempi di Python

Riferimento:Librerie crittografiche Python -Python hashlib -Python secrets

Esempi di Java

Similar Posts

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.