Visualizzazione post con etichetta Crittografia. Mostra tutti i post
Visualizzazione post con etichetta Crittografia. Mostra tutti i post

domenica 22 gennaio 2017

Dentro l'algoritmo DES

Premetto che non sarà semplice seguire il funzionamento di questo algoritmo, ma tenterò di rendere la spiegazione più semplice possibile.
I principi su cui si basa l'algoritmo sono sostituzione, permutazione  e combinazione tra  i blocchi di testo e la chiave.
La chiave è composta da 64 bit, ma soltanto 56 di questi sono utilizzati per criptare il messaggio.

Il messaggio viene criptato in blocchi da 64 bit.
Il primo passaggio è una permutazione (indicata con IP ossia initial permutation) dei bit del blocco di testo da 64 bit secondo la seguente matrice:

                         IP 
58, 50, 42, 34, 26, 18, 10,  2,
 60, 52, 44, 36, 28, 20, 12, 4,
62, 54, 46, 38, 30, 22, 14,  6,
 64, 56, 48, 40, 32, 24, 16, 8,
57, 49, 41, 33, 25, 17,  9,  1, 
59, 51, 43, 35, 27, 19, 11, 3,
61, 53, 45, 37, 29, 21, 13,  5, 
63, 55, 47, 39, 31, 23, 15, 7

Nella matrice viene indicata la precedente posizione del bit e l'attuale posizione dopo la permutazione (il 58° bit del messaggio originale si trova in 1° posizione, il 50° in 2°, ecc..).

Il passaggio successivo divide il blocco ottenuto dalla permutazione in due blocchi da 32 bit, uno destro che chiameremo R0 (dall'inglese Right) e uno sinistro che chiameremo L0(dall'inglese Left).
I passaggi successivi verranno ripetuti in sequenza per 16 volte.
By Francisco Menendez (Own work)
[CC BY-SA 3.0], via Wikimedia Commons
Prendiamo il blocco Rn (con 0≤n≤16) e lo diamo in pasto a una funzione E che lo espande da 32 a 48 bit secondo la seguente matrice:

                    E
32,   1,    2,   3,     4,   5,
  4,   5,     6,   7,    8,   9,
  8,   9,  10, 11, 12, 13,
12, 13, 14, 15, 16, 17,
16, 17, 18, 19, 20, 21,
20, 21, 22, 23, 24, 25,
24, 25, 26, 27, 28, 29,
28, 29, 30, 31, 32,  1 

Otteniamo quindi E(Rn) composto da 48 bit. E(Rn) viene quindi combinato attraverso un'operazione di XOR (per chi non sappia cos'è lo rimando a Wikipedia) con una sotto-chiave Kn.

Otteniamo K, composta da 56 bit, dalla chiave iniziale  facendo una permutazione PC-1 .
La sotto-chiave (Kn) è ottenuta da K applicando tre passaggi alle due metà di K (C(n) e D(n)):

  1. Spostamento rotatorio verso sinistra dei bit delle due sotto chiavi
  2. unione delle due sotto chiavi in una sola da 56 bit 
  3. permutazione PC-2 dalla quale si ottiene Kn
Dopo l'XOR tra Kn e E(Rn) otteniamo una stringa di bit che viene divisa in 8 blocchi da 6 bit ciascuno(B1, B2,...,B8). Ognuno di questi blocchi viene ridotto da 6 a 4 bit attraverso l'utilizzo di 8 diverse Substitution-Box (link a Wikipedia per la spiegazione su come funzionano).
I blocchi da 4 bit vengono concatenati per ottenere di nuovo un blocco da 32 bit.

Il blocco di 32 bit così ottenuto viene a sua volta permutato secondo una matrice P ottenendo Q:
             P
16,   7, 20,   21,
29, 12, 28,  17, 
  1, 15,  23, 26, 
  5, 18,  31, 10, 
  2,   8,  24,  14, 
32, 27,   3,     9, 
19, 13, 30,    6, 
22, 11,   4,   25

