暗号理論における安全性の証明 離散対数問題に基づく暗号プリミティブの安全性議論 羽田 知史( IBM 東京基礎研究所) Satoshi Hada (IBM Research - Tokyo) mailto: satoshih at jp ibm com
暗号理論の位置づけと役割 暗号理論の主要テーマ 安全性の定義 安全な暗号化とは?安全な電子署名とは? 安全性の証明 例:素因数分解問題が困難ならば、RSA暗号は安全である、ことを証明したい(未解決問題)。 不可能性の証明 例:プログラムの難読化は不可能 暗号 Primitive 間の関係 例:一方向性関数が存在すれば、安全な電子署名が構築できる(証明されている)。 基本的な暗号技術(暗号化、電子署名) アクセス制御 (ファイアウォール) 電子選挙、オンライントレード、オークション プロトコル (SSL, IPSec) ハードウェア (TCG, IC カード ) プリミティブ(一方向性関数、擬似乱数、ゼロ知識) 暗号 理論 ツール アプリケーション 暗号を使って何ができて何ができないか?を理論的に議論する
暗号理論の位置づけと役割 ビジネス要求 (インターネット上に流れる顧客データを保護したい) SSL/TLS (クライアント / サーバ認証、データの暗号化 & 改ざん防止) 計算量的困難性の仮定 (離散対数問題の困難性) ビジネス IT 満たされている? 満たされている?
暗号理論の位置づけと役割 ビジネス要求 (ネットワーク上に流れる顧客データを保護したい) SSL/TLS (クライアント / サーバ認証、データの暗号化 & 改ざん防止) 計算量的困難性の仮定 (離散対数問題の困難性) ビジネス IT 安全性の定義:どういう安全性が提供されるか? 安全性の証明:どういう仮定の下で安全性が保障されるか?
暗号理論の位置づけと役割 安全性の定義 実現可能 実現不可能 安全性の証明が既知 (証明が可能) 安全性の証明が 不可能あるいは 未解決
スケジュール 離散対数問題に基づく安全性議論 Identification Protocol (ユーザ認証プロトコル)の Witness-Hiding 性 Identification Protocol (ユーザ認証プロトコル)の Zero-Knowledge 性 Program Obfuscation ( プログラムの難読化 )
第 1 回:離散対数問題に基づく安全性議論 離散対数問題: y=g x  mod p 安全性の議論 一方向性関数 Collision Resistant  ハッシュ関数 Diffie-Hellman 鍵共有 エルガマル暗号
第 2 回と第 3 回:ユーザ認証プロトコルの安全性の議論 ユーザ認証(  Identification   )プロトコルとはネットワーク上にて通信相手の身元を証明、検証するためのプロトコルです。 証明者( P さん) 検証者 Interaction 本当に P さん  ?
パスワード認証 悪意のある検証者は、パスワードを盗み、後に、 P さんになりすましが可能 証明者( P さん) 検証者 ID=P, PW
ディジタル署名ベースのユーザ認証プロトコル( SSL のサーバ認証など) 明らかに(署名の)情報がもれている その情報を使って、悪意のある検証者はなりすましできるかもしれない 乱数  R PK, Sign(P’s SK, R) 証明者( P さん) 検証者 鍵ペア (PK,SK) 署名が正しいかを検証
証明者 検証者 公開鍵: 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 のプロトコル 離散対数が困難という仮定の下では、公開鍵から秘密鍵を計算できない 秘密鍵の情報が漏れないでいて欲しい
第 4 回:プログラムの難読化( Obfuscation )の安全性の議論 The winning entry for the 1998 International Obfuscated C Code Contest
離散対数問題に基づく安全性議論
準備(1) セキュリティパラメーター 例:鍵の長さ 計算のモデル 「暗号アルゴリズムやプロトコルが効率的に実装可能」を表現する計算モデル 確率的多項式時間チューリングマシン 「攻撃者が効率的に実装可能」を表現する計算モデル 非一様な( Non-uniform ) 確率的多項式時間チューリングマシン 強い計算モデル:セキュリティパラメータ毎に異なる Advice を使用できる a1, a2, …, an,… Advice をどのように計算するかに制限はない
準備( 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
準備( 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)
準備(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)
一方向性関数と Collision Resistant ハッシュ関数
一方向性関数の概念 関数 F X Y 簡単に計算できる 計算が困難
安全性の定義: 「攻撃が成功する」を定義する。 「任意の攻撃者にとって、 攻撃が成功する確率が、無視できるほど小さい」、を定義する。
抽象的:一方向性関数の定義 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)
具体的:離散対数問題に基づく一方向性関数 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}
ハッシュ関数の概念 ハッシュ関数 Collision
Collision Resistant  ハッシュ関数の概念 メッセージ M に対する署名の生成 S=Sig(sk, Hash(M)) Hash() : {0,1} *  ->{0,1}  n 任意の長さのメッセージを n ビットにハッシュ(圧縮) 問題 もし、 Hash(M)=Hash(M’) となる M’ が見つけられると、 S は M’ の Valid な署名となる。 M に署名したつもりが、 M’ にも同時に署名したことになる。 署名 アルゴリズム ( 署名鍵 sk) 検証 アルゴリズム (検証鍵 pk ) 署名 対象 M 署名 S Valid or invalid Hash 署名 対象 Hash(M) 長い 短い
抽象的: Collision Resistant ハッシュ関数の定義 y=Hash(x) の Collision Resistance x から y の計算は簡単 Hash(x)=Hash(x’) となるペア (x,x’) を計算するのが困難 安全性( Collision Resistance )の定義 攻撃が成功するとは? Hash  が与えられたとき、  Hash(x)=Hash(x’) となるペア (x,x’) を出力する。 任意の攻撃者にとって、攻撃が成功する確率が無視できるほど小さいとは? ∀  攻撃者  A, ∃negligible function δ(n) s.t. Pr[ (x,x’) ← A(1 n ) : |x|=|x’|=n and Hash(x)=Hash(x’)] < δ(n)
具体的:離散対数問題に基づく Collision Resistant ハッシュ関数 y=f (p,q,g1,g2) (x1,x2)= g1 x1  g2 x2  mod p 2|q| ビットを |p| ビットに圧縮 Parameter generator PG 入力: 1 n (セキュリティパラメータ) 出力:( p,q,g1,g2 ) p: a prime of length n q: another prime s.t. q|p-1 g1,g2:  位数が q の数 攻撃が成功するとは? (p,q,g1,g2)  が与えられたとき、 (x1,x2) & (x1’,x2’) s.t.  g1 x1  g2 x2  =g1 x1’  g2 x2’  mod p を出力する 任意の攻撃者にとって、攻撃が成功する確率が無視できるほど小さいとは? ∀  攻撃者  A, ∃negligible function δ(n) s.t. Pr[ (p,q,g1,g2) ← PG(1 n ) ; ((x1,x2),(x1’,x2’)) ← A(p,q,g1,g2) : g1 x1  g2 x2  = g1 x1’  g2 x2’  ] < δ(n)
安全性の証明をどうやってやるのか? 証明したいこと: 離散対数問題が困難なら、離散対数問題に基づく Collision Resistant ハッシュ関数は安全である。 ∀  攻撃者  A, ∃negligible function δ(n) s.t.,  Pr[(pk,sk) ← KG(1n) ;….: …] < δ(n) すべての攻撃者に対して、確率が無視できることを証明する必要がある 問題:攻撃者は無限に 存在する A1,A2,A3,…….. Naïve な方法 すべての攻撃者に対して、確率が無視できることを証明する。 実際に使用される方法 帰着( Reduction ) 背理法:ある攻撃者が離散対数問題に基づく Collision Resistant ハッシュ関数を破るなら、離散対数問題を解けることを証明 その攻撃者を(ブラックボックスとして)使って、離散対数問題を解くアルゴリズムを設計
安全性( Collision Resistance )の証明:離散対数問題が困難なら、離散対数問題に基づく Collision Resistant ハッシュ関数は安全である ∃ 攻撃者 A s.t.  Pr[ (p,q,g1,g2) ← PG(1 n ) ; ((x1,x2),(x1’,x2’)) ← A(p,q,g1,g2) : g1 x1  g2 x2  = g1 x1’  g2 x2’  ]  が無視できない確率 と仮定します 以下のように、攻撃者 A をブラックボックスとして使用し、離散対数問題を解けます。 入力:  y=g x   mod p ((p,q,g) ← PG(1 n )  かつ  x ← Z q ) 出力 :  x s.t. y=g x   mod p  g1=g, g2=y とする A(p,q,g1,g2) を実行し、 ((x1,x2),(x1’,x2’)) を計算する。  無視できない確率で g1 x1  g2 x2  =g1 x1’  g2 x2’  mod p を満たす。 g1 x1  g2 x2  =g1 x1’  g2 x2’   g2=g1 (x1’-x1)/(x2-x2’)  mod p y=g (x1’-x1)/(x2-x2’)  mod p x=(x1’-x1)/(x2-x2’) mod q を出力
Diffie-Hellman 鍵共有とエルガマル暗号
鍵共有の概念 鍵ペア (PKa, SKa) 鍵ペア (PKb, SKb) Alice Bob PKb PKa Ka=KE(PKb, SKa) を計算 Kb=KE(PKa, SKb) を計算 Kab=Ka=Kb として鍵を共有できる PKa と PKb から Kab を計算できない
抽象的:鍵共有の安全性の定義 表記 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)
具体的: 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
具体的: 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)
Diffie-Hellman 鍵共有の安全性の証明 「離散対数問題が困難と仮定すると、 Diffie-Hellman 鍵共有は安全です」を証明できるかどうか?未解決問題です。 (p,q,g, PKa, PKb)  が与えられたとき、 g SKa*SKb  mod p を計算できたとしても、 SKa, SKb を計算できるかは非自明
共通鍵暗号と公開鍵暗号の概念 共通鍵暗号 暗号化と復号に同じ鍵を使用 鍵の配送が課題 公開鍵暗号 暗号化と復号に異なる鍵を使用 さらに、暗号化に使用する鍵は公開できる
抽象的:公開鍵暗号の安全性の定義 表記 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)
具体的:エルガマル暗号 離散対数問題の 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 鍵共有の安全性に依存
具体的:エルガマル暗号の安全性の定義 鍵生成:  (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)
エルガマル暗号の安全性の証明: 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
まとめ
まとめ 安全性の定義 実現可能 実現不可能 安全性の証明が既知 (証明が可能) 安全性の証明が 不可能あるいは 未解決 一方向性関数 Collision Resistant ハッシュ関数 鍵共有 公開鍵暗号 離散対数に基づく 一方向性関数 Collision Resistant ハッシュ関数 Diffie-Hellman 鍵共有 エルガマル公開鍵暗号 離散対数に基づく Collision Resistant ハッシュ関数の安全性 エルガマル公開鍵暗号の安全性 Diffie-Hellman 鍵共有の安全性 NA
Backup
暗号理論の位置づけと役割 ビジネス要求 (社内の人間による顧客情報の漏えい防止) SSL/TLS (クライアント / サーバ認証、データの暗号化 & 改ざん防止) 計算量的困難性の仮定 (離散対数問題の困難性) ビジネス IT 満たされていそうにない 満たされている?
暗号理論の位置づけと役割 ビジネス要求 (社内の人間による情報漏えい防止) 特殊な暗号プロトコルを設計してみました 計算量的困難性の仮定 (離散対数問題の困難性) ビジネス IT 本当に満たされている?

