10.19 Reszty kwadratowe w
Transkrypt
10.19 Reszty kwadratowe w
Kryptografia z elementami kryptografii kwantowej Ryszard Tanaś http://zon8.physd.amu.edu.pl/~tanas Wykład 6a Spis treści 10 Trochę matematyki (c.d.) 10.19 Reszty kwadratowe w Z∗p . . . . . . . . 10.20 Symbol Legendre’a . . . . . . . . . . . 10.21 Własności symbolu Legendre’a: . . . . 10.22 Prawo wzajemności . . . . . . . . . . 10.23 Pierwiastki kwadratowe modulo p . . . 10.24 Reszty kwadratowe w Z∗n . . . . . . . 10.25 Symbol Jacobiego . . . . . . . . . . . 10.26 Pierwiastki kwadratowe modulo n . . . 10.27 Logarytm dyskretny . . . . . . . . . . 10.28 PARI/GP — teoria liczb na komputerze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 5 6 7 9 10 11 13 14 16 10 Trochę matematyki (c.d.) 10.19 Reszty kwadratowe w Z∗p • Oznaczmy przez Zp = {0, 1, 2, . . . , p − 1} zbiór reszt modulo p, gdzie p > 2 jest nieparzystą liczbą pierwszą; np. Z11 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} • Przez Z∗p będziemy oznaczali zbiór niezerowych elementów zbioru Zp , a więc np. Z∗11 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} • W zbiorze Z∗p szukamy takich elementów, które są kwadratami innych elementów, tzn. spełniona jest kongruencja x2 ≡ a (mod p), dla {x, a} ∈ Z∗p . Liczby a, które są kwadratami nazywamy resztami kwadratowymi modulo p, zaś pozostałe elementy nazywamy nieresztami. 10 Trochę matematyki (c.d.) 10.19 Reszty kwadratowe w Z∗p • Oznaczmy przez Zp = {0, 1, 2, . . . , p − 1} zbiór reszt modulo p, gdzie p > 2 jest nieparzystą liczbą pierwszą; np. Z11 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} • Przez Z∗p będziemy oznaczali zbiór niezerowych elementów zbioru Zp , a więc np. Z∗11 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} • W zbiorze Z∗p szukamy takich elementów, które są kwadratami innych elementów, tzn. spełniona jest kongruencja x2 ≡ a (mod p), dla {x, a} ∈ Z∗p . Liczby a, które są kwadratami nazywamy resztami kwadratowymi modulo p, zaś pozostałe elementy nazywamy nieresztami. 10 Trochę matematyki (c.d.) 10.19 Reszty kwadratowe w Z∗p • Oznaczmy przez Zp = {0, 1, 2, . . . , p − 1} zbiór reszt modulo p, gdzie p > 2 jest nieparzystą liczbą pierwszą; np. Z11 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} • Przez Z∗p będziemy oznaczali zbiór niezerowych elementów zbioru Zp , a więc np. Z∗11 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} • W zbiorze Z∗p szukamy takich elementów, które są kwadratami innych elementów, tzn. spełniona jest kongruencja x2 ≡ a (mod p), dla {x, a} ∈ Z∗p . Liczby a, które są kwadratami nazywamy resztami kwadratowymi modulo p, zaś pozostałe elementy nazywamy nieresztami. 10 Trochę matematyki (c.d.) 10.19 Reszty kwadratowe w Z∗p • Oznaczmy przez Zp = {0, 1, 2, . . . , p − 1} zbiór reszt modulo p, gdzie p > 2 jest nieparzystą liczbą pierwszą; np. Z11 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} • Przez Z∗p będziemy oznaczali zbiór niezerowych elementów zbioru Zp , a więc np. Z∗11 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} • W zbiorze Z∗p szukamy takich elementów, które są kwadratami innych elementów, tzn. spełniona jest kongruencja x2 ≡ a (mod p), dla {x, a} ∈ Z∗p . Liczby a, które są kwadratami nazywamy resztami kwadratowymi modulo p, zaś pozostałe elementy nazywamy nieresztami. Przykład: Weźmy Z∗11 i policzmy x2 (mod 11) dla wszystkich x, mamy wtedy x 1 2 3 4 5 6 7 8 9 10 a = x2 (mod 11) 1 4 9 5 3 3 5 9 4 1 Przykład: Weźmy Z∗11 i policzmy x2 (mod 11) dla wszystkich x, mamy wtedy x 1 2 3 4 5 6 7 8 9 10 a = x2 (mod 11) 1 4 9 5 3 3 5 9 4 1 Resztami kwadratowymi w Z∗11 są więc liczby {1, 3, 4, 5, 9}, a pozostale liczby {2, 6, 7, 8, 10} są nieresztami 10.20 Symbol Legendre’a Niech a będzie liczbą całkowitą zaś p > 2 liczbą pierwszą; symbol Legendre’a definiujemy 0, jeśli p|a a = 1, jeśli a jest resztą kwadratową modulo p p −1, jeśli a jest nieresztą modulo p 10.20 Symbol Legendre’a Niech a będzie liczbą całkowitą zaś p > 2 liczbą pierwszą; symbol Legendre’a definiujemy 0, jeśli p|a a = 1, jeśli a jest resztą kwadratową modulo p p −1, jeśli a jest nieresztą modulo p Twierdzenie: p−1 a =a 2 p (mod p) 10.21 Własności symbolu Legendre’a: (1) a p zależy tylko od a modulo p 10.21 Własności symbolu Legendre’a: (1) (2) a zależy tylko od a modulo p p ab a b = p p p 10.21 Własności symbolu Legendre’a: (1) (2) (3) a zależy tylko od a modulo p p ab a b = p p p ! ab2 a , jeśli N W D(b, p) = 1 = p p 10.21 Własności symbolu Legendre’a: (1) (2) (3) (4) a zależy tylko od a modulo p p ab a b = p p p ! ab2 a , jeśli N W D(b, p) = 1 = p p p−1 1 −1 = 1 oraz = (−1) 2 p p Twierdzenie: 1, p2 −1 2 = (−1) 8 = −1, p jeśli p ≡ ±1 (mod 8) jeśli p ≡ ±3 (mod 8) Twierdzenie: 1, p2 −1 2 = (−1) 8 = −1, p jeśli p ≡ ±1 (mod 8) jeśli p ≡ ±3 (mod 8) 10.22 Prawo wzajemności Niech p i q będą dwiema nieparzystymi liczbami pierwszymi. Wtedy p−1 q−1 q p = (−1) 2 2 p q − p , jeśli p ≡ q ≡ 3 (mod 4) q = p , w przeciwnym przypadku q Przykład: 91 167 7 · 13 167 7 13 = = 167 167 7−1 167−1 13−1 167−1 167 167 2 2 2 2 = (−1) (−1) 7 13 167 167 6 11 =− =− 7 13 7 13 2 3 11 3 11 =− =− 7 7 13 7 13 3−1 7−1 11−1 13−1 7 13 − (−1) 2 2 (−1) 2 2 3 11 2 1 = = 1 · (−1) = −1 3 11 10.23 Pierwiastki kwadratowe modulo p • Prawo wzajemności pozwala szybko stwierdzić czy a jest resztą kwadratową modulo p, a więc mówi, że istnieje rozwiązanie kongruencji x2 ≡ a (mod p) , chociaż nie daje wskazówek jak takie rozwiązanie znaleźć. • Nie jest znany efektywny deterministyczny algorytm obliczania pierwiastków kwadratowych w Z∗p . Istnieje natomiast efektywny algorytm probabilistyczny dla obliczania takich pierwiastków jeśli p jest liczbą pierwszą. 10.23 Pierwiastki kwadratowe modulo p • Prawo wzajemności pozwala szybko stwierdzić czy a jest resztą kwadratową modulo p, a więc mówi, że istnieje rozwiązanie kongruencji x2 ≡ a (mod p) , chociaż nie daje wskazówek jak takie rozwiązanie znaleźć. • Nie jest znany efektywny deterministyczny algorytm obliczania pierwiastków kwadratowych w Z∗p . Istnieje natomiast efektywny algorytm probabilistyczny dla obliczania takich pierwiastków jeśli p jest liczbą pierwszą. 10.23 Pierwiastki kwadratowe modulo p • Prawo wzajemności pozwala szybko stwierdzić czy a jest resztą kwadratową modulo p, a więc mówi, że istnieje rozwiązanie kongruencji x2 ≡ a (mod p) , chociaż nie daje wskazówek jak takie rozwiązanie znaleźć. • Nie jest znany efektywny deterministyczny algorytm obliczania pierwiastków kwadratowych w Z∗p . Istnieje natomiast efektywny algorytm probabilistyczny dla obliczania takich pierwiastków jeśli p jest liczbą pierwszą. 10.24 Reszty kwadratowe w Z∗n • Oznaczmy przez Zn = {0, 1, 2, . . . , n − 1} zbiór reszt modulo n, gdzie n jest dodatnią liczbą całkowitą; np. Z15 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14} • Przez Z∗n będziemy oznaczali podzbiór tych elementów zbioru Zn , które są względnie pierwsze z n, a więc np. Z∗15 = {1, 2, 4, 7, 8, 11, 13, 14}. Liczba elementów zbioru Z∗n jest równa wartości funkcji Eulera φ(n). • W zbiorze Z∗n szukamy takich elementów, które są kwadratami innych elementów, tzn. spełniona jest kongruencja x2 ≡ a (mod n), dla {x, a} ∈ Z∗n . 10.24 Reszty kwadratowe w Z∗n • Oznaczmy przez Zn = {0, 1, 2, . . . , n − 1} zbiór reszt modulo n, gdzie n jest dodatnią liczbą całkowitą; np. Z15 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14} • Przez Z∗n będziemy oznaczali podzbiór tych elementów zbioru Zn , które są względnie pierwsze z n, a więc np. Z∗15 = {1, 2, 4, 7, 8, 11, 13, 14}. Liczba elementów zbioru Z∗n jest równa wartości funkcji Eulera φ(n). • W zbiorze Z∗n szukamy takich elementów, które są kwadratami innych elementów, tzn. spełniona jest kongruencja x2 ≡ a (mod n), dla {x, a} ∈ Z∗n . 10.24 Reszty kwadratowe w Z∗n • Oznaczmy przez Zn = {0, 1, 2, . . . , n − 1} zbiór reszt modulo n, gdzie n jest dodatnią liczbą całkowitą; np. Z15 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14} • Przez Z∗n będziemy oznaczali podzbiór tych elementów zbioru Zn , które są względnie pierwsze z n, a więc np. Z∗15 = {1, 2, 4, 7, 8, 11, 13, 14}. Liczba elementów zbioru Z∗n jest równa wartości funkcji Eulera φ(n). • W zbiorze Z∗n szukamy takich elementów, które są kwadratami innych elementów, tzn. spełniona jest kongruencja x2 ≡ a (mod n), dla {x, a} ∈ Z∗n . 10.24 Reszty kwadratowe w Z∗n • Oznaczmy przez Zn = {0, 1, 2, . . . , n − 1} zbiór reszt modulo n, gdzie n jest dodatnią liczbą całkowitą; np. Z15 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14} • Przez Z∗n będziemy oznaczali podzbiór tych elementów zbioru Zn , które są względnie pierwsze z n, a więc np. Z∗15 = {1, 2, 4, 7, 8, 11, 13, 14}. Liczba elementów zbioru Z∗n jest równa wartości funkcji Eulera φ(n). • W zbiorze Z∗n szukamy takich elementów, które są kwadratami innych elementów, tzn. spełniona jest kongruencja x2 ≡ a (mod n), dla {x, a} ∈ Z∗n . 10.25 Symbol Jacobiego Niech a będzie liczbą całkowitą i niech n będzie dowolną dodatnią liczbą αr 1 nieparzystą. Niech n = pα · . . . · p r będzie rozkładem liczby n na 1 czynniki pierwsze. Wtedy definiujemy symbol Jacobiego (uogólnienie symbolu Legendre’a) jako iloczyn symboli Legendre’a dla dzielników pierwszych n α r α 1 a a a · ... · = n p1 pr 10.25 Symbol Jacobiego Niech a będzie liczbą całkowitą i niech n będzie dowolną dodatnią liczbą αr 1 nieparzystą. Niech n = pα · . . . · p r będzie rozkładem liczby n na 1 czynniki pierwsze. Wtedy definiujemy symbol Jacobiego (uogólnienie symbolu Legendre’a) jako iloczyn symboli Legendre’a dla dzielników pierwszych n α r α 1 a a a · ... · = n p1 pr Twierdzenie: Dla dowolnej dodatniej liczby nieparzystej n mamy n2 −1 2 = (−1) 8 n Twierdzenie: Dla dowolnych dodatnich liczb nieparzystych m i n mamy m n = (−1) m−1 n−1 2 2 n m Twierdzenie: Dla dowolnych dodatnich liczb nieparzystych m i n mamy m n = (−1) m−1 n−1 2 2 n m Uwaga: Jeśli liczba a ∈ Z∗n jest resztą kwadratową to na = 1. Jeśli symbol Jacobiego na = 1 dla liczby złożonej n to a nie musi być resztą kwadratową! 10.26 Pierwiastki kwadratowe modulo n • Jeśli n = pq jest iloczynem dwóch dużych, różnych liczb pierwszych, to uważa się, że znajdowanie pierwiastków kwadratowych w Z∗n należy do problemów trudnych obliczeniowo! • Trudność ta jest równoważna trudności z faktoryzacją liczby n. (Faktoryzując n znajdujemy liczby pierwsze p i q, znajdujemy pierwiastki kwadratowe w Z∗p oraz Z∗q , a następnie korzystając z chińskiego twierdzenia o resztach znajdujemy pierwiastki w Z∗n .) 10.26 Pierwiastki kwadratowe modulo n • Jeśli n = pq jest iloczynem dwóch dużych, różnych liczb pierwszych, to uważa się, że znajdowanie pierwiastków kwadratowych w Z∗n należy do problemów trudnych obliczeniowo! • Trudność ta jest równoważna trudności z faktoryzacją liczby n. (Faktoryzując n znajdujemy liczby pierwsze p i q, znajdujemy pierwiastki kwadratowe w Z∗p oraz Z∗q , a następnie korzystając z chińskiego twierdzenia o resztach znajdujemy pierwiastki w Z∗n .) 10.26 Pierwiastki kwadratowe modulo n • Jeśli n = pq jest iloczynem dwóch dużych, różnych liczb pierwszych, to uważa się, że znajdowanie pierwiastków kwadratowych w Z∗n należy do problemów trudnych obliczeniowo! • Trudność ta jest równoważna trudności z faktoryzacją liczby n. (Faktoryzując n znajdujemy liczby pierwsze p i q, znajdujemy pierwiastki kwadratowe w Z∗p oraz Z∗q , a następnie korzystając z chińskiego twierdzenia o resztach znajdujemy pierwiastki w Z∗n .) 10.27 Logarytm dyskretny • Niech p będzie liczbą pierwszą, przez Z∗p oznaczamy zbiór liczb {1, . . . , p − 1} i niech g będzie generatorem Z∗p , tzn. takim elementem, że dla każdej liczby a ∈ Z∗p istnieje takie i, że a ≡ g i (mod p) (wszystkie elementy mogą być wygenerowane z g). • Problem logarytmu dyskretnego polega na znalezieniu dla danej liczby 0 < b < p takiej liczby a, że g a ≡ b (mod p). • Problem znajdowania logarytmu dyskretnego jest problemem trudnym obliczeniowo! 10.27 Logarytm dyskretny • Niech p będzie liczbą pierwszą, przez Z∗p oznaczamy zbiór liczb {1, . . . , p − 1} i niech g będzie generatorem Z∗p , tzn. takim elementem, że dla każdej liczby a ∈ Z∗p istnieje takie i, że a ≡ g i (mod p) (wszystkie elementy mogą być wygenerowane z g). • Problem logarytmu dyskretnego polega na znalezieniu dla danej liczby 0 < b < p takiej liczby a, że g a ≡ b (mod p). • Problem znajdowania logarytmu dyskretnego jest problemem trudnym obliczeniowo! 10.27 Logarytm dyskretny • Niech p będzie liczbą pierwszą, przez Z∗p oznaczamy zbiór liczb {1, . . . , p − 1} i niech g będzie generatorem Z∗p , tzn. takim elementem, że dla każdej liczby a ∈ Z∗p istnieje takie i, że a ≡ g i (mod p) (wszystkie elementy mogą być wygenerowane z g). • Problem logarytmu dyskretnego polega na znalezieniu dla danej liczby 0 < b < p takiej liczby a, że g a ≡ b (mod p). • Problem znajdowania logarytmu dyskretnego jest problemem trudnym obliczeniowo! 10.27 Logarytm dyskretny • Niech p będzie liczbą pierwszą, przez Z∗p oznaczamy zbiór liczb {1, . . . , p − 1} i niech g będzie generatorem Z∗p , tzn. takim elementem, że dla każdej liczby a ∈ Z∗p istnieje takie i, że a ≡ g i (mod p) (wszystkie elementy mogą być wygenerowane z g). • Problem logarytmu dyskretnego polega na znalezieniu dla danej liczby 0 < b < p takiej liczby a, że g a ≡ b (mod p). • Problem znajdowania logarytmu dyskretnego jest problemem trudnym obliczeniowo! Przykład: Weźmy Z∗19 , czyli zbiór liczb {1, . . . , 18} oraz g = 2. Niech b = 2a (mod 19), mamy wtedy a 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 b 2 4 8 16 13 7 14 9 18 17 15 11 3 6 12 5 10 1 Przykład: Weźmy Z∗19 , czyli zbiór liczb {1, . . . , 18} oraz g = 2. Niech b = 2a (mod 19), mamy wtedy a 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 b 2 4 8 16 13 7 14 9 18 17 15 11 3 6 12 5 10 1 Tak więc w Z∗19 , np. log2 13 = 5 25 ≡ 13 (mod 19) 10.28 PARI/GP — teoria liczb na komputerze GP/PARI CALCULATOR Version 2.1.6 (released) i386 running linux 32-bit version (readline v4.3 enabled, extended help available) Copyright (C) 2002 The PARI Group PARI/GP is free software, covered by the GNU General Public License, and comes WITHOUT ANY WARRANTY WHATSOEVER. Type ? for help, \q to quit. Type ?12 for how to get moral (and possibly technical) support. realprecision = 28 significant digits seriesprecision = 16 significant terms format = g0.28 parisize = 4000000, primelimit = 500000 Dzielenie z resztą ? divrem(841,160) %1 = [5, 41]~ ? divrem(2987634211432123123,8765392) %2 = [340844335476, 5476531]~ Algorytm Euklidesa — N W D(a, b) ? gcd(841,160) %2 = 1 ? gcd(2987634211432123123,8765392) %3 = 1 ? gcd(739834587231984763212876546,497563772132052) %4 = 6 Rozszerzony algorytm Euklidesa ? bezout(841,160) %4 = [-39, 205, 1] ? bezout(2987634211432123123,8765392) %5 = [2987931, -1018419356145006986, 1] Odwrotność modulo n ? Mod(160,841)^(-1) %6 = Mod(205, 841) ? lift(Mod(160,841)^(-1)) %7 = 205 ? Mod(8765392,2987634211432123123)^(-1) %8 = Mod(1969214855287116137,2987634211432123123) ? 2987634211432123123-1018419356145006986 %9 = 1969214855287116137 Małe twierdzenie Fermata ? isprime(1231) %10 = 1 ? gcd(1231,5871) %11 = 1 ? Mod(5871^1230, 1231) %12 = Mod(1, 1231) ? Mod(5871,1231)^1230 %13 = Mod(1, 1231) ? Mod(40547201659, 85115991299)^85115991298 %14 = Mod(1, 85115991299) ? Mod(461730729350412, 2461654953439061)^2461654953439060 %15 = Mod(1, 2461654953439061) Chińskie twierdzenie o resztach ? a=Mod(1,11) %16 = Mod(1, 11) ? b=Mod(2,12) %17 = Mod(2, 12) ? c=Mod(3,13) %18 = Mod(3, 13) ? d=chinese(a,b) %19 = Mod(122, 132) ? chinese(c,d) %20 = Mod(1706, 1716) Funkcja Eulera ? eulerphi(841) %21 = 812 ? factorint(841) %22 = [29 2] ? eulerphi(1231) %23 = 1230 ? isprime(1231) %24 = 1 ? eulerphi(1000) %25 = 400 ? eulerphi(1200) %26 = 320 Potęgowanie modulo n ? lift(Mod(7,1234)^698) %27 = 287 ? Mod(461730729350412,2461654953439061)^2461654953439060 %28 = Mod(1, 2461654953439061) Liczby pierwsze ? primes(10) %31 = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] ? prime(1000) %32 = 7919 ? nextprime(10^30) %34 = 1000000000000000000000000000057 ? nextprime(random(10^30)) %35 = 425170039833680733833237536681 ? isprime(%35) %36 = 1 Symbol Jacobiego ? kronecker(91,167) %37 = -1 ? kronecker(7,167) %38 = 1 ? for(a=1,167,if(Mod(a,167)^2==7,print1(a, " "))) 72 95 ? kronecker(13,167) %39 = -1 ? kronecker(6,7) %40 = -1 ? kronecker(11,13) %41 = -1 ? kronecker(1298761665416551551,978698532176519876166511871) %42 = 1 Logarytm dyskretny ? znprimroot(19) %43 = Mod(2, 19) ? znorder(Mod(2,19)) %44 = 18 ? znlog(13,Mod(2,19)) %45 = 5 ? znlog(15,Mod(2,19)) %46 = 11 ? znprimroot(966099377) %47 = Mod(3, 966099377) ? znlog(124332,Mod(3, 966099377) %48 = 120589994 ? Mod(3, 966099377)^120589994 %49 = Mod(124332, 966099377) RSA ? p=1123;q=1237;n=p*q %50 = 1389151 ? phin=eulerphi(n) %51 = 1386792 ? e=834781 %52 = 834781 ? gcd(e,phin) %53 = 1 ? d=lift(Mod(e,phin)^(-1)) %54 = 1087477 ? m=983415 %55 = 983415 ? c=lift(Mod(m,n)^e) %56 = 190498 ? lift(Mod(c,n)^d) %57 = 983415 ? p=nextprime(random(10^25)) %60 = 6394410543977819029567513 ? q=nextprime(random(10^24)) %61 = 574229193973116022705411 ? n=p*q %62 = 3671857212601577387349834975533584930459534912843 ? phin=(p-1)*(q-1) %63 = 3671857212601577387349828006893846979524482639920 ? e=random(10^10) %64 = 6534579775 ? while(gcd(e,phin)!=1,e=e+1) ? e %65 = 6534579779 ? d=lift(Mod(e,phin)^(-1)) %66 = 1069086500747478961348196600845385395334981162219 ? m=random(10^30) %67 = 446763233106745131823069978264 ? c=lift(Mod(m,n)^e) %68 = 3660713787402446328285407380637449653485548656400 ? lift(Mod(c,n)^d) %69 = 446763233106745131823069978264