Podstawy matematyczne i algorytmiczne
Półgrupa
Niech G będzie niepustym zbiorem. Gdy w zbiorze G określimy operację dwuargumentową „°”, spełniającą prawo łączności, tzn. a° (b°c)=(a° b) ° c dla każdego a.b.c∈G, to wówczas układ (G, °) nazywamy półgrupą.
Półgrupę (G, °) z wyróżnionym elementem e∈G nazywamy grupą, jeśli spełnia dodatkowe warunki:
a ° e = e ° a = a dla a∈G,
dla każdego a∈G istnieje, a'∈G, takie że a ° a` = a` ° a = e.
Jeśli ponadto dla dowolnych a,b∈G mamy a ° b = b ° a to grupę nazywamy przemienną albo abelową.
W grupie G dla dowolnego a istnieje tylko jeden element a' spełniający warunek (a); Taki element nazywamy elementem odwrotnym do a. Jeśli „°” jest działaniem addytywnym „+”, to element odwrotny do a notujemy jako -a, a element jednostkowy e zapisujemy w postaci 0. Jeśli „°” jest działaniem multiplikatywnym „°”, to element odwrotny zapisujemy jako a-1 ,natomiast e notujemy w postaci 1. W tym ostatnim przypadku zamiast pisać a°b, piszemy a*b albo po prostu ab.
Dowód: Istnieje tylko jeden element odwrotny
a', a” - elementy odwrotne
a ° a' = a' ° a = e
a ° a” = a” ° a = e
a' = a' ° e = a' ° a ° a” = (a' ° a) ° a” = e ° a” = a” ÿ
Dowód: Istnieje element odwrotny
(a ° b) -1 = b-1 ° a-1
(a ° b) -1 = b-1 ° a-1 = a ° b ° b-1 ° a-1 = a ° e ° a-1 = e ÿ
Podgrupa
Grupa (H, °) jest podgrupą grupy (G, °), jeśli H⊆G, e∈H oraz dla dowolnych a,b∈H, a°b∈H. Jeśli H jest najmniejszą podgrupą grupy grupy G zawierającą zbiór X, to H nazywamy podgrupą generowaną przez X, a X - zbiorem generatorów podgrupy H. Jeśli X jest jednoelementowy, X={a}, to grupę generowaną przez ten zbiór nazywamy cykliczną i niekiedy oznaczamy jako (a).
Dla elementu a∈G potęgę an o dowolnym wykładniku całkowitym n określamy następująco a0 = 1 i indukcyjnie an = aan-1 dla n≥1. Ponadto a-n = (an)-1 dla n≥1.
Jeśli G=(a) jest grupą cykliczną z działaniem multiplikatywnym, to G={an | n∈Z}. Co do grupy (Z, °), to możemy wykazać, że każda jej podgrupa jest cykliczna.
Układ (R,+,*,0,1) nazywamy pierścieniem (przemiennym z jedynką), jeśli:
(R,+) jest grupą przemienną,
dla dowolnego a,b,c∈R
ab=ba
a(bc)=(ab)c
a1=1a=a
a(b+c)=ab+ac, (a+b)c=ac+bc.
Jeśli nie będzie prowadzić to do nieporozumień, to zamiast (R,+,*,0,1) będziemy po prostu pisać R.
Ciałem nazywamy pierścień(przemienny z jedynką), w którym 0≠1 i każdy elemnt różny od zera jest odwracalny.
Problem generowania elementu pierwotnego (wg normy ANSI X9.12)
Będziemy wybierali element g (el. pierwotny). Generuje on podgrupę q-elementową grupy multiplikatywnej GF(p) (p - liczba pierwsza, GF - Galois Field). Element g jest więc rzędu q. Oprócz tego q|p-1.
Algorytm:
Wejście: p,q
Wyjście: generator (el. pierwotny) rzędu q.
Metoda:
j:=(p-1)/q
Przyjmij g równe dowolnej liczbie naturalnej 1<g<p-1 różne od dotychczas przebadanych.
g:=g j mod p
if g=1 then przejdź do p-tu 2.
zwróć g.
Przykład:
p=7, q=3
j=(p-1)/q =2
1<g<6
sprawdzamy g∈{2,3,4,5}
dla g=2 mamy:
22 mod 7 = 4
Wygenerujmy podgrupę grupy zadanej:
21 mod 7 = 2
22 mod 7 = 4
23 mod 7 = 1 czyli H={1,2,4}
24 mod 7 = 2
25 mod 7 = 4
26 mod 7 = 4
Permutacja
Permutacja zbioru A jest to jednoznaczne odwzorowanie tego zbioru na siebie.
p:A->A
Zbiór jest skończony, czyli liczność zbioru card(A)=n, czyli |A|.
Elementami zbioru A są A={0,1,...,n-1}. Permutacją jest przekształcenie p, takie, że:
0 1 ... n-1
p =
p(0) p(1) ... p(n-1)
Przykład:
0 1 2 3 0 1 2 3
p = p-1 = p* p-1 ≠ p-1* p
1 3 0 2 2 0 3 1
np.:
0 1 2 3 0 1 2 3
qp = qp[2] = 1 qp[2] ≠ pq[2]
1 2 3 0 1 3 0 2
0 1 2 3 0 1 2 3
pq = pq[2] = 2
1 3 0 2 1 2 3 0
e- element jednostkowy
0 1 ... n-1
e =
0 1 ... p(n-1)
Zbiór wszystkich permutacji zbioru n-elementowego z operacją składowania permutacji tworzy grupę symetryczną Sn.
Przykłady permutacji
Założenie: A={0, 1, ..., n-1}
y=fk (x) = (k+x) mod n => f -1k (y) = (y-k) mod n bo f k(f -1k (x)) = (k+x-k) mod n = x.
To przekształcenie jest permutacją.
Czy to przekształcenie tworzy grupę?
Jeżeli dla każdego dowolnego przekształcenia, złożenie dwóch przekształceń, będzie miało wynik w grupie, to takie przekształcenie tworzy grupę (symetryczną).
fk (x) = (k+x) mod n
fk f -1k (x) = [(k+k')+x] mod n = (k”+x) mod n
f -1k (x) = (k'+x) mod n
y=fk (x) = (k*x) mod n => f -1k (y) = k-1y mod n
To przekształcenie jest permutacją, jeśli NWD(k,n)=1.
Skrzynka o n wejściach i n spermutowanych wyjściach
0 1 n-1
...
...
0 1 n-1
Przykład:
WE
x1 x2 x3 x1x2x3 y1y2y 3
0 000 000 0
1 001 100 4
2 010 010 2 0 1 2 3 4 5 6 7 3 011 110 6 => p =
4 100 001 1 0 4 2 6 1 5 3 7 5 101 101 5
y1 y 2 y 3 6 110 011 3
7 111 111 7
y=fk (x) = k ⊕ x => f -1k (y) = k ⊕ y ⊕ - suma mod 2 - bitowa
x
⊕ k
y
Algorytm stosowany w szyfrze DES - Przekształcenie Feistell'a (Pk)
A=264
- permutacja z punktu (4)
- permutacja identycznościowa
- permutacja z punktu (3)
W systemie DES mamy 16 różnych permutacji:
Pk(1) * Pk(2) * ... * Pk(16) = Pk
Możnaby znaleźć zamiast 16 kroków permutacji, jeden krok dający w wyniku 16-krotną permutację. Udowodniono jednak, że powyższe równanie jest sprzeczne, co dowodzi, że DES nie tworzy grupy.
Liczba Bluma
Liczbą Bluma nazywamy liczbę całkowitą postaci n=pq, gdzie p i q są różnymi liczbami pierwszymi, a każda kongruentna do 3 modulo 4.
p ≡ 3(mod 4) => p mod 4= 3
Niech p,q - liczby Bluma, to:
y = f(x) = x2 mod n, gdzie n=pq
jest permutacją.
Przekształcenie odwrotne ma postać:
f -1(y) = y ((p-1)(q-1)+4) / 8 mod n
Dowód: f -1(f(x)) = x, dla liczb Bluma
f -1(f(x)) = f -1(f(x)) = f -1(x2 mod n) = (x2 mod n) ((p-1)(q-1)+4) / 8 mod n = x 2*((p-1)(q-1)+4) / 8 mod n =
= x ((p-1)(q-1)) / 4 +1 mod n = x ϕ(n)/4 +1 mod n = (x ϕ(n)) -4* x mod n = 1-4* x mod n = x
ϕ(n)=(p-1)(q-1)
z zał.
p mod 3 = 4 p = 3 + k1*4
q mod 3 = 4 q = 3 + k2*4
k1, k2 ∈ N.
z p-tów 1 i 2 mamy:
(p-1)(q-1) = (3 + k1*4 -1) (3 + k2*4 -1) = (2 + 4* k1) (2 + 4* k2) =
= 4 + 8(k1+k2) + 16 k1k2 ∈ N ÿ
Kongruencje
Założenie: zbiór liczb całkowitych Z = {..., -2, -1, 0, 1, 2, ...}
Niech a,b będą liczbami całkowitymi, a n∈ N. Mówimy, że a i b przystają do siebie według modułu n (lub po prostu modulo n) i zapisujemy ten fakt w postaci a ≡ b(mod n), jeżeli n|a-b. Relację ≡ nazywamy kongruencją.
a ≡ b (mod n) n|a-b , n>0
Przykładowo 17 ≡ 8 (mod 9), 21 ≡ -6 (mod 27), -5 ≡ 9 (mod 7).
1.5.1. Własności relacji kongruencji
a ≡ a (mod n) - zwrotność;
a ≡ b (mod n) b ≡ a (mod n) - symetryczność
a ≡ b (mod n) i b ≡ c (mod n) ⇒ a ≡ c (mod n) - przechodność
Dowód na przechodność relacji kongruencji
n|a-b
(a-b)/n = k1 ⇒ a-b = n*k1
(b-c)/n = k2 ⇒ b-c = n*k2
Z punktów 2 i 3 mamy:
a - b + b - c = n*k1 + n*k2 = (k1 + k2)*n czyli n|a-c ÿ
Z powyższych własności wynika, że dla ustalonego n relacja kongruencji jest relacją równoważności, a więc określa podział zbioru Z na klasy równoważności zwane klasami reszt modulo n, postaci
[s] = { t ∈Z | s ≡ t (mod n)}.
Klasa [s] będzie reprezentowana przez resztę z podzielenia s przez n, zapisywaną jako s mod n. Tak więc każda klasa równoważności relacji kongruencji modulo n ma jednego i tylko jednego reprezentanta w zbiorze Zn = {0, 1, ..., n-1}. Jest to grupa addytywna. Zbiór Zn*=Zn\ {0}={0, 1, ..., n-1} tworzy grupę multiplikatywną. Jeżeli p∈P to Zp nazywamy Ciałem Galois (GP(p) - Galois Field).
Dla ustalonego modułu n kongruencję można dodawać, odejmować i mnożyć. Jeśli a ≡ b (mod n) i c ≡ d (mod n), to:
a ± c ≡ b ± d (mod n) i ac ≡ bd (mod) - zatem zbiór Zn wraz z operacjami dodawania i mnożenia tworzy pierścień przemienny z jedynką.
a ≡ b (mod n) => a ≡ b (mod r) dla dowolnego dzielnika r liczby n,
a ≡ b (mod m), a ≡ b (mod n) i NWD(m,n) => a ≡ b (mod mn).
Nie każdy element zbioru Zn ma element odwrotnny ze względu na mnożenie. Odwrotności istnieją tylko dla elementów względnie pierwszych z n. Innymi słowy, jeśli NWD(a,n)=1, to istnieje takie b, że ab ≡ 1 (mod n). Wynika stąd następna własność relacji kongruencji:
jeśli a ≡ b(mod n) i c ≡ d(mod n), a ponadto NWD(c,n) ≡1 (w tym przypadku także NWD(d,n)=1), to ac-1 ≡ bd-1(mod n), przy czym c-1 i d-1 oznaczają liczby całkowite odwrotne ze względu na mnożenie, odpowiednio, do c i d.
Z powyższego wynika, że pierścień Zn jest ciałem gdy n jest liczbą pierwszą.
Kongruencji nie można dzielić stronami, lecz
jeśli d jest wspólnym dzielnikiem liczb a,b,n, to z kongruencji a ≡ b (mod n) wynika kongruencja a/d ≡ b/d (mod n/d)
Twierdzenie Eulera-Fermata
Dla każdego a∈Zn
aϕ(n) ≡ 1 (mod n)
Funkcją Eulera nazywamy funkcję ϕ:N->N, taką, że ϕ(n) jest liczbą mniejszą od n i względnie pierwszą z n.
ϕ(n) = card({b | 0≤b≤n i NWD(b,n)=1}).
Własności funkcji Eulera:
ϕ(p) = p-1;
ϕ(pa) = pa-1 (p-1), a∈N;
ϕ(pq) = (p-1)(q-1);
jeśli n1, n2, n3,..., nt są liczbami naturalnymi, z których każde dwie są względnie pierwsze to:
ϕ(n1, n2, n3,..., nt) = ϕ(n1)ϕ(n2)ϕ(n3),...,ϕ(nt)
Niech m=p1e1 p2e2 ... prer będzie rozkładem liczby m na czynniki pierwsze. Wówczas:
ϕ(m)=m (1- 1/p1) (1- 1/p2)... (1- 1/pr)
Dla każdej liczby naturalnej m≥5 mamy:
ϕ(m) > m/(6 ln ln m)
Z powyższych własności funkcji Eulera wynika:
aϕ(n) ≡ 1 (mod n) => a p-1 ≡ 1 (mod n) => a p ≡ a (mod n), jeżeli p - liczba pierwsza, a∈Zp;
jeśli NWD(a, n)=1 i jeśli m' jest najmniejszą nieujemną resztą m modulo ϕ(n), to
a m ≡ am'(mod n);
jeśli NWD(a,n)=1, to
a -1 ≡ am'(mod n);
Algorytny wyznaczania NWD(a,b)
Algorytm Euklidesa wyznaczania największego wspólnego dzielnika
Wejście: a,b∈N, a<b;
Wyjście: NWD(a,b);
Metoda:
1. Podziel b przez a; Przyjmij b=qa+r, r<a.
2. while r≠0 do
b:=a; a:=r;
podziel b przez a; przyjmij b=qa+r, r<a.
3. NWD(a,b):=a.
Rozszerzony algorytm Euklidesa
W algorytmie tym używany jest symbol [x], oznaczający największą liczbę całkowitą nie większą od x.
Wejście: a,b∈N; a≥b;
Wyjście: d=NWD(a,b), a także liczby całkowite x, y, spełniające równość ax+by=d;
Metoda:
if b=0 then
d:=0; x:=1; y:=0;
zwróć (d,x,y);
x2:=1; x1:=0; y2:=0; y1:=1;
while b>0 do
q:=[a|b];
r:=a-qb;
x:= x2 - q x1;
y:=y2 - qy1;
a:=b; b:=r; x2:= x1; x1:=x; y2:= y1; y1:=y;
d:=a; x:= x2; y:= y2
zwróć (d,x,y).
Przykład:
a=4864
b=3458
NWD(a,b)=NWD(4864, 3458)=38
Wg rozszerzonego algorytmu Euklidesa:
NWD(a,b) = 4864*32+3458*(-45) = 38
Chińskie twierdzenie o resztach
Jeśli liczby n1, n2, ... , nk są parami względnie pierwsze to układ kongruencji
x ≡ a1 (mod n1)
x ≡ a2 (mod n2)
...
x ≡ ak (mod nk)
ma dokładnie jedno rozwiązanie modulo n = n1 n2 ... nk.
Algorytm Gaussa.
Wejście: Układ kongruencji zdefiniowany w powyższym twierdzeniu.
Wyjście: Wartość x.
Metoda:
for i=1 to k do
Si := n/ni ,
Ti := Si-1 mod ni.
k
x := ∑ ai Si Ti mod n.
i=1
Przykłady:
Stosując algorytm Gaussa dla układu kongruencji
x ≡ 3 (mod 7)
x ≡ 7 (mod 13)
otrzymujemy:
S1 = (7*13)/7 = 13 => T1 = 13 -1 mod 7 =6
S2 = (7*13)/13 = 7 => T2 = 7 -1 mod 13 = 2
Na tej podstawie x = (a1 S1 T1 +a2 S2 T2 ) mod n1n2.
Zatem:
x = (3*13*6 + 7*7*2) mod 91 = 332 mod 91 = 59
Obliczamy 2958403 mod 55. W tym celu skorzystamy z chińskiego twierdzenia o resztach i twierdzeniu Eulera-Fermata.
55=5*11, zatem można zapisać układ równań
x ≡ 2958403 (mod 5)
x ≡ 2958403 (mod 11)
ϕ(5)=4 => 958403 = 10*95840 + 3
ϕ(11)=10 => 958403 = 4*239600 + 3
x ≡ 2958403 ≡ 2 4*239600 + 3 ≡ 2ϕ(5)*239600 + 3 ≡ 2ϕ(5)*239600 * 23 ≡ 23 ≡ 23 (mod 5)
23 = 3 (mod 5)
x ≡ 2958403 ≡ 2 10*95840 + 3 ≡ 2ϕ(11)*239600 + 3 ≡ 2ϕ(11)*239600 * 23 ≡ 23 ≡ 23 (mod 11)
23 = 8 (mod 11)
rozwiązaniem jest x=8.
Potęgowanie dyskretne
Mając dany moduł n i potęgę a rozwiążemy problem obliczania dla danego x reszty xa mod n. Metoda opisana poniżej jest potęgowaniem poprzez podnoszenie do kwadratu i mnożenie.
Istnieje algorytm wielomianowy A, który dla danych wejściowych x, a, n daje w wyniku xa mod n.
Algorytm:
Wejście: x, a, n∈N.
Wyjście: w = xa mod n.
Metoda:
Przedstaw liczbę a w postaci dwójkowej: a:= (amam-1, ..., a0)2.
w:=1;
for i:=m downto 0 do
w:=w2mod n;
if ai =1 then w:=wx mod n.
Pierwiastki kwadratowe
Resztę kwadratową modulo n nazywamy takie x∈Zn, że x ≡ y2(mod n) dla pewnego y∈Zn. Jeśli x∈Zn nie jest resztą kwadratową, to mówimy, że jest nieresztą kwadratową modulo n. Przyjmijmy, że p jest nieparzystą liczbą pierwszą. W Zp dokładnie (p-1)/2 elementów jest resztami kwadratowymi i tyleż samo nieresztami kwadratowymi. Niech QRn (odpowiednio QNRn) będzie zbiorem wszystkich reszt (odpowiednio niereszt) kwadratowych, np. QR7={1, 4, 2}, natomiast QNR7={3, 5, 6}.
1.7.1. Symbol Legendre'a
Niech x∈Z i niech p>2 będzie liczbą pierwszą. Wówczas symbol Legendre'a (x|p) dla modułu p definiujemy następująco:
0 jeśli p|x
(x | p) = 1 jeśli x∈QRp
-1 jeśli x∈QNRp
Symbol Legendre'a służy więc do identyfikacji reszt i niereszt kwadratowych.
Własności symbolu Legendre'a:
(a | p) = (a mod p | p),
(ab | p) = (a | p) (b | p),
jeśli p | b, to (b2 | p) =1
jeśli a | p, to (a | p ) ≡ a (p-1)/2 (mod p),
(1 | p) =1 i (1 | -p)=(-1) (p-1)/2
1 jeśli p ≡ ±1(mod 8)
(2 | p) = (-1) (p^2-1)/8 =
-1 jeśli p ≡ ±3(mod 8)
Prawo wzajemności reszt kwadratowych.
Niech p, q będą dwiema nieparzystymi liczbami pierwszymi. Wówczas
-(p |q) jeśli p ≡ ±1 (mod 8)
(q | p) = (-1)(p-1)(q-1) / 4 (p | q) =
(p |q) jeśli p ≡ ±3 (mod 8)
Przykłady:
p=13
QR13 = {1, 3, 4, 9, 10, 12}
QNR13 = {2, 5, 6, 7, 8, 11}
1. Sprawdżmy, czy np. 4 rzeczywiście powinno znajdować się w zbiorze QR13
4 ≡ y2 (mod 13) => y=11 lub y=2
2. Obliczmy symbol Legendre'a:
(4 | 13) = (2 | 13)(2 | 13) = (2 | 13)2 = -12 = 1
(3 | 13) = (13 | 3)(-1) 6 = (13 | 3) = (13 mod 3 | 3) = (1 | 3) = 1 (druga iteracja wykorzystuje Tw. z p-tu 1.7.2.
Symbol Jacobiego
Definicję symbolu Legendre'a można rozszerzyć na wszystkie nieparzyste liczby naturalne m i wszystkie x∈Z. Niech m = p1e1 p2e2...prer będzie rozkładem nieparzystej liczby m>3 na czynniki pierwsze. Wówczas symbol Jacobiego (x | m) definiujemy następująco:
(x | m) = (x | p1)e1(x | p2)e2... (x | pr)er
Należy zauważyć, że jeżeli:
m jest liczbą pierwszą, to symbol Jacobiego jest symbolem Legendre'a,
(a | m) = 1, przy czym m jest liczbą złożoną, to m nie musi być resztą kwadratową. Np. (11 | 21) = (3 | 2)(7 | 4) = (1 | 2)(3 | 4) = (4 | 3) = (1 | 3) =1, lecz nie istnieje liczba x, taka, że x2 ≡ 11 (mod 21).
Właściwości Symbolu Jacobiego:
Niech m>3 i n>3 będą nieparzystymi liczbami całkowitymi, a ponadto niech a,b∈Z.
( a | m) = 0, 1, -1. Ponadto (a | m) = 0 gdy NWD(a, m) ≠ 1.
(ab | m) = (a | m)(b | m). Stąd jeśli a∈Z*n , to (a2 | m)=1.
(a | mn) = (a | m)(a | n).
Jeśli a ≡ b(mod m), to (a | m) = (b | m).
(1 | m) =1.
(-1| m) = (-1)(m-1)/2. Zatem (-1 | m) =1, jeśli n ≡ 1(mod ) i (-1| m) = -1, jeśli n ≡ 3(mod 4)
(2 | m) = (-1)(m^2-1)/8. Stąd (2 | m) =1, jeśli n ≡ 1 lub 7 (mod 8) i (2 | m) = -1, jeśli n ≡ 3 lub 5 (mod 8).
(m | n) = (-1) (m-1)(n-1)/4 (n | m).
Przykład :
Z*21= {1, 2, ..., 20};
y |
2 |
4 |
5 |
17 |
19 |
y 2 mod 21 |
4 |
16 |
4 |
16 |
4 |
(y | 3) |
-1 |
1 |
-1 |
-1 |
1 |
(y | 7) |
1 |
1 |
-1 |
-1 |
-1 |
(y | 21) |
-1 |
1 |
1 |
1 |
-1 |
W przeciwieństwie do symbolu Legendre'a symbol Jacobiego (x | m) nie pozwala na stwierdzenie czy x jest, czy nie jest resztą kwadratową modulo m. Jest prawdą, że jeśli x∈QRm, to (x | m) =1, Jednakże (x | m) =1 nie implikuje x∈QRm.
Algorytm obliczania symbolu Jacobiego i Legendre'a
(a | n) = Jacobi (a,n).
Wejście: nieparzysta liczba całkowita n>3 i liczba naturalna a, 0≤a≤n-1.
Wyjście: symbol Jacobiego (a|n), symbol Legendre'a gdy n jest pierwsza.
Metoda:
if a=0 then Jacobi(a,n):=0.
if a=1 then Jacobi(a,n):=1.
Zapisz a w postaci a=2ea1, gdzie a1 jest liczbą nieparzystą.
if e jest parzysta then t:=1 else
if n ≡ 1 lub 7(mod 8) then t:=1;
if n ≡ 3 lub 5(mod 8) then t:= -1.
if n ≡ 3(mod 4) i a ≡ 3(mod 4) then t:= -t;
n1:=n mod a1.
Jacobi(a,n):=t×Jacobi(a1,n1).
Logarytmy dyskretne
Liczbę g∈Zn nazywamy elementem pierwotnym modulo n, jeśli Zn*={g, g2 mod n, ... , gϕ(n) mod n}. Jeśli istnieje element pierwotny modulo n, to grupa Zn* jest cykliczna i vice versa.
Niech p będzie liczbą pierwszą, a g - elementem pierwotnym modulo p. Zatem Zp*={g0 mod n, g1 mod n, ... , gp^ -2 mod n}. Dla każdego x∈ Zp* definiuje się logarytm dyskretny liczby x przy podstawie g jako taką liczbę m ≤ p - 2, dla której x ≡ gm(mod p). Jeśli m jest logarytmem dyskretnym określonym w powyższy sposób, to piszemy m=log p,g x. W poniższej tabeli przedstawiono wartości funkcji log13,2 x.
x |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
log13,2 x |
0 |
1 |
4 |
2 |
9 |
5 |
11 |
3 |
8 |
10 |
7 |
6 |
Łatwo z powyższej tabelki zauważyć, że QR13 przyjmuje wartości parzyste. QR13={1, 3, 4, 9, 10, 12}.
Związek pomiędzy resztą kwadratową a logarytmem dyskretnym
Niech p będzie nieparzystą liczbą pierwszą, a g - elementem pierwotnym modulo p. Wówczas dla każdego x∈Zp
x∈QRp log p,g x jest liczbą parzystą.
Istotnym problemem jest zagadnienie obliczania wartości logarytmów dyskretnych. Nie jest znany algorytm wielomianowy rozwiązujący ten problem. Jednakże dla p∈P, w przypadkum gdy znany jest rozkład liczby p-1 na czynniki pierwsze, istnieje algorytm wielomianowy logarytmowania dyskretnego. W tym przypadku wykorzystuje się algorytm Pohlinga-Hellmana.
Twierdzenie Pohlinga-Hellmana.
Dla dowolnego wielomianu w(x) istnieje taki algorytm A, że jeśli:
p jest liczbą pierwszą spełniającą warunek, że wszystkie czynniki pierwsze p1 p2 ...pr liczby p-1 są nie większe od w(|p|),
q jest elementem pierwotnym (generatorem) grupy Zp,
y∈ Zp,
to A(p, g, p1, p2 ...pr, y)=log p, g y. Ponadto złożoność czasowa logarytmu A jest wielomianowa w funkcji |p|.
Algorytmy testowania liczb pierwszych
Liczby pierwsze odgrywają szczególną rolę w kryptografii. Ze względu na to, iż liczb pierwszych jest nieskończenie wiele, użyteczne są algorytmy badania, czy dana liczba jest pierwsza. W dalszym ciągu zostaną omówione niektóre z nich.
Sito Eratostenesa
Technikę zwaną sitem Eratostenesa stosuje się wówczas. Gdy chcemy wyznaczyć wszystkie liczby pierwsze nie większe od danej liczby naturalnej n. Polega to na wypisaniu kolejnych liczb naturalnych od 2 do n. Pierwszą wypisaną liczbą jest 2. Pozostawiamy ją i wykreślamy wszystkie dalsze liczby podzielne przez 2, gdyż są one liczbami złożonymi. Z pozostałych najmniejszą jest 3. Jest to liczba pierwsza, zatem pozostawiamy ją i wykreślamy wszystkie liczby większe od 3 i podzielne przez 3. W ogólności po wykonaniu r-tego kroku otrzymujemy ciąg 2,3,5,7,11,13,...,p,...,n, gdzie p jest r-tą liczbą pierwszą. Można wykazać, że proces przedstawiony powyżej wystarczy wykonać do r-tego kroku, w którym p jest liczbą pierwszą spełniającą warunek p≤√n.
Mechanizmy kryptograficzne - podstawy matematyczne
1
1