10. ディジタル署名ベースのユーザ認証プロトコル( SSL のサーバ認証など) 明らかに(署名の)情報がもれている その情報を使って、悪意のある検証者はなりすましできるかもしれない 乱数 R PK, Sign(P’s SK, R) 証明者( P さん) 検証者 鍵ペア (PK,SK) 署名が正しいかを検証
11. 証明者 検証者 公開鍵: v 秘密鍵: s s.t. v=g -s (mod p) x=v e g y が成り立てば Accept 左辺: x=g r 右辺: v e g y =g -es g r+es =g r e x=g r (mod p) y=r+es (mod q) 乱数: r ∈ Z q 乱数: e ( n bits ) 安全なユーザ認証プロトコルの例: Schnorr のプロトコル 離散対数が困難という仮定の下では、公開鍵から秘密鍵を計算できない 秘密鍵の情報が漏れないでいて欲しい
12. 第 4 回:プログラムの難読化( Obfuscation )の安全性の議論 The winning entry for the 1998 International Obfuscated C Code Contest
15. 準備( 2 ) Pr[x1 ← X1; x2 ← X2 ; …. : E(x1,x2,…)] は、 x1 が確率分布 X1 から生成され、 x2 が確率分布 X2 から生成され、…た結果、事象 E(x1,x2,…) が発生する確率 X1,X2,… が集合の場合は、一様な確率分布を意味する 例: サイコロの目をあらわす確率分布 X Pr[x ← X : x=1] = 1/6 Pr[x ← X : x is even] = ½ 独立な2つのサイコロの目をあらわす確率分布 X, Y Pr[x ← X ; y ← Y : x=1 and y=1] = 1/36 Pr[x ← X ; y ← Y : x and y is even] = ¼ Pr[x ← X ; y ← Y : x = y] = 1/6
16. 準備( 3 ) 無視できるほど小さい(確率) f(n) is negligible if ∀ polynomial p(n), ∀ sufficiently large n, f(n) < 1/p(n) if ∀ polynomial p(n), ∃constant N s.t. ∀n>N, f(n)<1/p(n) 例: f(n) = 1/2 n 確率的多項式時間チューリングマシンの能力では、 negligible な確率で起こる事象を捉えることはできない。 例: f(n)=1/2 n の確率で成功する攻撃を多項式時間 n 5 回繰り返しても、成功する確率はせいぜい n 5 /2 n であり、なお negligible である 否定すると(背理法などで) f(n) is NOT negligible if ∃ polynomial p(n), ∀ infinitely many n’s, f(n) > 1/p(n) if ∃ polynomial p(n), s.t. ∀ constant N, ∃ n>N, f(n)>1/p(n)
17. 準備(4) 離散対数問題 y=f (p,q,g) (x)=g x mod p x から y は多項式時間で計算できる y から x を求める問題:効率的には解けないと仮定される Parameter generator PG 入力: 1 n (セキュリティパラメータ) 出力:( p,q,g ) p: a prime of length n q: another prime s.t. q|p-1 例えば、 p=2q+1 g: 位数が q の数 G (p,q,g) ={g 0 =1,g,g 2 ,g 3 ,g 4 ,…,g q-1 } は g によって生成される巡回群 g q =g 0 =1, g q+1 =g, g q+2 =g 2 ,… 1 以外の要素が、位数が q の数 G (p,q,g) から一つをgとしてランダムに選ぶ 掛け算(割り算)で閉じている g a *g b =g a+b(mod q) ∈ G (p,q,g) g a /g b =g a-b(mod q) ∈ G (p,q,g)
21. 抽象的:一方向性関数の定義 y=f(x) の一方向性 x から y の計算は簡単 y から x を計算するのが困難 安全性(一方向性)の定義 攻撃が成功するとは? y が与えられたとき、 x s.t. y=f (x) を出力する 任意の攻撃者にとって、攻撃が成功する確率が無視できるほど小さいとは? ∀ 攻撃者 A, ∃negligible function δ(n) s.t. Pr[x ← {0,1} n ; x’ ← A(f (x)) : x=x’] < δ(n)
22. 具体的:離散対数問題に基づく一方向性関数 y=f (p,q,g) (x)=g x mod p の一方向性 安全性(一方向性)の定義 攻撃が成功するとは? (p,q,g) & y が与えられたとき、 x s.t. y= g x mod p を出力する 任意の攻撃者にとって、攻撃が成功する確率が無視できるほど小さいとは? ∀ 攻撃者 A, ∃negligible function δ(n) s.t. Pr[ (p,q,g) ← PG(1 n ) ; x ← Z q ; x’ ← A(p,q,g,g x ) : x=x’] < δ(n) Z q ={0,1,2, …,q-1}
31. 抽象的:鍵共有の安全性の定義 表記 Key generator KG 入力: 1 n (セキュリティパラメータ) 出力: (PK,SK) ← KG(1 n ) PK: a public key of length n SK: a corresponding secret key Key Exchange Functions (PKa,SKa) ← KG(1 n ) , (PKb,SKb) ← KG(1 n ) Kab=KE(PKb, SKa)=KE(PKa, SKb) 安全性の定義 攻撃が成功するとは? (PKa, PKb) が与えられたとき、 Kab を出力する 任意の攻撃者にとって、攻撃が成功する確率が無視できるほど小さいとは? ∀ 攻撃者 A, ∃negligible function δ(n) s.t. Pr[(PKa,SKa) ← KG(1 n ) ; (PKb,SKb) ← KG(1 n ) ; Kab’ ← A(PKa,PKb) : Kab=Kab’] < δ(n)
32. 具体的: Diffie-Hellman 鍵共有 (PKa, SKa) s.t. PKa=g SKa mod p (PKb, SKb) s.t. PKb=g SKb mod p Alice Bob PKb PKa Ka =KE(PKb, SKa) =(PKb) SKa mod p =g SKa*SKb mod p Ka=Kb として鍵を共有できる Kb =KE(PKa, SKb) =(PKa) SKb mod p =g SKa*SKb mod p
33. 具体的: Diffie-Hellman 鍵共有の安全性の定義 離散対数問題の Parameter generator PG 入力: 1 n (セキュリティパラメータ) 出力:( p,q,g ) p: a prime of length n q: another prime s.t. q|p-1 g: 位数が q の数 公開鍵、秘密鍵ペアの Key generator KG (PKa,SKa) ← KG(p,q,g) s.t. PKa=g SKa mod p (SKa ← Z q ) (PKb,SKb) ← KG(p,q,g) s.t. PKb=g SKb mod p (SKb ← Z q ) 攻撃が成功するとは? (p,q,g, PKa, PKb) が与えられたとき、 g SKa*SKb mod p を出力する 任意の攻撃者にとって、攻撃が成功する確率が無視できるほど小さいとは? ∀ 攻撃者 A, ∃negligible function δ(n) s.t. Pr[ (p,q,g) ← PG(1 n ) ; (PKa,SKa) ← KG(p,q,g) ; (PKb,SKb) ← KG(p,q,g) ; Kab’← A(p,q,g, PKa,PKb) : Kab’= g SKa*SKb mod p] < δ(n)
36. 抽象的:公開鍵暗号の安全性の定義 表記 Key generator KG 入力: 1 n (セキュリティパラメータ) 出力:( pk,sk ) pk: a public key of length n sk: a corresponding secret key Encryption/decryption algorithms C ← E(pk, M): {0,1} n ×{0,1} n ->{0,1} n M=D(sk, C) ∀ n, ∀ M ∈{0,1} n , Pr[(pk,sk) ←KG(1 n ) ; C ← E(pk, M) : D(sk, C)=M]=1 安全性の定義 攻撃が成功するとは? (pk, C) が与えられたとき、 M s.t. D(sk, C)=M を出力する 任意の攻撃者にとって、攻撃が成功する確率が無視できるほど小さいとは? ∀ 攻撃者 A, ∃negligible function δ(n) s.t. Pr[ M ← {0,1} n ; (pk,sk) ← KG(1 n ) ; C ← E(pk,M); M’ ← A(pk,C) : M=M’] < δ(n)
37. 具体的:エルガマル暗号 離散対数問題の Parameter generator PG 入力: 1 n (セキュリティパラメータ) 出力:( p,q,g ) p: a prime of length n q: another prime s.t. q|p-1 g: 位数が q の数 公開鍵、秘密鍵ペアの Key generator KG (PK,SK) ← KG(p,q,g) (SK ← Z q ) s.t. PK=g SK mod p 暗号化 メッセージ: M 乱数 : R ← Z q 暗号文: C=(C1, C2)=(g R , M*PK R ) mod p 復号 暗号文 : (C1,C2) C2/C1 SK = M*PK R /(g R ) SK = M mod p PK をアリスの公開鍵 C1=g R をボブの公開鍵 と見ると、 PK R は Diffie-Hellman 共有鍵と見ることができる なので、この安全性は、 Diffie-Hellman 鍵共有の安全性に依存
38. 具体的:エルガマル暗号の安全性の定義 鍵生成: (PK,SK) ← KG(p,q,g) s.t. PK=g SK mod p 暗号化: C=(C1, C2)=(g R , M*PKa R ) mod p 復号: C2/C1 SK = M*PKa R /(g R ) SK = M mod p 攻撃が成功するとは? (p,q,g, PK, (C1,C2)) が与えられたとき、 M を出力する 任意の攻撃者にとって、攻撃が成功する確率が無視できるほど小さいとは? ∀ 攻撃者 A, ∃negligible function δ(n) s.t. Pr[ (p,q,g) ← PG(1 n ) ; (PK,SK) ← KG(p,q,g) ; M ← Z p ; R ← Z q ; (C1,C2 )=(g R , M*PKa R ) ; M’← A(p,q,g, PK, (C1,C2)) : M’= M] < δ(n)
39. エルガマル暗号の安全性の証明: Diffie-Hellman 鍵共有が安全なら、エルガマル暗号は安全である ∃ 攻撃者 A s.t. Pr[ (p,q,g) ← PG(1 n ) ; (PK,SK) ← KG(p,q,g) ; M ← Z p ; R ← q ; (C1,C2 )=(g R , M*PKa R ) ; M’← A(p,q,g, PK, (C1,C2)) : M’= M ] が無視できない確率 と仮定します 以下のように、攻撃者 A をブラックボックスとして使用し、 Diffie-Hellman 鍵共有の安全性を Break できます。 入力: (PKa, PKb) 出力: g SKa*SKb PK=PKa, C1=PKb とする ダミーの暗号文を生成 : C2 ← Z p A(p,q,g, PK, (C1, C2)) を実行し、 M’ を計算する。 無視できない確率で M’=C2/C1 SK mod p を満たす。 C2/M’=C1 SK =PKb SKa mod p を出力 エルガマル暗号 暗号化: C=(C1, C2)=(g R , M*PKa R ) mod p 復号: C2/C1 SK = M*PKa R /(g R ) SK = M mod p