A questo punto viene fatto l'XOR tra Ln e Q, ottenendo così Rn+1. Ln+1 sarà invece uguale a Rn.
Applichiamo i passaggi fino ad ottenere R16 e L16.
Concateniamo L16 e R16 e la stringa di bit così ottenuta la permutiamo secondo una matrice inversa a IP in cui quindi il 40° bit torna a essere il 1°, il 1° torna a essere il 58° ecc.
Così il nostro blocco iniziale è stato criptato in un blocco di 64 bit.

Spero di essere stato abbastanza chiaro sul funzionamento di questo algoritmo, e vi rimando alla lettura del documento fips46-3 (PDF in inglese) per le matrici PC-1 (pag.19) PC-2 (pag.21) e le S-Box (pag.17). 
Se siete interessati ad un'implementazione in c vi rimando alla lettura dei sorgenti della glibc(in particolare dei files crypt* presenti nella cartella crypt dei sorgenti).

sabato 21 gennaio 2017

La crittografia e il mondo informatico

(Fonte)

Già nell'antichità ci sono esempi di crittografia, utilizzata principalmente per scopi bellici, forse il più famoso è il cifrario di Cesare, in cui ogni lettera del messaggio era sostituita dalla lettera un certo numero di posizioni dopo nell'alfabeto.
Con l'avvento della tecnologia moderna la crittografia si è sviluppata maggiormente, grazie a macchine elettro-meccaniche in grado di eseguire complessi procedimenti di cifratura, come ad esempio la macchina tedesca chiamata Enigma.
Ulteriori sviluppi ci furono con l'avvento dei computer la cui potenza di calcolo porto allo sviluppo di algoritmi sempre più complessi e di difficile calcolo.
Nei primi anni settanta si pose il problema di rendere segrete le comunicazioni elettroniche di banche e altre organizazini finanziarie, così nel 1975 venne pubblicata la prima bozza del Data Encription Standard (DES) e venne scelto l'algoritmo proposto da alcuni ricercatori IBM. Nel 1976 , dopo alcune modifiche, fu adottato come standard e l'anno successivo venne pubblicato. Questo algoritmo segue il principio di Kerckhoffs secondo cui la sicurezza di un algoritmo non deve dipendere dalla segretezza dello stesso, ma dalla segretezza della chiave di crittazione.
Qui nasce un altro problema: come fanno le due parti a trasmettere la chiave segreta senza che questa venga intercettata e utilizzata per decifrare i messaggi segreti?
Sempre nel 1976 venne pubblicato, da Martin Hellman e Whitfield Diffie , un documento intitolato "New Directions in Cryptography" in cui era illustrato un metodo di crittografia asimmetrica  (basata su un'idea del crittografo Ralph Merkle) per potersi scambiare la chiave, noto da allora come scambio di chiavi Diffie-Hellman.
Martin Hellman e Whitfield Diffie  (Credits)

Negli anni successivi furono inventati crittosistemi sempre più complessi. Ad esempio uno dei più diffusi (se non il più diffuso)  per lo scambio di e-mail è quello descritto nello standard OpenPGP, comparso negli anni '90.
Nel 1997 venne attaccata con un attacco "brute force"( ossia provando una ad una tutte le combinazioni possibili per la chiave, un po' come provare tutte le combinazioni per aprire una cassaforte) la cifratura DES e in 56 ore ne venne dimostrata l'insicurezza della chiave a 56 bit che quindi venne "sostituito" dal Triple-DES (TDES: DES-EEE o DES-EDE), il quale consiste in tre passaggi consecutivi di crittazione utilizzando tre chiavi, solo 4 anni più tardi fu introdotto l'AES (Advanced Encription Standard, con una chiave di 128 o 256 bit).
Ad oggi gli algoritmi di crittazione possono essere utilizzati in diversi campi, come ad esempio la comunicazione via internet tra il browser e i siti(https), l'invio di mail e purtroppo anche in virus informatici (cryptolocker).