Wykład 3
Transkrypt
Wykład 3
Materiały dydaktyczne – Matematyka Dyskretna (Wykład 3) Arytmetyka modularna: kongruencje, grupa klas reszt modulo n. Małe twierdzenie Fermata, twierdzenie Eulera. Niech m > 1 będzie ustaloną liczbą naturalną. Jeżeli a i b są liczbami całkowitymi, to mówimy, że a przystaje do b modulo m (lub według modułu m), jeśli m|(a − b). Symbolicznie ten fakt zapisujemy następująco: a ≡ b (mod m). Nietrudno zauważyć, że a przystaje do b modulo m wtedy i tylko wtedy gdy reszta z dzielenia a przez m jest równa reszcie z dzielenia b przez m. Z punktu widzenia tej relacji, liczby całkowite są charakteryzowane wyłącznie przez ich reszty z dzielenia przez m. Stwierdzenie 1. Dla ustalonej liczby naturalnej m relacja przystawania modulo m ma następujące własności: (i) Dla dowolnego a ∈ Z, a ≡ a (mod m), (relacja jest zwrotna); (ii) Dla dowolnych a, b ∈ Z, jeśli a ≡ b (mod m), to b ≡ a (mod m), (relacja jest symetryczna); (iii) Dla dowolnych a, b, c ∈ Z, jeśli a ≡ b (mod m) i b ≡ c (mod m), to a ≡ c (mod m) (relacja jest przechodnia). (iv) Dla dowolnych a, b, c, d ∈ Z, jeśli a ≡ c (mod m) i b ≡ d (mod m), to a + b ≡ c + d (mod n) oraz ab ≡ cd (mod m) (zgodność relacji z działaniami dodawania i mnożenia). Dzięki trzem pierwszym własnościom zbiór wszystkich liczb całkowitych można podzielić na rozłączne zbiory składające się z liczb, których ta relacja nie rozróżnia lub inaczej – zbiorów wszystkich liczb całkowitych, które podzielone przez m dają taką samą resztę. Zbiory te nazywamy klasami kongruencji lub klasami reszt modulo m. Są to: mZ 1 + mZ 2 + mZ ... (m − 1) + mZ = {mk : k ∈ Z}, = {1 + mk : k ∈ Z}, = {2 + km : k ∈ Z}, = {m − 1 + km : k ∈ Z}. Ostatnia własność relacji przystawania modulo m pozwala na określenie operacji dodawania i mnożenia w zbiorze klas kongruencji. Jednak zamiast rozważania działań na takich zbiorach zdefiniujemy działania tylko na zbiorze reszt, co prowadzi do algebraicznej konstrukcji o dokładnie takich samych własnościach, jakie mają zbiory klas kongruencji. Niech mianowicie Zm będzie zbiorem wszystkich reszt z dzielenia przez m, tzn. Zm = {0, 1, 2, . . . , m − 1}. Definiujemy w nim działania dodawania i mnożenia modulo m. def. a ⊕m b = reszta z dzielenia liczby a + b przez m, def. a m b = reszta z dzielenia liczby a · b przez m, (1) Załóżmy przy tym, że wskaźnik m przy symbolach działań będziemy pomijać, jeśli nie będzie to prowadzić do nieporozumień. Obie operacje mają takie same własności, jak ’zwykłe’ dodawanie i mnożenie liczb całkowitych. Nie będziemy ich tu wszystkich wymieniać, ale zwrócimy uwagę na jedną ważną własność. Otóż, w 1 Materiały dydaktyczne – Matematyka Dyskretna (Wykład 3) zbiorze liczb całkowitych tylko 1 i −1 mają odwrotności będące liczbami całkowitymi. Natomiast w Zm może istnieć więcej elementów a, dla których istnieje x, taki że a m x = 1. Taki element a nazwiemy odwracalnym. Niech def. Z∗m = {a ∈ Zm : N W D(a, b) = 1} (2) Stwierdzenie 2. Niech m > 1 będzie ustaloną liczbą naturalną. Wówczas Z∗m jest zbiorem wszystkich elementów odwracalnych z Zm . Dowód. Niech a ∈ Zn . Z rozszerzonego algorytmu Euklidesa wynika, że jeśli a i m są względnie pierwsze to istnieją elementy x i y, takie że ax + my = 1. Zatem ax = 1 − my, czyli tzn. ax podzielone przez m daje resztę 1. Jeśli więc x zastąpimy resztą z dzielenia x przez m, to oczywiście również otrzymamy taki wynik. Zatem a m x = 1. Odwrotnie, jeśli axm = 1, to z definicji mnożenia modularnego ax = 1 + mt, dla pewnego t ∈ Z. Czyli ax + m(−t) = 1 i na podstawie rozszerzonego algorytmu Euklidesa a i m są względnie pierwsze. Niech ϕ(n) będzie liczbą wszystkich elementów odwracalnych z Zn , tzn.: def ϕ(n) = |Z∗n |. Funkcję ϕ(n) nazywamy funkcją Eulera. W Przykład 1. Wartości funkcji Eulera dla małych argumentów można wyliczyć bezpośrednio z definicji: n 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 . ϕ(n) 1 2 2 4 2 6 4 6 4 10 4 12 6 8 8 16 6 18 8 12 10 Twierdzenie 3 (Małe Twierdzenie Fermata). Niech p będzie ustaloną liczbą pierwszą. Jeżeli a jest dowolną liczbą całkowitą niepodzielną przez p (co jest równoważne temu, że jest względnie pierwsza z p), to ap−1 ≡ 1 (mod p). Jeżeli p jest liczbą pierwszą, to to ϕ(p) = p − 1, ponieważ Z∗p = {1, 2, · · · , p − 1}. Twierdzenie to można sformułować w alternatywnej wersji: Twierdzenie 4. Niech n > 1 będzie ustaloną liczbą naturalną. Jeżeli a jest dowolną liczbą całkowitą, która jest względnie pierwsza z n), to a p a p · a = 1. | {z } p−1 Małe Twierdzenie Fermata jest szczególnym przypadkiem następującego Twierdzenia Eulera. Twierdzenie 5 (Twierdzenie Eulera). Niech m > 1 będzie ustaloną liczbą naturalną. Jeżeli a jest dowolną liczbą całkowitą, która jest względnie pierwsza z m), to aϕ(m) ≡ 1 (mod m). 2 Materiały dydaktyczne – Matematyka Dyskretna (Wykład 3) Twierdzenie 6. Funkcja ϕ spełnia następujące warunki: (i) Jeśli p jest liczbą pierwszą, to dla dowolnej liczby naturalnej n ϕ(n) = pn−1 (p − 1) (ii) Jeśli m i n są liczbami względnie pierwszymi, to ϕ(m · n) = ϕ(m) · ϕ(n). (iii) Jeśli n = pn1 1 pn2 2 · · · pnk k , to n = pn1 1 −1 (p1 − 1)pn2 2 −1 (p2 − 1) · · · pnk k −1 (pk − 1) = n(1 − 1 1 1 )(1 − ) · · · (1 − ) p1 p2 pk Wniosek 7. Jeżeli p i q są różnymi liczbami pierwszymi, to ϕ(p · q) = ϕ(p) · ϕ(q) = (p − 1)(q − 1). System RSA System RSA jest pierwszym kryptograficznym systemem asymetrycznym, którego zasady działania zostały ogłoszone publicznie. Za jego odkrywców uważa się trzech matematyków amerykańskich: Rona Rivesta, Adiego Shamira i Lena Adlemana (od pierwszych liter nazwisk bierze się nazwa systemu). Ich wspólna publikacja opisująca system ukazała się w 1977 roku. Dwadzieścia lat później ujawniono, że już w 1974 roku system został odkryty niezależnie przez pracowników brytyjskiego biura szyfrów. Można podejrzewać, że system był znany jeszcze wcześniej w amerykańskiej agencji bezpieczeństwa NSA (No Such Agency, Never Say Anything). Podstawą systemu jest para liczb naturalnych N i a. Pierwsza z nich jest iloczynem dwóch dużych liczb pierwszych wygenerowanych niezależnie: N = p · q. Druga z liczb, a, jest dobrana tak, aby N W D(a, ϕ(N )) = N W D(a, (p − 1)(q − 1)) = 1. Kluczem publicznym właściciela systemu kryptograficznego jest para (N, a). Jest to zatem para liczb znana publicznie i każdy, kto chce wysłać do właściciela informację tajną szyfruję ją wykorzystując te dwie liczby. Sposób szyfrowania podany jest niżej. Tajnymi pozostają liczby pierwsze p i q, jak również wartość ϕ(N ) = (p−1)(q−1). Zauważmy, że znajomość liczb N i ϕ(N ) wystarcza by wyznaczyć czynniki p i q. Klucz rozszyfrowujący b wyznaczamy na podstawie liczb a i ϕ(N ), korzystając z tego, że ab ≡ 1 (mod ϕ(N )). Jak szyfrujemy. Przyjmujemy, że dysponujemy metodą zamiany jednostek informacji na liczby naturalne z przedziału h1, N − 1i. Jeśli m jest jednostką informacji zamienioną na liczbę, to szyfrowanie polega na podniesieniu tej liczby do potęgi a. Jeśli więc c jest jednostką szyfrogramu powstałą z m, to c = ma (mod N ). Dysponując liczbą b, której wyznaczenie może być obliczeniowo trudne, praktycznie niewykonalne, jeśli nie jest znane ϕ(N ), ale przy znajomości ϕ(N ) – bardzo łatwe (patrz rozszerzony algorytm Euklidesa), otrzymany szyfrogram c nietrudno zamieniamy na wiadomość m: cb ≡ (ma )b ≡ mab ≡ m1+kϕ(N ) ≡ m · (mϕ(N ) )k ≡ m Korzystaliśmy tu z faktu, iż mϕ(N ) ≡ 1 (mod N ). 3 (mod N ) Materiały dydaktyczne – Matematyka Dyskretna (Wykład 3) Liczby a i b mogą być bardzo duże, wiec zarówno szyfrowanie, jak i deszyfrowanie mogą zająć wiele czasu. By ten czas możliwie radykalnie skrócić korzystamy z algorytmu szybkiego potęgowania modularnego. Niech a = (an−1 an−2 . . . a1 a0 )2 będzie zapisem klucza szyfrującego w postaci binarnej. Jeśli teraz chcemy obliczyć ma (mod N ) wyliczamy najpierw ciąg m0 = m ≡ m2 0 (mod N ), m1 ≡ m21 ≡ m2 (mod N ), . . . , mn−1 ≡ m2n−2 ≡ m2 n−1 (mod N ), a następnie wymnażamy liczby mi dla, których ai 6= 0. Mamy bowiem 2 +···+a n−1 n−1 ·2 ma = ma0 +a1 ·2+a2 ·2 a n−1 = ma0 ma11 ma22 · · · mn−1 (mod N ). Zapiszmy powyższy algorytm w postaci pseudo-kodu. Niech n będzie liczbą bitów w binarnym zapisie liczby a = (an−1 an−2 . . . a1 a0 ), tzn. a= n−1 X ai 2i , i=0 gdzie ai ∈ {0, 1}. Naszym celem jest obliczenie potęgi xa (mod N ). (1) z ← 1 (zmienna z na wyjściu jest szukaną potęgą). (2) for i = n − 1 downto 0 do (3) z ← z 2 (mod N ) (4) if bi = 1 then z ← z · x (mod N ) Opracował: Cz. Bagiński 4