Seminario per il corso di
Sistemi Operativi mod. B
Anno accademico
2004/2005
MERKLE-HELLMAN
KNAPSACK CRYPTOSYSTEM
Acampa
Paolo
566/669
Cilmo
Valerio
566/654
Merkle-Hellman
Knapsack Criptosystem
●
Introduzione
●
Crittografia simmetrica
●
Crittografia asimmetrica
●
Il problema dello zaino
●
Merkle-Helman knapsack
●
●
Creazione della chiave pubblica e privata
●
Criptare un messaggio
●
Decriptare un messaggio
●
Algoritmo sequenza super crescente
●
Esempio
Conclusioni
Merkle-Hellman Knapsack Criptosystem
2/23
Introduzione
La crittografia è l'arte che crea ed usa i sistemi di crittografia.
Un sistema di crittografia è un metodo per rendere illeggibili i
messaggi, in modo da renderli decodificabili solo dal destinatario
prestabilito.
I sistemi di crittografia sono chiamati anche sistemi di cifratura.
L'arte di scardinare i sistemi di cifratura è chiamata crittoanalisi.
La scienza che studia la crittografia e la crittoanalisi è chiamata
crittologia (dal greco kryptos , che significa 'nascosto' e logos, che
significa 'discorso, parola' ).
Merkle-Hellman Knapsack Criptosystem
3/23
Introduzione
Il messaggio originale è chiamato testo in chiaro, ed il messaggio
codificato è chiamato testo cifrato.
Quando si codifica un messaggio, si utilizza una procedura che lo
converte in testo cifrato. Questa procedura è chiamata cifratura.
Viceversa, quando si vuole rendere leggibile un messaggio, si usa
il procedimento opposto, chiamato decifratura.
Merkle-Hellman Knapsack Criptosystem
4/23
Crittografia simmetrica
La crittografia tradizionale è basata su una chiave segreta. Un
mittente che vuole inviare un messaggio cifrato a qualcuno, lo
cifra usando una chiave segreta ed il destinatario lo decifra
usando la stessa chiave segreta. Ovviamente, sia il mittente che il
ricevente di quel messaggio devono conoscere la stessa chiave
segreta.
Questo metodo è conosciuto come crittografia a chiave segreta o
crittografia simmetrica.
Il problema principale è che il mittente ed il ricevente devono
accordarsi su una chiave segreta comune, e devono usare un
canale sicuro per scambiarsi questa informazione.
Merkle-Hellman Knapsack Criptosystem
5/23
Crittografia simmetrica
Merkle-Hellman Knapsack Criptosystem
6/23
Crittografia
asimmetrica
Per queste ragioni venne inventato un altro sistema di
crittografia: il sistema a chiave pubblica (chiamato anche sistema
crittografico asimmetrico).
Con algoritmi di questo tipo ognuno ha due chiavi: una pubblica
da distribuire a tutti quelli con cui si vuole comunicare, e una
privata da tenere segreta.
Ciò che viene cifrato con la chiave pubblica (operazione che può
essere fatta da chiunque) può essere decifrato solo con la chiave
privata corrispondente (operazione che può essere fatta solo dal
proprietario della chiave): in questo modo non c'è più il problema
di comunicare segretamente la chiave.
Merkle-Hellman Knapsack Criptosystem
7/23
Crittografia
asimmetrica
Merkle-Hellman Knapsack Criptosystem
8/23
Crittografia
asimmetrica
Il concetto di crittografia a chiave pubblica fu introdotto da Martin
Hellman, da Ralph Merkle e da Whitfield Diffie all'università di
Stanford nel 1976.
Ma il primo sistema crittografico a chiave pubblica, il knapsack, fu
sviluppato nel 1978 da Merkle e da Hellman.
Merkle-Hellman Knapsack Criptosystem
9/23
Il problema dello zaino
Il problema dello zaino (knapsack) dice: dato il peso totale di uno
zaino pieno e quello dei singoli oggetti che vi possono essere
contenuti, determinare qual è il contenuto in modo che il peso
complessivo risulti uguale a quello dato.
In termini matematici, il problema è determinare se alcuni
membri di un particolare gruppo di interi danno per somma un
altro intero. Se il gruppo è costituito da 1, 2, 4, 8, 16 e 32, e la
somma data è 37, la risposta è vera perché 1+4+32=37.
Merkle-Hellman Knapsack Criptosystem
10/23
Il problema dello zaino
Fa parte dei problemi NP-completi, ed in qualità di tale, ammette
un algoritmo rapido per la verifica delle soluzioni, ma non si sa se
è consentito un procedimento rapido per la ricerca delle soluzioni.
Merkle-Hellman Knapsack Criptosystem
11/23
Il problema dello zaino
L'idea di Merkle e Hellman è che qualcuno possieda un grande
numero di oggetti, ciascuno con un differente peso. Il proprietario
codifica il messaggio scegliendo segretamente un sotto-insieme
degli oggetti e mettendoli nello zaino. Il peso totale degli oggetti
nello zaino è reso pubblico, come la lista di tutti i possibili oggetti.
La lista degli oggetti nello zaino è mantenuta segreta.
Con determinate restrizioni aggiuntive si pensava che il problema
di immaginare una possibile lista di oggetti con il dato peso fosse
computazionalmente impossibile, e costituì la base dell’algoritmo
a chiave pubblica.
Merkle-Hellman Knapsack Criptosystem
12/23
Merkle-Hellman
Knapsack
Dato uno zaino con un peso prefissato P, e k oggetti di peso p1,
p2, …, pk rispettivamente; il problema è se è possibile scegliere
alcuni dei k oggetti in modo che essi riempiano esattamente lo
zaino, cioè la somma dei loro volumi eguagli P. In realtà non si
conosce nessun algoritmo polinomiale di soluzione del problema.
In compenso, esistono metodi rapidissimi di verifica: infatti, se
conosciamo la soluzione, è semplice controllarla, basta riempire lo
zaino con gli oggetti scelti e realizzare, appunto, che essi lo
occupano senza lasciare spazi vuoti e senza farlo scoppiare.
Merkle-Hellman Knapsack Criptosystem
13/23
Creazione della chiave
pubblica e privata
La semplicità della verifica della soluzione è data dal concetto di
sequenza supercrescente. Questa è formata da p1, p2, …, pk interi
tali che, per ogni i < k,
pi > p j .
j i
Tale sequenza rappresenta la chiave privata. Questa viene
nascosta tramite il seguente procedimento rendendola pubblica:
- Si sceglie un intero W tale che 1 < W < P - 1 e che P e W siano
primi tra loro;
- Si sceglie una permutazione casuale π degli interi
1, 2, …, k
Merkle-Hellman Knapsack Criptosystem
14/23
Creazione della chiave
pubblica e privata
- Sulla base di π, calcolare ai = Wpπ(i) mod P
per ogni i=1,2,…,k
A questo punto, un utente, A, possiede le due chiavi:
- la pubblica per A, formata da (a1, a2, …, ak);
- la privata per A, formata da (π,P,W,(p0, p1, …, pk));
Merkle-Hellman Knapsack Criptosystem
15/23
Criptare un messaggio
L’ utente B, qualora decidesse di criptare un messaggio da
mandare ad A, procede come segue:
- Ottiene la chiave pubblica da A;
- scrive il messaggio tramite sequenze (e1, e2, …, ek)
di lunghezza k di numeri binari;
- calcola il valore X =
;
ei ai
- spedisce X all’utente A.

