122 4. Kłucie puhlkunc
„jemy to postępowanie dopóty, dopóki nic będziemy mogli zastąpić danej kongnicncji prze/ kongruencję z wykładnikiem dwa razy mniejszym. Mamy wtedy dwie możliwości:
(i) Liczba m/2 dzieli się przez jedną z liczb p — 1, g — 1 (np. dzieli się przez p - I), ale nic dzieli się przez obie. Wtedy liczba aml2 zawsze przystaje do 1 modulo p, ale dokładnie w 50% przypadków przystaje do -1, a nie do 1, modulo q.
(ii) Liczba m/2 nic dzieli się przez żadną z liczb p — 1 i q — 1. Wtedy liczba aml2 przystaje do 1 modulo p i modulo q (a więc i modulo n) w dokładnie 25% przypadków, przystaje do — 1 modulo p i modulo q również w 25% przypadków oraz przystaje do 1 względem jednego modułu i do -1 względem drugiego modułu w pozostałych 50% przypadków.
Testując zatem losowo wybrane liczby o, z dużym prawdopodobieństwem znajdziemy wkrótce liczbę a, dla której liczba am/2 — 1 dzieli się przez jedną z tych liczb pierwszych (np. przez p) i nie dzieli się przez drugą. (Każda losowo wybrana liczba a ma tę własność z prawdopodobieństwem 50%). Z chwilą gdy znajdziemy taką liczbę o, natychmiast rozłożymy liczbę n na czynniki, gdyż NWD(n, cT12 — 1) = p.
Powyższa procedura jest przykładem algorytmu probabilistycznego. W następnym rozdziale poznamy inne algorytmy probabilistyczne.
3. W jaki sposób przesyłamy swój podpis za pomocą szyfru RSA? Gdy w poprzednim podrozdziale omawialiśmy zagadnienie potwierdzania tożsamości, zakładaliśmy dla uproszczenia, że ^ = W przypadku szyfru RSA mamy do czynienia z trochę bardziej skomplikowaną sytuacją. Oto jeden ze sposobów uniknięcia problemu różnych liczb nA i różnych rozmiarów bloków liter (liczba k liter w jednostce tekstu jawnego jest mniejsza od liczby / liter w jednostce tekstu zaszyfrowanego). Przypuśćmy, że tak jak w ostatnim podrozdziale, Alicja wysyła Bolkowi swój podpis (czyli pewien tekst jawny P). Zna ona klucz szyfrujący Bolka KE B = (nB, eB) i swój klucz rozszyfrowujący Kd a = {nA, dA). Wysyła wtedy fBf~Al(P), jeśli nA < nB, lub //ł/B(P), jeśli nA > nB. Zatem w pierwszym przypadku oblicza resztę z dzielenia Pć* przez nA\ następnie, biorąc pod uwagę to, że wynik jest mniejszy od nB> oblicza (P*A mod nAy’ mod nB i wysyła jako jednostkę tekstu zaszyfrowanego. Natomiast gdy nA> nB, najpierw oblicza Pa* mod nB, a potem podnosi wynik do potęgi dA modulo nA. Oczywiście Bolek może sprawdzić autentyczność podpisu w pierwszym przypadku, najpierw podnosząc go do potęgi dB modulo nB, a potem do potęgi eA modulo nA\ w drugim przypadku wykonuje te operacje w odwrotnej kolejności.
Ćwiczenia
1. Załóżmy, że używamy następującego 40-literowego alfabetu do zapisywania tekstów jawnych i zaszyfrowanych: A-Z z odpowiednikami liczbowy-
mi 0*25, odstęp = 26,. ~ 27,7 -- 28, 8 * 29, cyfry 0*9 z odpowiednikami 10-39. Przypuśćmy, że jednostkami tekstu jawnego są digramy, a jednostkami tekstu zaszyfrowanego są trigramy (tzn. k = 2, / — 3, 402 <nA<403 dla wszystkichnA).
(a) Wyślij wiadomość „SEND 87500” do użytkownika, którego kluczem szyfrującym jest (nA, eA) = (2047,179).
(b) Złam szyfr, rozkładając nA na czynniki i znajdując klucz rozszyfrowu-
(c) Wyjaśnij, dlaczego nawet bez rozkładania nA na czynniki, kryptoiog mógłby szybko znaleźć klucz rozszyfrowujący. Innymi słowy, dlaczego (niezależnie od małego rozmiaru) wybór liczby 2047 jest szczególnie zły jako liczby nA?
2. Spróbuj złamać szyfr, którego kluczem szyfrującym jest (n# ej = = (536813567, 3602561). Wykorzystaj komputer do rozłożenia liczby nA na czynniki pierwsze za pomocą najgłupszego możliwego algorytmu, tzn. dzieląc przez wszystkie liczby nieparzyste 3, 5, 7,.... Jeśli nie masz komputera, spróbuj odgadnąć czynniki pierwsze liczby nA, próbując różnych specjalnych liczb pierwszych. Po rozłożeniu nA na czynniki znajdź klucz rozszyfrowujący. Potem rozszyfruj wiadomość BNBPPKZAVQZLBJ przy założeniu, że tekst jawny składa się z bloków sześdoliterowych zapisanych za pomocą zwyczajnego 26-literowego alfabetu (przekształconych na liczby zawarte między 0 i 266 - 1 w zwykły sposób), a tekst zaszyfrowany składa się z bloków siedmioliterowych zapisanych w tym samym alfabecie.
To ćwiczenie powinno pokazać, że nawet 29-bitowa liczba nA jest o wiele za mała.
3. Przypuśćmy, że zarówno teksty otwarte, jak i kryptogramy składają się z trigramów, ale teksty otwarte są zapisane za pomocą alfabetu 27-litero-wego (składającego się z liter A-Z i odstępu = 26), podczas gdy kryptogramy są zapisane za pomocą alfabetu 28-literowego, otrzymanego przez dodanie symbolu „/” (z odpowiednikiem liczbowym 27) do alfabetu 27-literowego. Wymagamy, by każdy użytkownik A wybrał liczbę nA zawartą między 273 = 19683 i 283 = 21952 tak, by trigram tekstu otwartego w 27-literowym alfabecie odpowiadał reszcie P modulo nA i wtedy liczba C = P°A mod nA odpowiadała trigramowi kryptogramu zapisanemu w 28--literowym alfabecie.
(a) Odczytaj wiadomość „YSNAUOZHXXH ” (jeden odstęp na końcu), jeśli kluczem rozszyfrowującym jest KD = (n, d) = (21583, 20787).
(b) Znajdź (i) e = d~l mod <p(ń) i (ii) rozkład liczby n na czynniki, jeśli wiesz, że w punkcie (a) <p(n) = 21280.
4. Wykaż, że 35-bitowa liczba naturalna 23360947609 jest wyjątkowo złym kandydatem na n — pq, gdyż jej dzielniki pierwsze są zbyt bliskie siebie; pokaż mianowicie, żc liczba n może być łatwo rozłożona na czynniki pierwsze „metodą Fermata”. Zauważ, że jeśli n-pq (i np. p > q)t to