Criptosisteme cu cheie publică III Anul II Aprilie 2017
Problema rucsacului ( knapsack problem ) Considerăm un număr natural V > 0 şi o mulţime finită de numere naturale pozitive {v 0, v 1,..., v k 1 }. Problemă: Determinaţi o submulţime I {0, 1, 2,..., k 1} astfel incât V = v i. i I Reformulare: Determinaţi un număr ε = (ε k 1 ε k 2... ε 0 ) 2 scris in baza 2 (ε i {0, 1}) astfel incât k 1 V = ε i v i. i=0 Problema rucsacului este foarte dificilă! Nu există nici un algoritm care să o rezolve in timp polinomial.
Problema rucsacului - cazul supercrescător Problema rucsacului este mult mai simplă in cazul in care şirul {v 0, v 1,..., v k 1 } este supercrescător i 1 v i > v j, i = 1, 2,..., k 1. j=0
Algoritm (cazul supercrescător) 1 w := V, j := k 1, ε k 1 =... = ε 0 = 0 2 Dacă v j > w scrie j := j 1 Dacă j 0 mergi la 2 Dacă j < 0 scrie Problema nu are soluţie; exit. Dacă v j w scrie ε j := 1, w := w v j, j := j 1 Dacă w = 0 scrie ε k 1 ε k 2... ε 0; exit. Dacă w > 0 - Dacă j 0 mergi la 2 - Dacă j < 0 scrie Problema nu are soluţie; exit.
Criptosistemul Merkle-Hellman (1978) Unitatea de mesaj: bloc de k biţi = intreg m scris in baza 2, cu k biţi Exemplu: o literă din alfabetul latin = număr in baza 2 intre 0 şi 11001 = 25, k = 5. Alegerea cheilor: Fiecare utilizator A alege un şir de numere naturale {v0 A, v 1 A,..., v k 1 A }, supercrescător. A alege un intreg m A > k 1 i=0 v i A. A alege un intreg a A, 0 < a A < m A, (a A, m A ) = 1. A calculează b A := a 1 A (mod m A) w A i = a A v A i (mod m A ) A face publică cheia K e = {w0 A, w 1 A,..., w k 1 A } A ţine secretă cheia K d = {b A, m A }. Informaţiile vi A, a A sunt secrete şi pot fi şterse.
Criptosistemul Merkle-Hellman (1978) Algoritm de criptare: B vrea să trimită mesajul m = (ε k 1 ε k 2... ε 0 ) 2 lui A. B calculează B transmite c. k 1 c := f (m) = ε i wi A i=0
Criptosistemul Merkle-Hellman (1978) Algoritm de decriptare: A primeşte c şi calculează Avem k 1 V = ε i b A wi A i=0 Observăm că V < m A, k 1 mai sus este chiar egalitate. V := b A c (mod m A ) k 1 i=0 i=0 v i A ε i v A i (mod m A ) < m A, deci congruenţa de A aplică algoritmul anterior pentru a determina ε k 1, ε k 2,..., ε 0 şi recuperează mesajul m.
Problema codului perfect într-un graf Definiţie Se numeşte graf o pereche G = (V, L) unde V este o mulţime finită de vârfuri (puncte din spaţiu) şi L este o mulţime de laturi ce unesc unele dintre vârfuri. Notăm uv o latură ce uneşte vârfurile u şi v.
Problema codului perfect într-un graf Definiţie Se numeşte vecinătate a vârfului v V mulţimea V (v) = {u V uv L} {v}. Definiţie O submulţime C V se numeşte cod perfect al grafului G dacă oricare ar fi vârful u V, există un unic v C astfel încât u V (v).
Problema codului perfect într-un graf
Problema codului perfect într-un graf Nu orice graf admite un cod perfect. Dacă un graf admite un cod perfect, acesta nu este unic. Chiar dacă ştim a priori că un graf G admite un cod perfect, determinarea acestuia este o problemă foarte dificilă: nu există în prezent nici un algoritm eficient care să rezolve această problemă în toate cazurile. Pe de altă parte, dată fiind o mulţime de vârfuri V şi o submulţime a acesteia C V, se poate construi uşor un graf G care să aibă pe V ca mulţime de vârfuri şi pentru care C să fie un cod perfect. construcţia unui astfel de graf poate fi privită ca o funcţie cu sens unic!
Problema codului perfect într-un graf
Problema codului perfect într-un graf 1. Se aleg vârfurile care vor constitui codul perfect C.
Problema codului perfect într-un graf 2. Se construiesc laturi care unesc fiecare din celelalte vârfuri cu exact unul din vârfurile din C.
Problema codului perfect într-un graf 3. Se construiesc alte laturi care unesc vârfuri din V \ C. Dacă V este amplă şi numărul laturilor construite la acest pas este suficient de mare, cele de la pasul 2 se vor pierde printre acestea şi stelele obţinute la pasul 2 vor fi foarte greu de detectat.
Un criptosistem bazat pe problema codului perfect Toţi utilizatorii (Alice, Bob, Claire) au la dispoziţie o configuraţie de n puncte în spaţiu, V. 2 8 5 1 3 7 11 6 10 4 9
Un criptosistem bazat pe problema codului perfect Alegerea cheilor 2 8 5 1 3 7 11 6 10 4 9 Alice construieşte un graf urmând paşii 1, 2, 3 de mai sus: alege o submulţime C V,
Un criptosistem bazat pe problema codului perfect Alegerea cheilor..., construieşte laturi care unesc fiecare din celelalte vârfuri cu exact unul din vârfurile din C,
Un criptosistem bazat pe problema codului perfect Alegerea cheilor..., construieşte suficient de multe laturi care unesc vârfuri din V \ C, pentru ca C să fie foarte greu de detectat în graful G obţinut.
Cheia publică: graful G. Cheia secretă: lista nodurilor din C. Merkle-Hellman Un criptosistem bazat pe problema codului perfect Alegerea cheilor
Un criptosistem bazat pe problema codului perfect Criptarea mesajului Bob doreşte să trimită mesajul M lui Alice. Să presupunem că M poate fi reprezentat ca un număr natural (între 1 şi 100: M = 23). In configuraţia iniţială de puncte, Bob asociază fiecărui punct v i un număr întreg a i astfel încât a 1 +... + a n = M(= 23). 9 7 20 5 2 4 2 8 3 11 10
Un criptosistem bazat pe problema codului perfect Criptarea mesajului Bob obţine cheia publică a lui Alice, graful G. 9 7 20 5 2 4 2 8 3 11 10
Un criptosistem bazat pe problema codului perfect Criptarea mesajului Bob asociază fiecărui vârf v i un număr întreg b i astfel încât b i = a j. 3 2 v j V (v i ) 28 18 9 7 8 20 5 16 21 8 24 2 0 5 3 11 14 10 4 6
Un criptosistem bazat pe problema codului perfect Criptarea mesajului Mesajul criptat: Graful G cu valorile b i ataşate vârfurilor. 3 28 18 8 24 16 21 0 5 14 6
Un criptosistem bazat pe problema codului perfect Decriptarea mesajului Alice primeşte mesajul criptat şi folosind cheia secretă (lista vârfurilor din C calculează b i = M. 3 v i C 28 18 16 8 21 24 0 5 14 6
Un criptosistem bazat pe problema codului perfect Atac: Dacă adversarul Claire poate determina codul perfect C (sau orice alt cod perfect al lui G!) având la dispoziţie cheia publică G şi mesajul criptat (valorile b i ), atunci poate recupera mesajul în clar M. In prezent nu există nici un algoritm eficient care să determine un cod perfect al unui graf oarecare. Problemă: Claire poate recupera M fără a determina vreun cod perfect al lui G! Este suficient să rezolve sistemul de ecuaţii de gradul 1, cu necunoscutele a i : a j = b i, i = 1, 2,..., n. v j V (v i )