Wybrane zagadnienia teorii liczb Podzielność liczb NWW, NWD, Algorytm Euklidesa Arytmetyka modularna Potęgowanie modularne Małe twierdzenie Fermata Liczby pierwsze Kryptosystem RSA
Podzielność liczb Relacja podzielności: Dane są dwie liczby całkowite a i b. Mówimy, że b dzieli a (b jest dzielnikiem a lub a jest wielokrotnością b), gdy istnieje taka liczba całkowita q, że a=b q. Zapis relacji podzielności: b a. Własności relacji podzielności (dla dowolnych całkowitych a, b, i c): Jeśli a c to a b c Jeśli a b i b c to a c Jeśli a b i a c to a (b+c) Przykładowo 3 12 i 12 36, a więc 3 36
Dzielenie z resztą Reszta z dzielenia: Dla każdej pary liczb całkowitych a i b istnieją takie q i r (0<=r<b), że a=b q+r. Liczba r to tzw. reszta z dzielenia. dla a=13 i b=5 mamy q=2 i r=3 (13=5 2+3) dla a=-17 i b=4 mamy q=-5 i r=3 Resztę z dzielenia z przez b zapisuje się jako a mod b. Reszta wynosi zero, gdy b a. 25 mod 12=1-20 mod 13=6 100 mod 10=0
Największy wspólny dzielnik Największy wspólny dzielnik dwóch liczb całkowitych a i b (inaczej NWD(a,b)) to największa liczba całkowita d, która dzieli zarówno a jak i b. Zakładamy, że przynajmniej jedna z liczb (a lub b) jest różna od zera. NWD(12,8)=4 NWD(20,10)=10 NWD(17,11)=1 NWD dla większej liczby liczb obliczamy z łączności: NWD(a, b, c)=nwd(a, NWD(b,c))=NWD(NWD(a,b), c)
Algorytm Euklidesa Dziadek wszystkich algorytmów (IV wiek p.n.e.) Szybki sposób na policzenie NWD NWD(a, b) dopóki b 0 c a mod b a b b c zwróć a Liczba iteracji potrzebna na wyznaczenie NWD rośnie w tempie logarytmicznym od sumy a+b.
Algorytm Euklidesa - przykład Policzmy NWD(129, 54) 1) a=129, b=54, c=129 mod 54=21 2) a=54, b=21, c=54 mod 21=12 3) a=21, b=12, c=9 4) a=12, b=9, c=3 5) a=9, b=3, c=0 6) a=3, b=0, czyli wynikiem jest 3
Rozszerzony algorytm Euklidesa Umożliwia policzenie takich całkowitych x i y, że a x+b y=nwd(a, b) NWD 2(a,b) x 0 1 y 0 0 x 1 0 y 1 1 n 2 dopóki b 0 c a mod b q a/b a b b c x n =x n 2 q x n 1 y n = y n 2 q y n 1 n n+1 zwróć (x n 2, y n 2 )
Przykład a=129, b=54, NWD(a,b)=3-5 129+12 54=3
Liczby pierwsze Liczba naturalna p jest pierwsza, gdy posiada dokładnie dwa różne dzielniki: 1 i p. Kolejne liczby pierwsze: 2, 3, 5, 7, 11, 13, 17 Liczba złożona to liczba naturalna posiadająca co najmniej 3 różne dzielniki Liczba liczb pierwszych z przedziału [1,n] rośnie w tempie n/ln n (np. mamy 78498 liczb pierwszych do miliona, ponad 50 milionów w przedziale [1, 10 9 ]) Liczby szczególnie istotne w kryptografii
Twierdzenie Euklidesa Jest nieskończenie wiele liczb pierwszych Załóżmy, że liczb pierwszych jest skończona liczba np. p 1, p 2,, p n. Wówczas istniałaby liczba x, która nie dzieli się przez żadną z nich: x=p 1 p 2 p n +1 Stąd musi istnieć kolejny dzielnik pierwszy liczby x inny od powyższych, co przeczy założeniu.
Generowanie liczb pierwszych z przedziału Algorytm zwany sitem Eratostenesa (III wiek p.n.e.) wyznacza liczby pierwsze z przedzialu [2...n]. Sito(n) dla każdego i [2, n] pierwsza[i] true dla każdego i [2, n] jeżeli pierwsza[i] dla każdego j n i będącego wielokrotnością i pierwsza[ j] false
Rozkład liczby na czynniki pierwsze Zasadnicze twierdzenie arytmetyki każdą liczba ma jednoznaczny rozkład na iloczyn liczb pierwszych Przykład rozkładu liczby 840=2 3 3 5 7
Rozkład liczby na czynniki cd Niech liczba a ma rozkład: Niech liczba b ma rozkład: Wówczas liczba dzielników liczby a wynosi: Ponadto a=p 1 x 1 p 2 x 2... pn x n b=p 1 y 1 p2 y 2... pn y n σ (a)=(x 1 +1) (x 2 +1)... (x n +1) NWD(a,b)=p 1 min( x 1, y 1 ) p 2 min(x 2, y 2 )... p n min( x n, y n ) NWW (a,b)= p 1 max(x 1, y 1 ) p 2 max (x 2, y 2 )... p n max( x n, y n ) NWW (a, b) to największa wspólna wielkrotność, czyli najmniejsza liczba dodatnia z taka, że a z i b z
Przykłady a=48, b=36 a=2 4 3 1, b=2 2 3 2 NWD(a,b)=2 min(4,2) 3 min(1,2) =2 2 3=12 NWW(a,b)=2 max(4,2) 3 max(1,2) =2 4 3 2 =144 Własność: Liczba dzielników 48 NWW (a,b)= (a b) NWD(a,b) σ (48)=5 2=10
Liczby względnie pierwsze Liczby całkowite a i b są względnie pierwsze jeżeli NWD(a, b)=1 NWW(a, b)=a b dla liczb względnie pierwszych Przykłady par liczb względnie pierwszych: 15 i 8, 14 i 9, 13 i 7 Pewne właściwości: Dwie liczby pierwsze są zawsze względnie pierwsze Liczby n i n+1 są zawsze względnie pierwsze.
Funkcja φ Eulera φ(n) określa liczbę liczb względnie pierwszych z n i nie większych od niej Przykładowo φ(8)=4 (liczby 1, 3, 5, 7 są względnie pierwsze z 8). Pewne właściwości funkcji φ: φ(p)=p-1 (dla liczby pierwszej p) φ(p k )=p k-1 (p-1) φ(n m)=φ(n) φ(m) (dla względnie pierwszych n i m)
Kongruencje Niech dane będą liczby całkowite a, b oraz m. Mówimy, że a przystaje do b modulo m jeżeli m a-b. Zapisujemy to a b(mod m) Ponadto, a b(mod m) wtedy i tylko wtedy, gdy liczby a i b mają taką samą resztę z dzielenia przez m. 75 5(mod 10) ponieważ 5 jest resztą z dzielenia 75 przez 10. Ale również 75 25(mod 10) oraz 75 75(mod 10). Ponadto np. 12-13(mod 5) ponieważ 5 (12+13))
Własności kongruencji Jeżeli a b(mod m) i c d(mod m) to: a+b c+d(mod m) a-b c-d(mod m) a b c d(mod m) a n b n (mod m) Przykład: 16 2(mod 7) i 10 3(mod 7). Z tego wynika, że 160 6(mod 7)
Odwrotność modularna Multiplikatywną odwrotnością liczby całkowitej a modulo n jest taka liczba b, że a b 1(mod n) Odwrotność liczby a modulo n zapisuje sięteż jako a -1. Odwrotność modulo istnieje tylko wtedy, gdy a i n są względnie pierwsze (NWD(a, n)=1) Przykładowo odwrotnością liczby 3 modulo 11 jest 4 (ponieważ 3 4=12 1(mod 11) Nie istnieje odwrotność liczby 6 modulo 8
Rozszerzony algorytm Euklidesa wyznaczanie odwrotności Aby obliczyć odwrotność a modulo n trzeba wyznaczyć NWD(a,n) rozszerzonym algorytmem Euklidesa. Jeżeli NWD wynosi 1, to wówczas współczynnik x jest odwrotnością. Przykładowo: a=5, n=13, odwrotnością a jest -5 Istotnie 5-5=-25 1(mod 13) W zastosowaniach kryptograficznych odwrotność sprowadza się do liczb dodatnich dodając moduł (-5+13=8)
Potęgowanie modularne Celem jest obliczenie a b (mod m) Dla a>n można zastąpić a jej resztą z dzielenia przez n, co może uprościć obliczenia np.: 12 135 (mod 11)=1 135 (mod 11)=1 7 4 (mod 5)=2 4 (mod 5)=16(mod 5)=1 Naiwny algorytm b-1 krotne mnożenie wyniku przez a (i redukcja modulo m). Niewydajny. Szybszy sposób: wykorzystanie tego, że a b=(a b/2 ) 2 dla b parzystych oraz a b =a(a b/2 ) 2 dla b nieparzystych.
Szybkie potęgowanie modularne - przykład Istotne zastosowania w kryptografii Obliczmy 7 20(mod 10) 7 20(mod 10)=(7 10 ) 2 (mod 10) 7 10(mod 10)=(7 5 ) 2 (mod 10) 7 5(mod 10)=7 (7 2 ) 2 (mod 10) 7 2(mod 10)=49=9(mod 10) 7 5(mod 10)=7 (7 2 ) 2 =7 (9 2 )=7 81=7(mod 10) 7 10(mod 10)=(7 5 ) 2 =7 2 =49=9(mod 10) 7 20(mod 10)=(7 10 ) 2 =9 2 =81=1(mod 10)
Twierdzenia dotyczące potęg modulo Twierdzenie Eulera: jeżeli liczby a i m są względnie pierwsze to a φ(m) 1(mod m) Małe twierdzenie Fermata: jeżeli p jest liczbą pierwszą i a nie jest wielokrotnością p, to a p-1 1(mod p) Małe twierdzenie Fermata szczególnym przypadkiem twierdzenie Eulera (dla m będących liczbami pierwszymi) Przykład: 2 6 1(mod 9) Sprawdzenie 2 6 =64=9*7+1 1(mod 9) Inny przykład: policzyć 14 1001(mod 101) Wiemy, że 14 100 1(mod 101) 14 1001 =(14 100 ) 10 14=1 10 14(mod 101)=14(mod 101)
Kryptosystem RSA 1) Generowanie liczby n (modułu RSA) będącej iloczynem dwóch dużych liczb pierwszych p i q (są one tajne) 2) Obliczenie funkcji Eulera φ(n)=(p-1) (q-1) 3) Generowanie liczby e (klucza publicznego RSA). Liczba e jest względnie pierwsza z φ(n) 4) Obliczanie liczby d (klucza prywatnego RSA). Liczba d jest odwrotnością e w modulo φ(n). (czyli e d 1(mod φ(n)) 5) Szyfrowanie wiadomości m: s=m e (mod n) 6) Deszyfrowanie szyfru s: m=s d (mod n)
Trudność złamania RSA Klucz prywatny to odwrotność modularna klucza publicznego Aby ją obliczyć potrzebna jest wartość φ(n), która nie jest znana (gdyż p i q są tajne i znane tylko właścicielowi klucza prywatnego lub są niszczone) Nieznane szybkie algorytmy faktoryzacji (rozkładu na czynniki) dużych liczb n. Liczby w RSA mają po kilkaset cyfr w zapisie dziesiętnym
Przykład szyfrowania RSA p=7, q=11, n=pq=77 φ(n)=(p-1)(q-1)=60 e=7 d=43 (ponieważ e d=7 43=301 1(mod 60) Szyfrujemy wiadomość m=13: s=m e (mod n)=13 7 (mod 77)=62 Deszyfrujemy szyfrogram s=62: m=s d (mod n)=62 43 (mod 77)=13 Zmiana tekstu na liczby: dzielenie pliku na bloki i traktowanie każdego bloku jako liczby przy pewnej podstawie np. 256 lub 27 (liczba liter angielskich)