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