Mathematica & RSA7 暗号化の方式 非対称鍵 RSA...

36
1 Mathematica & RSA Hiroshi Toyoizumi WASEDA Univ. [email protected]

Transcript of Mathematica & RSA7 暗号化の方式 非対称鍵 RSA...

Page 1: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

1

Mathematica & RSA

Hiroshi ToyoizumiWASEDA Univ.

[email protected]

Page 2: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

2

今日のテーマ

Mathematicaを使って、公開鍵暗号方式による暗号化をやってみよう。

Mathematicaを使って、公開鍵暗号方式による暗号をクラックしてみよう。

Page 3: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

3

暗号技術によるセキュリティ強化

暗号化:知られたくない重要な情報は暗号化する。

認証:自分が誰かを証明する。

公開鍵暗号系PKI:Public Key Infrustructure

Page 4: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

4

非対称暗号鍵方式(公開鍵暗号方式)

Page 5: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

5

実際の暗号通信

Page 6: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

6

公開かぎと電子署名

Page 7: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

7

暗号化の方式非対称鍵 RSA最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人の開発者のRonald Rivest氏、Adi Shamir氏、Leonald Adleman氏の頭文字を取って付けられた。米国RSAセキュリティ社が特許を持っていたが、2000年9月特許の期限切れを迎えた。暗号、電子署名、鍵配送の機能を持つ

DSAアメリカの電子署名標準アルゴリズム。電子署名のみの機能を持ち、暗号化の機能は持っていない

Diffie-HellmanWhitfield Diffie氏とMartin E. Hellman氏によって開発されたアルゴリズムで、鍵配送の機能のみ持っている。ちなみに「公開鍵暗号」は Diffie氏によって考案され、1976年に Hellman氏との共同論文「New Directions in Cryptography」で発表された。RSA社の3人は、この論文を読んで感嘆し、RSAの開発を始めた

Page 8: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

8

Mathematicaの整数論関数

Mod GCD FactorInteger Divisors Prime PrimeQ ExtendGCD EulerPhi

Page 9: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

9

CharacterCode

ToCharacterCode["string"] gives a list of theinteger codes corresponding to the charactersin a string.

In[1]:= ToCharacterCode["Everything is an expression."]Out[1]={69,118,101,114,121,116,104,105,110,103,32,105,1

15,32,97,110,32,101,120,112,114,101,115,115,105,111,110,46}

In[2]:= FromCharacterCode[%]Out[2]= Everything is an expression.

Page 10: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

10

Mod

Mod[m, n] givesthe remainder ondivision of m byn.

Page 11: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

11

GCD

GCDgives thegreatestcommondivisor oftheintegers

Page 12: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

12

FactorInteger[n]

FactorInteger[n]gives a list ofthe primefactors of theinteger n,together withtheir exponents.

Page 13: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

13

Divisors[n]

Divisors[n]gives a list ofthe integersthat divide n.

Page 14: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

14

Prime

Prime[n]gives the n-th primenumber.

Page 15: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

15

PrimeQ[expr]

PrimeQ[expr]yields True ifexpr is a primenumber, andyields Falseotherwise.n

Page 16: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

16

ExtendedGCD

The first element in the output from ExtendedGCD[n,m] is the greatest common divisor of the integers n andm.

In[1]:={g,{r,s}}=ExtendedGCD[n=45,m=36]Out[1]= {9,{1,-1}}In[2]:= GCD[45,36]Out[2]= 9

The second element is a pair of integers. The linearcombination of n and m with these as coefficients givesthe gcd.

In[3]:= nr+msOut[3]= 9

Page 17: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

17

互いに素な場合

These two numbers are relatively prime.In[4]:= {g, {r, s}} = ExtendedGCD[2^100 + 3, 3^50 + 8])Out[4]={1,{62013782892351778750374,-109502757290992473821761130785}}

Therefore this linear combination gives 1.In[5]:= (2^100 + 3) r + (3^50 + 8) sOut[5]= 1

Page 18: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

18

EulerPhi[n]

EulerPhi[n] gives the Euler totient function φ(n) . EulerPhi[n] gives the number of positive integers less than or

equal to n which are relatively prime to n.