i k
Merkle-Hellman Knapsack Criptosystem
16/23
Decriptare un
messaggio
L’ utente A, ricevuto il messaggio criptato X da B, esegue le
seguenti operazioni per decriptarlo:
- calcolare il valore di D = W-1 X mod P
- utilizzando l'algoritmo per risolvere la sequenza super crescente,
trovare la sequenza binaria r1, ... rk tale che
D = r1*p1 + ... + rk*pk
- i bit del messaggio in chiaro sono dati da ei=r(πi) con i = 0...k.
Merkle-Hellman Knapsack Criptosystem
17/23
Algoritmo sequenza
super crescente
Dato in input una sequenza super crescente p=(p1...pk) e un
intero P dato dalla somma di una sottosequenza di p.
Restituisce in output una sequenza binaria r = (ri...rk) tale che
pr P
i i
i=k
while i>=1 do
if P>=pi then ri=1 and P=P-pi
else ri=0
return r=(r1...rk)
Merkle-Hellman Knapsack Criptosystem
18/23
Esempio
L'utente A crea la chiave privata e quella pubblica:
sceglie una sequenza supercrescente:
p= 1,2,4,10,20,40.
e come permutazione quella identica:
(π)=1,2,3,4,5,6
La chiave privata è (P=110;W=31;p=(1,2,4,10,20,40); π)
La chiave pubblica è a=(31,62,14,90,70,30)
Merkle-Hellman Knapsack Criptosystem
19/23
Esempio
L'utente B vuole spedire il messaggio “ciao” ad A. Prende la
chiave pubblica da A: a=(31,62,14,90,70,30)
“ciao” viene scritto secondo una codifica in bit dei caratteri:
c=000011; i=001001; a= 000001; o= 001111.
cripta il messaggio ottenendo per ogni carattere:
c=70+30=100; i=14+30=44; a=30; o=14+90+70+30=204.
Il messaggio criptato inviato ad A è (100,44,30,204)
Merkle-Hellman Knapsack Criptosystem
20/23
Esempio
L'utente A, ricevuto il messaggio (100,44,30,204) lo decripta:
calcola D= 100*71 mod 110=60
applicando l'algortimo della sequenza supercrescente con valori
p=(1,2,4,10,20,40) e P=60 otteniamo
r=(0,0,0,0,1,1). Dato che abbiamo utilizzato la permutazione
identica corrisponde appunto al carattere “c”. Lo stesso
procedimento va applicato per le altre lettere.
Merkle-Hellman Knapsack Criptosystem
21/23
Conclusioni
L'algoritmo knapsack di Merkle-Hellman non è considerato sicuro
e viene usato raramente.
Questo come i successivi schemi basati sul problema dello zaino
sono stati tutti forzati, ad eccezione dello schema di Chor-Rivest.
Merkle-Hellman Knapsack Criptosystem
22/23
FINE
Merkle-Hellman Knapsack Criptosystem
23/23