More Related Content

PPT
Provable Security2
PPTX
LoveChainのスマートコントラクトを見てみよう & 非中央集権なトークンのカタチ
PDF
One time verifiably encrypted signatures a.k.a. adaptor signatures
PDF
GC in C++0x
PPTX
Shadow gunのサンプルから学べるモバイル最適化
PDF
EXE #4:ブロックチェーン応用のモデルと金融工学
PPTX
20180728 halide-study
PDF
Emcjp item33,34
Provable Security2
LoveChainのスマートコントラクトを見てみよう & 非中央集権なトークンのカタチ
One time verifiably encrypted signatures a.k.a. adaptor signatures
GC in C++0x
Shadow gunのサンプルから学べるモバイル最適化
EXE #4:ブロックチェーン応用のモデルと金融工学
20180728 halide-study
Emcjp item33,34

Similar to Provable Security1 (20)

PPT
Provable Security3
PDF
CRYPT+YOU, UNDERSTAND TODAY!
KEY
Summer seminar
PDF
ブロックチェーン系プロジェクトで着目される暗号技術
PDF
楕円曲線と暗号
PDF
暗認本読書会13 advanced
PDF
『データ解析におけるプライバシー保護』勉強会 秘密計算
PDF
暗号技術入門 秘密の国のアリス 総集編
PDF
RSA鍵生成脆弱性ROCAの紹介
PDF
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
PDF
新しい暗号技術
PDF
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
PDF
RSA暗号運用でやってはいけない n のこと #ssmjp
KEY
20120922 勉強会スライド
PDF
暗号
PDF
#mailerstudy 02 暗号入門 (2012-02-22更新)
PDF
楕円曲線入門 トーラスと楕円曲線のつながり
PDF
これは楽しい数学マジック(その3)
PDF
暗号化データベースモデルにおける関係情報推定を防ぐ索引手法
PDF
レベル2準同型暗号の平文バイナリ制約を与えるコンパクトな非対話ゼロ知識証明
Provable Security3
CRYPT+YOU, UNDERSTAND TODAY!
Summer seminar
ブロックチェーン系プロジェクトで着目される暗号技術
楕円曲線と暗号
暗認本読書会13 advanced
『データ解析におけるプライバシー保護』勉強会 秘密計算
暗号技術入門 秘密の国のアリス 総集編
RSA鍵生成脆弱性ROCAの紹介
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
新しい暗号技術
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
RSA暗号運用でやってはいけない n のこと #ssmjp
20120922 勉強会スライド
暗号
#mailerstudy 02 暗号入門 (2012-02-22更新)
楕円曲線入門 トーラスと楕円曲線のつながり
これは楽しい数学マジック(その3)
暗号化データベースモデルにおける関係情報推定を防ぐ索引手法
レベル2準同型暗号の平文バイナリ制約を与えるコンパクトな非対話ゼロ知識証明
Ad

