Transcript Wypiek Roku

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)
x2 ≡ 16(mod 23)
gdyż „x” został zakodowany poprzez podniesienie
tej wartości do kwadratu
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.
Prezentację przygotował
Arkadiusz Gnat