Wykład VII Kierunek Informatyka - semestr V Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik
Problem pakowania plecaka System kryptograficzny Merklego-Hellmana
Pakowanie plecaka Niech V będzie pojemnością plecaka. Mamy k przedmiotów o objętościach {v 1, v 2,..., v k }. Przypuśćmy, że potrafimy zapakować plecak bez wolnego miejsca jakimś różnymi elementami należącymi do pewnego podzbioru powyższego zbioru, tzn. istnieje I {1, 2,..., k} taki, że V = i I v i.
Problem pakowania plecaka Dany jest k-elementowy zbiór liczb naturalnych {v 0, v 1,..., v k 1 } oraz liczba naturalna V. Znaleźć liczbę k-bitową (b k 1 b k 2... b 1 b 0 ), b i {0, 1} taką, że k 1 V = b i v i, i=0 lub udowodnić, że taka k-bitowa liczba nie istnieje.
Problem pakowania plecaka Problem pakowania plecaka może mieć: tylko jedno rozwiązanie skończoną ilość rozwiązań, większą niż jeden, nie mieć rozwiązania.
Algorytm trywialny 1 Generujemy wszystkie k-bitowe liczby, np. jako binarne reprezentacje liczb ze zbioru {0, 1,..., 2 k 1}. 2 Dla każdej liczby (b k 1 b k 2... b 1 b 0 ) sprawdzamy, czy spełnia równość k 1 V = b i v i, 3 Jeżeli ta równość jest prawdziwa dla pewnej liczby k-bitowej, to mamy jedno rozwiązanie. i=0 4 Jeżeli dla wszystkich liczb k-bitowych równość nie jest prawdziwa, to rozwiązanie nie istnieje.
Algorytm trywialny 1 Generujemy wszystkie k-bitowe liczby, np. jako binarne reprezentacje liczb ze zbioru {0, 1,..., 2 k 1}. 2 Dla każdej liczby (b k 1 b k 2... b 1 b 0 ) sprawdzamy, czy spełnia równość k 1 V = b i v i, 3 Jeżeli ta równość jest prawdziwa dla pewnej liczby k-bitowej, to mamy jedno rozwiązanie. i=0 4 Jeżeli dla wszystkich liczb k-bitowych równość nie jest prawdziwa, to rozwiązanie nie istnieje. Wniosek: Dla k-bitowej liczby pesymistycznie trzeba wykonać 2 k sprawdzeń. Zatem problem ten jest trudny z punktu widzenia obliczeń praktycznych dla dużych k.
Ciąg superrosnący Definicja Ciąg liczb a 0, a 1,..., a k 1 takich, że a 0 a 1... a k 1 nazywamy ciągiem superrosnącym jeżeli a 1 a 0 a 2 a 1 + a 0 a 3 a 2 + a 1 + a 0. a k 1 a k 2 +... + a 0
Przykład Ciąg liczb jest ciągiem superrosnącym. 2, 3, 7, 15, 31
Łatwy problem pakowania plecaka Problem pakowania plecaka dla ciągu liczb naturalnych v 0, v 1,..., v k 1 oraz liczby naturalnej V nazywamy łatwym problemem pakowania plecaka jeżeli ciąg v 0, v 1,..., v k 1 jest ciągiem superrosnącym.
Algorytm rozwiązywania łatwego problemu pakowania plecaka Dany jest ciąg superrosnący v 0, v 1,..., v k 1 oraz liczba naturalna V. Niech I =. 1 Przeglądamy liczby v 0, v 1,..., v k 1 począwszy od największej tak długo, aż natrafimy na liczbę nie większą od V. Niech to będzie liczba v k1. 2 Dołączamy k 1 do zbioru I. Zastępujemy V przez V 1 = V v k1 i przechodzimy do punktu 1) 3 Jeżeli dla pewnego s mamy V s = V s 1 V ks = 0 to otrzymaliśmy rozwiązanie V = v k1 + v k2 +... + v ks = i I v i. Jeżeli takie rozwiązanie nie istnieje, to dojdziemy do k s = 0 i V s v ks > 0.
Przykład 1. Niech V = 24 oraz dany jest ciąg 2, 3, 7, 15, 31
Przykład 1. Niech V = 24 oraz dany jest ciąg 2, 3, 7, 15, 31 b 4 b 3 b 2 b 1 b 0
Przykład 1. Niech V = 24 oraz dany jest ciąg 2, 3, 7, 15, 31 b 4 b 3 b 2 b 1 b 0 31 31 > 24 b 0 = 0 15 24 15 = 9 b 1 = 1 7 9 7 = 2 b 2 = 1 3 3 > 2 b 3 = 0 2 2 2 = 0 b 4 = 1
Przykład 1. Niech V = 24 oraz dany jest ciąg 2, 3, 7, 15, 31 b 4 b 3 b 2 b 1 b 0 31 31 > 24 b 0 = 0 15 24 15 = 9 b 1 = 1 7 9 7 = 2 b 2 = 1 3 3 > 2 b 3 = 0 2 2 2 = 0 b 4 = 1 Rozwiązanie: V = 15 + 7 + 2.
Przykład 2. Niech V = 37 oraz dany jest ciąg 2, 3, 7, 15, 31 b 4 b 3 b 2 b 1 b 0 31 37 31 = 6 b 0 = 1 15 15 > 6 b 1 = 0 7 7 > 6 b 2 = 0 3 6 3 = 3 b 3 = 1 2 3 2 = 1 b 4 = 1 Brak rozwiązania, gdyż ostatnia różnica nie dała zera.
System kryptograficzny Merklego-Hellmana Ten system kryptograficzny został zaproponowany przez Ralpha Merkle oraz Martina Hellmana w 1978 roku. Był to jeden z najwcześniejszych systemów z kluczem publicznym. Jego główny zaletą jest zdecydowanie mniejszy koszt obliczeniowy szyfrowania i deszyfrowania niż w RSA
System kryptograficzny Merklego-Hellmana Odpowiedniki liczbowe jednostek tekstu jawnego zapisujemy jako k-bitowe liczby dla pewnego ustalonego k. Przykład. Jednostki: traktujemy jako: A,B,C,..., X,Y,Z A (00000) 2 B (00001) 2. Z (11001) 2
System kryptograficzny Merklego-Hellmana Generowanie kluczy: Osoba A wybiera: 1 ciąg superrosnący składający się z k liczb 2 liczbę m większą niż k 1 v 0, v 1,..., v k 1 v i i=0 3 liczbę a taką, że 0 < a < m i NWD(a, m) = 1.
System kryptograficzny Merklego-Hellmana Osoba A oblicza liczbę d a 1 (mod m). Konstruuje ciąg w 0, w 1,..., w k 1 gdzie w i a v i (mod m). Ten ciąg nie jest superrosnący. Klucz publiczny: {w 0, w 1,..., w k 1 } Klucz prywatny: (d, m)
System kryptograficzny Merklego-Hellmana Szyfrowanie: Osoba B chce wysłać do osoby A tekst jawny P = (b k 1 b k 2... b 0 ). Używając klucza publicznego oblicza: Wysyła C do osoby A. k 1 C = b i w i. i=0
System kryptograficzny Merklego-Hellmana Deszyfrowanie: Osoba A otrzymała liczbę C. Oblicza V = d C (mod m). Rozwiązuje łatwy problem pakowania plecaka dla liczby V i ciągu superrosnącego v 0, v 1,..., v k 1. Otrzyma w ten sposób: P = (b k 1 b k 2... b 0 ).
Dowód poprawności k 1 V = d C = d b i w i = i=0
Dowód poprawności k 1 k 1 V = d C = d b i w i = i=0 = b i w i d = b i (v i a) d = i=0 k 1 i=0
Dowód poprawności k 1 k 1 V = d C = d b i w i = i=0 = b i w i d = b i (v i a) d = i=0 k 1 k 1 i=0 = b i v i i=0
Przykład wyboru ciągu superrosnącego Wybieramy dowolny ciąg liczb naturalnych Obliczamy z 0, z 1,..., z k 1. v 0 = z 0 v 1 = z 1 + v 0 v 2 = z 2 + v 0 + v 1. v k 1 = z k 1 + v 0 +... + v k 2 Ciąg v 0, v 1,..., v k 1 jest ciągiem superrosnącym.
Przykład wyboru ciągu superrosnącego c.d. Ponadto, jeżeli założymy, że to k 1 m = z k + k 1 v i i=0 m > v i. Dalej wybieramy losowe 1 < a 0 < m i szukamy najmniejszego a takiego, że a 0 a oraz NWD(a, m) = 1 i=0
Bezpieczeństwo Problem pakowania plecaka jest trudnym problemem. Pod koniec lat siedemdziesiątych ubiegłego stulecia, wydawało się, że system kryptograficzny Merklego-Hellmana w swojej oryginalnej postaci bazujący na tym problemie będzie bezpieczny.
Bezpieczeństwo Problem pakowania plecaka jest trudnym problemem. Pod koniec lat siedemdziesiątych ubiegłego stulecia, wydawało się, że system kryptograficzny Merklego-Hellmana w swojej oryginalnej postaci bazujący na tym problemie będzie bezpieczny. W rozumowaniu tym tkwił błąd. Problem, który musi być rozwiązany podczas łamania k 1 C = b i w i i=0 nie jest łatwym problemem pakowania plecaka, ale jednak jest bardzo szczególnym problemem. Powstaje on z łatwego problemu pakowania plecaka poprzez prostą transformację: pomnożenie przez a modulo m.
Bezpieczeństwo System kryptograficzny Merklego-Hellmana w swojej oryginalnej postaci został złamany w 1982 roku. Shamir Adi, A polynomial-time algorithm for breaking the basic Merkle - Hellman cryptosystem, Information Theory, IEEE Transactions on 30 (5), 1984, p. 699 704.
Iterowany problem pakowania plecaka System kryptograficzny oparty na iterowanym problemie pakowania plecaka jest próbą obejścia algorytmu Shamira. W systemie tym używa się dwóch przekształceń postaci x a i x (mod m i ) określonych za pomocą par (a 1, m 1 ) i (a 2, m 2 ). Najpierw ciąg superrosnący {v i } zastępujemy ciągiem {w i }, gdzie w i = a 1 v i (mod m 1 ). Następnie ciąg {v i } zastępujemy ciągiem {u i }, gdzie u i = a 2 w i (mod m 2 ).
Iterowany problem pakowania plecaka Liczby m 1, m 2, a 1, a 2 są dobrane losowo tak, aby m 1 > v i, m 2 > km 1, NWD(a 1, m 1 ) = NWD(a 2, m 2 ) = 1. Klucz publiczny: {u 0, u 1,..., u k 1 } Klucz prywatny: (d 1, m 1, d 2, m 2 ), gdzie d 1 = a 1 1 (mod m 1 ) d 2 = a 1 2 (mod m 2 )
Iterowany problem pakowania plecaka Szyfrowanie: Osoba B chce wysłać do osoby A tekst jawny P = (b k 1 b k 2... b 0 ). Używając klucza publicznego oblicza: Wysyła C do osoby A. k 1 C = b i u i. i=0
Iterowany problem pakowania plecaka Deszyfrowanie: Osoba A otrzymała liczbę C. Oblicza V = d 1 ( d 2 C (mod m 2 ) ) (mod m 1 ). Rozwiązuje łatwy problem pakowania plecaka dla liczby V i ciągu superrosnącego v 0, v 1,..., v k 1. Otrzyma w ten sposób: P = (b k 1 b k 2... b 0 ).
Bezpieczeństwo Uogólniony algorytm Shamira opublikowany w: Brickell Ernest, Breaking iterated knapsacks, Advences in Cryptology - Crypto 84, Springer-Verlag, 1985, p. 342-358. pokazuje, że wiele przypadków iterowanego problemu pakowania plecaka można złamać.
Kolejne prace Kolejny system typu plecakowego, wykorzystujący wielomiany nad ciałem skończonym. Chor R., Rivest R., A knapsack-type public key cryptosystem based on arithmetic in finite fields, IEEE Transactions on Information Theory IT-34, 1988, p. 901-909. Jednakże po dokonaniach Shamira, eksperci nie darzą zaufaniem żadnego systemu typu plecakowego z kluczem publicznym.
Pytania i zadania 1. Wykaż, że ciągiem superrosnącym o najmniejszych wyrazach jest ciąg v i = 2 i. 2. Wykaż, że łatwy problem pakowania plecaka korzystający z ciągu superrosnącego v i = 2 i ma zawsze rozwiązanie dla dowolnego V (przy odpowiedniej ilości wyrazów ciągu v i ). 3. Wykaż, że każdy ciąg liczb naturalnych {v i }, spełniających warunek v i+1 2v i dla wszystkich i, jest superrosnący.
Pytania i zadania 4. Przypuśćmy, że jednostkami tekstu otwartego są pojedyncze litery zwykłego 26-literowego alfabetu A-Z. Otrzymaliśmy ciąg jednostek kryptogramu: 14, 25, 89, 3, 65, 24, 3, 49, 89, 24, 41, 25, 68, 41, 71. Kluczem publicznym jest ciąg: {57, 14, 3, 24, 8}, a prywatnym jest para d = 23, m = 61. a) Spróbuj odczytać wiadomość bez użycia klucza prywatnego. b) Sprawdź wynik, odszyfrowując kryptogram przy użyciu klucza prywatnego.
Koniec