WYPIEK ROKU czyli… kodowanie metodą Rabina
Babcia Jasia… …to prawdziwa mistrzyni w pieczeniu ciast. Jej specjały już nieraz zdobyły uznanie i laury w wielu znaczących konkursach. Jak co roku ma zamiar wziąć udział w Festiwalu Miasto i Ciasto, którego integralną częścią jest konkurs Bieg Po Wypiek . Jej sekretne receptury są jednak łakomym kąskiem dla konkurencji. Dla Babci Jasia to jednak żaden problem, jest ona bowiem emerytowanym kryptologiem. Jaś natomiast to bystry chłopiec, który uwielbia matematykę ( równania modularne to dla niego pestka). Babcia postanawia więc nauczyć wnuczka jednej z metod kodowania , a sama przy okazji zaszyfrować przepis (a właściwie jeden składnik, który nadaje temu ciastu wyjątkowy smak).
Czy słyszałeś kiedyś o Michaelu Rabinie ? To wybitny matematyk znany przede wszystkim z prac nad teorią i zastosowaniem algorytmów komputerowych. Szczególną uwagę poświęca on elektronicznemu bezpieczeństwu oraz zastosowaniom metod generowania liczb pseudolosowych. Urodził się we Wrocławiu w 1931 roku, jednakże już 4 lata później, w związku z ówczesną sytuacją polityczną, jego rodzina podjęła decyzję o wyjeździe do Palestyny. Tam Michael Rabin rozpoczął swoją edukację i w 1953 roku otrzymał tytuł Magistra Algebry. Zafascynowany techniką komputerową wyjechał do USA, gdzie kontynuował pracę naukową. Współpracował z korporacją IBM oraz rozpoczął rozważania nad ideą funkcji jednostronnej – a więc funkcji, której wartość obliczyć jest bardzo łatwo, podczas gdy znalezienie argumentu dla danej wartości jest ekstremalnie trudne, wręcz niewykonalne. Badania te dały podstawy całej współczesnej kryptografii.
KRYPTO… co??!! Kryptografii Jasiu… Jest to dziedzina nauki zajmująca się zagadnieniami utajania informacji poprzez jej szyfrowanie. Mianem kryptografii określa się także zbiór technik służących takiemu utajaniu. Ma ona ogromne znaczenie w ochronie danych komputerowych. Początki kryptografii sięgają czasów starożytnych. Już Egipcjanie szyfrowali swoje hieroglify, a starożytni Hebrajczycy ważne słowa w swoich skryptach. Stosowane wówczas metody były jednak zazwyczaj bardzo prymitywne. Sytuacja ta uległa zmianie w pierwszej połowie dwudziestego wieku, kiedy to zbudowano wiele systemów szyfrowania za pomocą urządzeń mechanicznych. Systemy te wykorzystywano m.in. podczas drugiej wojny światowej (np. Enigma). Jednak dopiero rozwój elektroniki przyniósł prawdziwą rewolucję w projektowaniu systemów kodujących. Dawał on olbrzymie możliwości wykonywania operacji obliczeniowych niskim kosztem. Kryptografia jest ściśle związana celami wojskowymi, a także kontrolą aparatów bezpieczeństwa poszczególnych państw. Powszechnie jest ona także wykorzystywana w bankowości elektronicznej, gdzie wszystkie transakcje odbywają się w tak zwanym bezpiecznym połączeniu, a każda operacja zatwierdzana jest przy użyciu klucza prywatnego.
ALE CO Z NASZYM CIASTEM? Zakodujemy nasz sekretny składnik i nawet jeśli zaszyfrowana wiadomość wpadnie w ręce konkurencji (znającej naszą metodę kodowania) nic nie będą mogli zrobić. Skoro zna naszą metodę to dlaczego nie może rozkodować wiadomości? Nie może, zastosujemy bowiem Algorytm Rabina. Osoba, która przechwyciła naszą wiadomość musiałaby posiadać umiejętność faktoryzacji liczb, czyli ich rozkładu na liczby pierwsze. Jest to zadanie niezwykle trudne. Bowiem dla liczby „n” mającej 1000 cyfr znaczących, maksymalna liczba dzieleń jaką w najgorszym wypadku musielibyśmy wykonać ~10500. Jeśli jedno dzielenie super szybkiemu komputerowi zajmuje ~10-4 sekundy, to potrzeba nam będzie 10496 sekund aby wykonać wszystkie te dzielenia. Z kolei 10496 s < 10494 min < 10492 godz < 10490 dni < 10487 lat !!! Biorąc pod uwagę fakt że wszechświat istnieje od 14·109 lat sam widzisz, że wręcz niemożliwością jest złamanie tego kodu
Skąd będziemy wiedzieć jakim literom odpowiadają poszczególne liczby? Użyjemy kodu ASCII (American Standard Code for Information Interchange), jest to standardowy sposób przypisania liczb do znaków pisarskich. Jest to kod specjalny, w którym wszystkim małym i dużym literom, cyfrom, znakom interpunkcyjnym oraz znakom specjalnym zostały przypisane liczby z przedziału od 0 do 127. Kod ASCII rozszerzono o liczby z przedziału od 128 do 255 dla oznaczenia symboli matematycznych, prostych symboli graficznych i kilku znaków specjalnych. Nasz tajny składnik ma następującą reprezentację: 73 77 66 73 82. Znasz go, spróbuj go jednak odnaleźć w poniższym zestawieniu 65 A 69 E 73 I 77 M 81 Q 66 B 70 F 74 J 78 N 82 R 67 C 71 G 75 K 79 O 83 S 68 D 72 H 76 L 80 P 84 T
ZACZNIJMY KODOWANIE Użyjemy funkcji kodującej k(x) = x2 (mod m) gdzie m=p·q , a p i q to liczby pierwsze, które przy dzieleniu przez 4 dają resztę 3. Niech k(x) = x2 (mod 253) (253=11·23) Pierwszą liczbą do zaszyfrowania jest 73. Podnieśmy więc 732 = 5329(mod 253)=16(mod253) Kolejna liczba to 77. 772 = 5929(mod 253)=110(mod253) 662 = 4356(mod 253)=55(mod253) 822 = 6724(mod 253)=146(mod253) Zaszyfrowana przez nas wiadomość ma następująca treść: 16 110 55 16 146 Wadą algorytmu Rabina jest możliwość otrzymania kilku rozwiązań. Wiadomo jednak, że kodowaliśmy tylko liczby dwucyfrowe. Wprowadzając tą dodatkową informację unikniemy problemu niejednoznaczności.
A jak mam ją później rozkodować ? Treść wiadomości znają wszyscy, ty natomiast masz nad nimi tą przewagę, że znasz faktoryzacje liczby 253. Czyli jej rozkład na iloczyn liczb 11 i 23. W celu rozszyfrowania wiadomości będziesz musiał wykonać szereg operacji. Zacznijmy od pierwszej liczby : 16 Szukaną przez nas wartością jest „x”. x2 ≡ 16(mod 11)≡ 5(mod11) gdyż „x” został zakodowany poprzez podniesienie tej wartości do kwadratu x2 ≡ 16(mod 23) Korzystając z odpowiedniego twierdzenia możemy wyliczyć wartość „x” ze wzoru : x ≡ 5(11+1)/4(mod 11) = 53(mod 11)= 125(mod11)= 4(mod 11) czyli możliwe jest także “-x” gdyż zarówno „x” jak i „-x” podniesiony do kwadratu da x2. x ≡ 7(mod 11) A z drugiego równania (x2 ≡ 16(mod 23)) otrzymujemy : x ≡ 16 (23+1)/4 (mod 23)= 166(mod 23)= 26·26·26·26 (mod 23)= 64·64·64·64(mod 23) = 18·18·18·18 (mod 23) = 324·324 (mod 23) = 2·2 (mod 23) = 4 (mod 23) lub analogicznie x ≡ 19(mod 23)
Musimy zatem rozwiązać cztery układy równań : x ≡ 4 (mod 11) x ≡ 4 (mod 23) x ≡ 4 (mod 11) x ≡ 19 (mod 23) x ≡ 7 (mod 11) x ≡ 4 (mod 23) x ≡ 7 (mod 11) x ≡ 19 (mod 23) Wyliczmy „x” z pierwszego układu. Z pierwszego równania (x ≡ 4 (mod 11)) zapiszemy x jako : x = 4 + 11·k a następnie podstawimy do drugiego równania otrzymując : 4 + 11·k = 4 (mod 23) 11·k = 0 (mod 23) k = 0 (mod 23) k = 23·n Wstawiając wyliczone k do pierwszej równości (x = 4 + 11·k) : x1 = 4 + 11·23·n= 4(mod 253) lub x2= 249 (mod 253) Wiemy jednak, że kodowano liczby dwucyfrowe tak więc żadna z wyliczonych wartości nie jest naszym rozwiązaniem.
Musimy rozwiązać więc drugi układ równań? Tak Jasiu! x ≡ 4 (mod 11) x ≡ 19 (mod 23) Z pierwszego równania : x = 4 + 11k Wstawiając do drugiego równania : 4 + 11k = 19(mod 23) 11k = 15(mod 23) Obie strony równania mnożymy przez 11-1 czyli 21 w Z23 (bo 21·11= 231(mod 23) = 1(mod23)) Otrzymujemy : k= 15·21 (mod 23)= 315(mod 23) = 16(mod 23) k = 16 + 23n x = 4 + (16+ 23n)11 = 180 + 253n x1= 180 (mod 253) lub x2= 73 (mod 253)
Wiedząc, że kodowano liczby dwucyfrowe otrzymujemy rozwiązanie x = 73 , czyli zakodowaną literą było „I”. Analogicznie należy rozkodować pozostałe liczby z otrzymanej wiadomości. Chyba nie powinieneś mieć z tym żadnego problemu. Masz jakieś pytania? Spytaj od razu, bo jeśli pomylisz się w dniu naszego konkursu z pewnością nie wygramy. DZIĘKUJĘ !!! Prezentację przygotował Arkadiusz Gnat