Up to 10 there are four numbers relatively prime to 10. In[1]:= EulerPhi[10] Out[1]= 4 In[2]:= Select[Range[10],GCD[#1,10]==1&] Out[2]= {1,3,7,9}

Page 19: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

19

Eulerの定理

自然数nと整数aで、GCD(a,n)=1

のとき

a^φ(n) = 1 mod n

Page 20: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

20

Eulerの定理の例In[1]:=GCD[5, 17]Out[1]=1

In[2]:=EulerPhi[17]Out[2]=16

In[3]:=Mod[5^EulerPhi[17], 17]Out[3]=1In[5]:=Mod[10^EulerPhi[17], 17]Out[5]=1

Page 21: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

21

RSA暗号方式

2つの鍵(公開鍵・秘密鍵)をつかう。暗号文の解読が困難である。公開鍵から秘密鍵を推測することが困難である。

キーポイント:大きな数の因数分解が困難である。

Page 22: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

22

非対称暗号鍵方式(公開鍵暗号方式)

Page 23: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

23

公開鍵と秘密鍵の作り方(1)

e:一つ目の鍵二つ大きな素数を(p、q)を選ぶ。

p=5, q=17In[2]:=PrimeQ[5]Out[2]=TrueIn[3]:=PrimeQ[17]Out[3]=True

pとqの積nを計算する。 n = p q = 85

φ(n)=(p-1)(q-1)を計算する (p-1)(q-1) = 64

(p-1)(q-1)と互いに素な整数eをみつける e = 3

Page 24: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

24

公開鍵と秘密鍵の作り方(2)

d:二つ目の鍵e d = 1 mod (p-1)(q-1)となるようにdを選ぶ。 d=43と選ぶと e d = 3*43 = 129 = 64 *2 +1 = 1 mod 64

Page 25: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

25

dの選び方

e d = 1 mod (p-1)(q-1)となるdは以下のように選ぶことができる。

e d = 1- k (p-1)(q-1)e d +k (p-1)(q-1) = 1

これを満たすdはExtendedGCDによって求めることができる。

{1,{d,k}}=ExtendedGCD[e, (p-1)(q-1)] dには、(p-1)(q-1)を法とする不定性があるので、適当に、 (p-1)(q-1)のα倍を足して調整して、dを正に選ぶ。

Page 26: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

26

dの選び方の例

e = 3, (p-1)(q-1)=64のときIn[7]:={g, {d, k}} = ExtendedGCD[3, 64]Out[7]={1,{-21,1}}In[8]:=d + 64Out[8]=43

よって、dは43とすればよい

Page 27: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

27

暗号の通信の準備

Bobが公開暗号鍵として(e,n)を公開する。

AliceはBobの公開暗号鍵を入手する。

Page 28: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

28

Aliceの暗号文の作り方

Mを暗号にしたい文章とする。(但しM<n)Bobの公開鍵(e,n)を使い、暗号文Cを作る。

C = M^e mod n

例 (e,n) = (3, 85), M=77

In[1]:=Mod[77^3, 85]Out[1]=83

したがって、暗号文Cは83となる。

Page 29: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

29

Bobの暗号文の解読の仕方

Aliceから暗号文Cを受け取る自分だけが知っている秘密鍵dを使って、暗号文を解読する。

C^d = M mod n

Page 30: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

30

暗号文解読の例

例 (d,n) = (43, 85), C=83

In[1]:=Mod[83^43, 85]Out[1]=77

したがって、暗号化されたメッセージMは77であることがわかる。

Page 31: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

31

クラックの仕方

Bobの公開鍵(e,n)を手に入れる。nを因数分解して、p,qを推測する。p,qとeを使ってdを推測する。Aliceが作った暗号文を(d,n)を使って解読する。

Page 32: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

32

Exercise 1.

Check Euler’s Theorem by Mathematica.Make a list of the function

f(m)=Mod[a^(m),n] from m=1 to theEuler number of n, where a is anarbitrary number, n is a prime number.

Check when does f(m)=1 hold fordifferent values of a and n?

Page 33: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

33

Exercise 2. Encrypt your message

Set a particular phrase as your message.Convert your message into a sequence of integers M.Choose a pair of 2-digit prime numbers (p,q) and

derive the keys (d,e,n).Encrypt M into C by the key (e,n).Check if C can be decrypted by the key (d,n).Option: Ask your neighbors to decrypt C by disclosing

your public key (e,n).

Page 34: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

34

Exercise 3. Crack my message

Crack me!Public key: (e,n) = (937, 46127)

Encrypted message: {14942, 16840, 39519, 6259, 6259, 12812,33935, 2736, 6259, 30900, 39211, 32709, 4943, 39211, 34710, 4943,45747, 6259, 19266, 19461, 25615, 27469, 6259, 6259, 14942, 1494,39519, 6259, 7357, 12408, 39211, 6259, 40186, 2736, 10334, 6259,45747, 4943, 44980, 15131, 40186, 19991, 34710, 6259, 34710, 33935,30900, 37515, 6259, 42569, 4943, 37515, 37515, 12408, 41505, 4943,6259, 22680, 30900, 34710, 33935, 2736, 10334, 34710, 6259, 10334,37515, 30900, 39211, 41505, 6259, 34710, 33935, 4943, 6259, 24879,4943, 40186, 37515, 27469}

Guess my original message and my secret key.

Option: Answer my questions in the original message.

Page 35: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

35

Exercise 4 (Option). PerformanceEvaluation of Cracking

Use Timing[ ] function and estimate theCPU time required to crack RSA withgiven n.

Draw the graph (log-log plot?) of CPUtime with different n.

Discuss the possibility of cracking whenn is large.

Page 36: Mathematica & RSA7 暗号化の方式 非対称鍵 RSA 最も有名で最も広く使用されているアルゴリズム。アルゴリズムの名前は、3人 の開発者のRonald

36

Timing

Timing[expr] evaluates expr, and returns alist of time used, together with the resultobtained.

Timing gives the CPU time in seconds,multiplied by the symbol Second.Example:Here is the CPU time needed to compute a

large factorial number.In[11]:=Timing[10^10!]Out[11]={5.8 Second,Null}