Provable Security1

  • 1. 暗号理論における安全性の証明 離散対数問題に基づく暗号プリミティブの安全性議論 羽田 知史( IBM 東京基礎研究所) Satoshi Hada (IBM Research - Tokyo) mailto: satoshih at jp ibm com
  • 2. 暗号理論の位置づけと役割 暗号理論の主要テーマ 安全性の定義 安全な暗号化とは?安全な電子署名とは? 安全性の証明 例:素因数分解問題が困難ならば、RSA暗号は安全である、ことを証明したい(未解決問題)。 不可能性の証明 例:プログラムの難読化は不可能 暗号 Primitive 間の関係 例:一方向性関数が存在すれば、安全な電子署名が構築できる(証明されている)。 基本的な暗号技術(暗号化、電子署名) アクセス制御 (ファイアウォール) 電子選挙、オンライントレード、オークション プロトコル (SSL, IPSec) ハードウェア (TCG, IC カード ) プリミティブ(一方向性関数、擬似乱数、ゼロ知識) 暗号 理論 ツール アプリケーション 暗号を使って何ができて何ができないか?を理論的に議論する
  • 3. 暗号理論の位置づけと役割 ビジネス要求 (インターネット上に流れる顧客データを保護したい) SSL/TLS (クライアント / サーバ認証、データの暗号化 & 改ざん防止) 計算量的困難性の仮定 (離散対数問題の困難性) ビジネス IT 満たされている? 満たされている?
  • 4. 暗号理論の位置づけと役割 ビジネス要求 (ネットワーク上に流れる顧客データを保護したい) SSL/TLS (クライアント / サーバ認証、データの暗号化 & 改ざん防止) 計算量的困難性の仮定 (離散対数問題の困難性) ビジネス IT 安全性の定義:どういう安全性が提供されるか? 安全性の証明:どういう仮定の下で安全性が保障されるか?
  • 5. 暗号理論の位置づけと役割 安全性の定義 実現可能 実現不可能 安全性の証明が既知 (証明が可能) 安全性の証明が 不可能あるいは 未解決
  • 6. スケジュール 離散対数問題に基づく安全性議論 Identification Protocol (ユーザ認証プロトコル)の Witness-Hiding 性 Identification Protocol (ユーザ認証プロトコル)の Zero-Knowledge 性 Program Obfuscation ( プログラムの難読化 )
  • 7. 第 1 回:離散対数問題に基づく安全性議論 離散対数問題: y=g x mod p 安全性の議論 一方向性関数 Collision Resistant ハッシュ関数 Diffie-Hellman 鍵共有 エルガマル暗号
  • 8. 第 2 回と第 3 回:ユーザ認証プロトコルの安全性の議論 ユーザ認証( Identification )プロトコルとはネットワーク上にて通信相手の身元を証明、検証するためのプロトコルです。 証明者( P さん) 検証者 Interaction 本当に P さん ?
  • 9. パスワード認証 悪意のある検証者は、パスワードを盗み、後に、 P さんになりすましが可能 証明者( P さん) 検証者 ID=P, PW
  • 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
  • 14. 準備(1) セキュリティパラメーター 例:鍵の長さ 計算のモデル 「暗号アルゴリズムやプロトコルが効率的に実装可能」を表現する計算モデル 確率的多項式時間チューリングマシン 「攻撃者が効率的に実装可能」を表現する計算モデル 非一様な( Non-uniform ) 確率的多項式時間チューリングマシン 強い計算モデル:セキュリティパラメータ毎に異なる Advice を使用できる a1, a2, …, an,… Advice をどのように計算するかに制限はない
  • 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)
  • 19. 一方向性関数の概念 関数 F X Y 簡単に計算できる 計算が困難
  • 20. 安全性の定義: 「攻撃が成功する」を定義する。 「任意の攻撃者にとって、 攻撃が成功する確率が、無視できるほど小さい」、を定義する。
  • 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}
  • 24. Collision Resistant ハッシュ関数の概念 メッセージ M に対する署名の生成 S=Sig(sk, Hash(M)) Hash() : {0,1} * ->{0,1} n 任意の長さのメッセージを n ビットにハッシュ(圧縮) 問題 もし、 Hash(M)=Hash(M’) となる M’ が見つけられると、 S は M’ の Valid な署名となる。 M に署名したつもりが、 M’ にも同時に署名したことになる。 署名 アルゴリズム ( 署名鍵 sk) 検証 アルゴリズム (検証鍵 pk ) 署名 対象 M 署名 S Valid or invalid Hash 署名 対象 Hash(M) 長い 短い
  • 25. 抽象的: Collision Resistant ハッシュ関数の定義 y=Hash(x) の Collision Resistance x から y の計算は簡単 Hash(x)=Hash(x’) となるペア (x,x’) を計算するのが困難 安全性( Collision Resistance )の定義 攻撃が成功するとは? Hash が与えられたとき、 Hash(x)=Hash(x’) となるペア (x,x’) を出力する。 任意の攻撃者にとって、攻撃が成功する確率が無視できるほど小さいとは? ∀ 攻撃者 A, ∃negligible function δ(n) s.t. Pr[ (x,x’) ← A(1 n ) : |x|=|x’|=n and Hash(x)=Hash(x’)] < δ(n)
  • 26. 具体的:離散対数問題に基づく Collision Resistant ハッシュ関数 y=f (p,q,g1,g2) (x1,x2)= g1 x1 g2 x2 mod p 2|q| ビットを |p| ビットに圧縮 Parameter generator PG 入力: 1 n (セキュリティパラメータ) 出力:( p,q,g1,g2 ) p: a prime of length n q: another prime s.t. q|p-1 g1,g2: 位数が q の数 攻撃が成功するとは? (p,q,g1,g2) が与えられたとき、 (x1,x2) & (x1’,x2’) s.t. g1 x1 g2 x2 =g1 x1’ g2 x2’ mod p を出力する 任意の攻撃者にとって、攻撃が成功する確率が無視できるほど小さいとは? ∀ 攻撃者 A, ∃negligible function δ(n) s.t. Pr[ (p,q,g1,g2) ← PG(1 n ) ; ((x1,x2),(x1’,x2’)) ← A(p,q,g1,g2) : g1 x1 g2 x2 = g1 x1’ g2 x2’ ] < δ(n)
  • 27. 安全性の証明をどうやってやるのか? 証明したいこと: 離散対数問題が困難なら、離散対数問題に基づく Collision Resistant ハッシュ関数は安全である。 ∀ 攻撃者 A, ∃negligible function δ(n) s.t., Pr[(pk,sk) ← KG(1n) ;….: …] < δ(n) すべての攻撃者に対して、確率が無視できることを証明する必要がある 問題:攻撃者は無限に 存在する A1,A2,A3,…….. Naïve な方法 すべての攻撃者に対して、確率が無視できることを証明する。 実際に使用される方法 帰着( Reduction ) 背理法:ある攻撃者が離散対数問題に基づく Collision Resistant ハッシュ関数を破るなら、離散対数問題を解けることを証明 その攻撃者を(ブラックボックスとして)使って、離散対数問題を解くアルゴリズムを設計
  • 28. 安全性( Collision Resistance )の証明:離散対数問題が困難なら、離散対数問題に基づく Collision Resistant ハッシュ関数は安全である ∃ 攻撃者 A s.t. Pr[ (p,q,g1,g2) ← PG(1 n ) ; ((x1,x2),(x1’,x2’)) ← A(p,q,g1,g2) : g1 x1 g2 x2 = g1 x1’ g2 x2’ ] が無視できない確率 と仮定します 以下のように、攻撃者 A をブラックボックスとして使用し、離散対数問題を解けます。 入力: y=g x mod p ((p,q,g) ← PG(1 n ) かつ x ← Z q ) 出力 : x s.t. y=g x mod p g1=g, g2=y とする A(p,q,g1,g2) を実行し、 ((x1,x2),(x1’,x2’)) を計算する。 無視できない確率で g1 x1 g2 x2 =g1 x1’ g2 x2’ mod p を満たす。 g1 x1 g2 x2 =g1 x1’ g2 x2’ g2=g1 (x1’-x1)/(x2-x2’) mod p y=g (x1’-x1)/(x2-x2’) mod p x=(x1’-x1)/(x2-x2’) mod q を出力
  • 30. 鍵共有の概念 鍵ペア (PKa, SKa) 鍵ペア (PKb, SKb) Alice Bob PKb PKa Ka=KE(PKb, SKa) を計算 Kb=KE(PKa, SKb) を計算 Kab=Ka=Kb として鍵を共有できる PKa と PKb から Kab を計算できない
  • 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)
  • 34. Diffie-Hellman 鍵共有の安全性の証明 「離散対数問題が困難と仮定すると、 Diffie-Hellman 鍵共有は安全です」を証明できるかどうか?未解決問題です。 (p,q,g, PKa, PKb) が与えられたとき、 g SKa*SKb mod p を計算できたとしても、 SKa, SKb を計算できるかは非自明
  • 35. 共通鍵暗号と公開鍵暗号の概念 共通鍵暗号 暗号化と復号に同じ鍵を使用 鍵の配送が課題 公開鍵暗号 暗号化と復号に異なる鍵を使用 さらに、暗号化に使用する鍵は公開できる
  • 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
  • 41. まとめ 安全性の定義 実現可能 実現不可能 安全性の証明が既知 (証明が可能) 安全性の証明が 不可能あるいは 未解決 一方向性関数 Collision Resistant ハッシュ関数 鍵共有 公開鍵暗号 離散対数に基づく 一方向性関数 Collision Resistant ハッシュ関数 Diffie-Hellman 鍵共有 エルガマル公開鍵暗号 離散対数に基づく Collision Resistant ハッシュ関数の安全性 エルガマル公開鍵暗号の安全性 Diffie-Hellman 鍵共有の安全性 NA
  • 43. 暗号理論の位置づけと役割 ビジネス要求 (社内の人間による顧客情報の漏えい防止) SSL/TLS (クライアント / サーバ認証、データの暗号化 & 改ざん防止) 計算量的困難性の仮定 (離散対数問題の困難性) ビジネス IT 満たされていそうにない 満たされている?
  • 44. 暗号理論の位置づけと役割 ビジネス要求 (社内の人間による情報漏えい防止) 特殊な暗号プロトコルを設計してみました 計算量的困難性の仮定 (離散対数問題の困難性) ビジネス IT 本当に満たされている?

Editor's Notes

  • #12: Schnorr の認証プロトコル [Crypto’89]