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