Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
08/05/17 IISECオープンキャンパス模擬授業 (08/06/18改訂)
暗号理論への招待
擬似乱数の話擬似乱数の話
情報セキュリティ大学院大学 有田正剛
0
はじめに
暗号理論の対象•擬似乱数、擬似ランダム関数、一方向性関数•共通鍵暗号、公開鍵暗号• MAC、デジタル署名暗号プロトコル(鍵共有 コミットメント )•暗号プロトコル(鍵共有、コミットメント、・・・)
•セキュアシステム/サービス(電子投票、オークション、・・・)
暗号理論の目標システム/サービスを安全なものにコンパイル(自動変換)することシステム/サ ビスを安全なものにコンパイル(自動変換)すること
安全 = 「悪意ある環境でも正しく動作すること」•正当な利用者に対する完全性•正当な利用者に対する完全性•悪意ある利用者に対する頑強性•悪意あるシステムに対する健全性
1
悪意あるシステムに対する健全性
約束ごと
• すべての情報はビット列で表す。
整数 17 2進表現 10001整数 17 2進表現 10001 IISEC ISO/IEC 8859‐1 01001001, 01001001, 01010011,
01000101, 01000011音楽データ MP3音楽デ タ MP3画像データ JPEG {0,1}n : nビットの文字列全体
{0,1}* : 全ての有限長の文字列全体
• すべての関数/アルゴリズムはビット列操作とみなす。す ての関数/アルゴリズムはビット列操作とみなす。
101 100 101 100
0 + 0 0 1 + 0 1
+ (排他的論理和)
0 + 0 = 0, 1 + 0 = 10 + 1 = 1, 1+ 1 = 0
1001 2/* 5 + 4 = 9 */ 001
ワンタイムパッドメ セ ジ ( )と同じ長さのランダムなビ ト列 kを選ぶ• メッセージm=(m1,m2,m3,・・・)と同じ長さのランダムなビット列 k を選ぶ。
• ビット列 k は送信者と受信者の間だけの秘密とする。
k k
送信者(暗号化) 受信者(復号)送信者(暗号化) 受信者(復号)
(k1, k2, k3, ・・・) = k (k1, k2, k3, ・・・) = k
mi mi
ki ki
ci
Eve?
(m + k) + k = m
3どのような Eve にもmi はわからない。
(m + k) + k m
ワンタイムパッドの実行例
m=(01001001, 01001001, 01010011, 01000101, 01000011) /* IISEC */k = (00100001, 11101010, 01000101, 11001111, 10000011) /* ランダムに生成 */( , , , , ) / ランダ 成 /
暗号化暗
m=(01001001, 01001001, 01010011, 01000101, 01000011)k = (00100001, 11101010, 01000101, 11001111, 10000011)
(01101000 10100011 00010110 10001010 11000000)c = (01101000, 10100011, 00010110, 10001010, 11000000)
復号
c = (01101000, 10100011, 00010110, 10001010, 11000000)
Eve ?
復号
c = (01101000, 10100011, 00010110, 10001010, 11000000)k = (00100001, 11101010, 01000101, 11001111, 10000011)
m=(01001001, 01001001, 01010011, 01000101, 01000011)
4
擬似乱数生成器
擬似乱数生成器G: {0,1}n → {0,1}n+w
nビット乱数
n
乱数
擬似乱数生成器G
w
生成器G
(n+w) ビット擬似乱数
w
ストリーム暗号メッセージm=(m0,m1,m2,・・・)より(ずっと)短い鍵 k をランダムに選ぶ。擬似乱数生成器G(・)を用意する。擬似乱数 成器 ( )を用意する。
k k
暗号化 復号
k k k ← G(k) k k k ← G(k)k0, k1, k2, ・・・← G(k) k0, k1, k2, ・・・← G(k)
ki ki
mi
ci
mi
i
本当にこれで安全なのか?6
暗号理論における安全性の捉え方
安全であるとは理想的に安全であることと識別できないこと
1. 理想を明確に。
2 ただし システムは完全に理想的でなくてもよい 現実的な2. ただし、システムは完全に理想的でなくてもよい。現実的な敵(効率的な敵)に理想との差を識別されなければよい(計算論的安全性) 。算論的安全性) 。
3. しかし、どの様なタイプの敵に識別されたくないのかは明確にする。• 敵の計算能力• 敵が入手しうる情報、敵が取りうる立場
「オラクル」と「識別者」を用いてモデル化「オラクル」と「識別者」を用いてモデル化
7
オラクルと識別者を用いた安全性定義(の形)
System 0 :System 0 : 理想のシステムオラクル
which?
System 1 : 現実のシステム
問い合わせ答え
System 1が安全
答え
定義
識別者
System 1 が安全⇔
どのような効率的な識別者もオラクルの実体がSystem 0なのかオラクルの実体がSystem 0なのかSystem 1なのか、わからない。
⇔どのような効率的な識別者に対しても
b ( = 0 or 1)どのような効率的な識別者に対しても
Pr[ オラクルの実体 = System b ] – 1/2 が無視できるほど小さい。 8
擬似乱数生成器の安全性定義擬似乱数生成器
x擬似乱数生成器G: {0,1}n → {0,1}n+w
zG w
System 0 (理想) : z を {0,1}n+wからランダムに選択オラクル
hi h?
System 1 (現実) : x を {0,1}nからランダムに選択
which?
z = G(x)ε z
定義
識別者
Gが安全な擬似乱数生成器⇔
どのような効率的な識別者に対しても識別者 どのような効率的な識別者に対してもPr[ オラクルの実体 = System b] – 1/2
が無視できるほど小さい。
b ( = 0 or 1)9
安全な擬似乱数生成器を用いれば・・・
G: {0,1}n → {0,1}n+w が安全な擬似乱数生成器ならば、
定理
Gを用いたストリーム暗号は効率的なEveに対して安全である。(ただし、メッセージ長はn+w以下とする。)
オラクル
z (∈ {0,1}n+w)
なぜならば、もしもGを用いたストリーム暗号を破る効率的なEveがいたとすると、
識別者Dz
Eveを用いてGを破る効率的な識別者Dを構成できるから。
c = m + zEve
m を解読できたら:“疑似”
l
10
else:“真” or “疑似”
(ランダムに選択)
安全な擬似乱数生成器を作るには?
まず、w=1 とする:関数G: {0,1}n → {0,1}n+1関数 { , } → { , }
System 1 System 0
x ←$ {0,1}n, z = G(x) z ←$ {0,1}n+1
と は を通して従属 と は完全に独立
(y,σ) = z (y ∈ {0,1}n, σ∈{0,1} )
yとσはxを通して従属 yとσは完全に独立
違いを見分けられないためには、は と の関連を隠さなければならないGは y とσの関連を隠さなければならない。
11
関数G: {0 1}5 → {0 1}6 :関数G: {0,1}5 → {0,1}6 : G(x0,x1,x2,x3,x4) = (x0,x1,x2,x3,x4, x2)
System 1 System 0
11011 0 00010 1
00100 1 01101 1
01000 0 00110 0 01111 1
01111 1 10010 0 11011 0 01111 111011 0
12
どちらが System 1?
ハードコア述語関数 f: {0 1}n → {0 1}n :効率的に計算可能 x関数 f: {0,1}n → {0,1}n : 効率的に計算可能述語 h: {0,1}n → {0,1} : 〃 y
f hσ
x ←$ {0,1}n
y = f(x) σ = h(x)オラクル
y = f(x) , σ = h(x)return y
ε y
述語 が関数fのハ ドコア述語
定義
述語σ が関数fのハードコア述語⇔
y=f(x)はσ=h(x)を隠す⇔
インバータ⇔
どのような効率的なインバータに対してもPr[ σ^ = σ ] ‐ 1/2
が無視できるほど小さい。
σ^
が無視できるほど小さい。
13
ハードコア述語があれば・・・
述語h: {0,1}n→{0,1} が関数f:{0,1}n→{0,1}nのハード
定理
語 { , } { , } 関数 { , } { , }コア述語ならば、G(x) = (f(x),h(x)) は安全な擬似乱数生成器である。
x
f(x) h(x)f(x) h(x)
G(x)
14
なぜならば・・・なぜならばなぜならば、ハードコア述語hの性質より、どんな識別者Dも、y=f(x)からσ=h(x)を予測できないから。 オラクルy f(x)からσ h(x)を予測できないから。
じっさい、擬似乱数生成器 G=(f, h) を破る
x ←$ {0,1}n
y = f(x)(σ=h(x))
インバータ I εy
擬 数 成器 ( , )を識別者Dが存在したとすると、Dを用いてハードコア述語hのインバータ I を構成できる: y
r ←$ {0,1}εz = (y r)z = (y, r)
識別者D
“疑似”:r
“真”:1‐r
σ^ 15
ハードコア述語を作るには?
1. 何らかの難問を用いて、一方向性関数 f: {0,1}n → {0,1}n
(の候補)を作る ( f( )を知 ても は分からない)(の候補)を作る。 (y=f(x)を知ってもxは分からない)
2. y=f(x) が完全に隠す、xのビット xi を見つける。y ( ) i
3. h(x) = xi とする。
x
fh
y=f(x) xi
ランダムに選択された xについて
16
ランダムに選択された x についてy(=f(x)) を知っても Pr[h(x)=1] = 1/2
たとえば・・・
N = pq : 大きな2つの素数の積e: φ(N)=(p 1)(q 1)と互いに素な整数e: φ(N)=(p‐1)(q‐1)と互いに素な整数
y = RSAe N(x) = xe mod N (x ∈ {0,1,・・・,N‐1})y e,N( ) ( { , , , })
は一方向性関数と信じられている、「RSA仮定」。さらに、
h(x) = LSb(x) (= xの最下位ビット)
は RSAe,N(x)のハードコア述語。(つまり、yを知ってもxが偶数か奇数かまるで分らない。)( y 数 数
d N 整数 を整数Nでわ た余り
17
a mod N: 整数aを整数Nでわった余り。
RSA 関数とRSA仮定N=0
1N‐1
N1
• xから
• N = pqy = RSAe,N(x) = xe mod N
• x からy = xe mod N となるyを
求めるのは容易
• y からy = xe mod N となる x を求めるのは困難
xy
求めるのは困難
y(=xe mod N)
x から出発して何周して にな たのか?
18
何周してy になったのか?偶数回それとも奇数回?
Nが素数のときは・・・
y = RSAe,N(x) = xe mod N
• Nが素数pのときは、y から y = xe mod p となる x を求める は容易求めるのは容易。
φ(p) = p – 1d = e‐1 mod (p‐1), x = yd mod p
ときは• N = pqのときはφ(N) = ?
19
安全な擬似乱数生成器の例
S 仮定のもとで
系
RSA仮定のもとで、以下の G(・)は安全な擬似乱数生成器である。
←$ {0 1 N 1}x←$ {0,1,...,N‐1}G(x) = (xe mod N, LSb(x))
• w ビット延長したいときは
Gw(x) = (xe^w mod N, LSb(xe^(w‐1) mod N), LSb(xe^(w‐2) mod N), ・・・, LSb(x))
20
p = 17, q = 23N p * q 391 φ(N) 16*22 352
数値例
N = p * q = 391, φ(N)=16*22 = 352
e = 123y = RSA123 391(x) = x123 mod 391 ( x∈{0,1,...,390} )
k = 56 ←$ {0, 1, ..., 390}
y RSA123,391(x) x mod 391 ( x {0,1,...,390} )
y = k = 56 k0 = 0 y = 56123 mod 391 = 130 k1 = 0y = 130123 mod 391 = 97 k2 = 1y = 97123 mod 391 = 159 k3 = 1y = 159123 mod 391 = 226 k4 = 0y = 226123 mod 391 = 283 k5 = 1y = 283123 mod 391 = 250 k6 = 0y = 250123 mod 391 = 244 k7 = 0y = 244123 mod 391 = 379 k8 = 1
379123 d 391 385 k 1y = 379123 mod 391 = 385 k9 = 1y = 385123 mod 391 = 148 k10 = 0y = 148123 mod 391 = 176 k11 = 0y 176123 mod 391 5 k 1 k 56を知 ていれば確定的y = 176123 mod 391 = 5 k12 = 1
21
k=56 を知っていれば確定的。知らなければランダム!
RSA関数を用いたストリーム暗号
k (←$ {0,1,・・・,N‐1} )RSA仮定のもとで、
i = 0y = k
効率的なEveに対して安全。(miは知られない。)
y
[ランダムビットの生成]while ( i < w ) {
しかし、遅すぎて実用は(到底)無理。
ki = LSb(y)y = ye mod Ni = i + 1
}}
mi
kici
22
ストリーム暗号RC4k
1987 by Ron Rivestfor RSA Data Security, Inc.
[初期化]S 0 S S 2
k
S0 = 0, S1 = 1, ..., S255 = 255K0, K1, ..., K255: 鍵kを繰り返し用いて埋める。j = 0f i 0 t 255for i = 0 to 255:
j = (j + Si + Ki) mod 256swap Si and Sj
i = j = 0
高速。
i = j = 0
[ランダムバイトの生成]while (true) {
安全性の保証は経験的。
while (true) {i = (i+1) mod 256j = (j+Si) mod 256swap Si and Sj
※ K: Si, Sj から作られるi :すべてのSbox Siを用いるp i j
t = (Si + Sj) mod 256K = St
}K
i : すべてのSbox Siを用いるj : ランダムなSbox Sj を用いるこれにより、Kの周期を長くしている。
MiKi Ci
23
おわりにおわりに
ストリ ム暗号の「セマンテ ク ギ プ• ストリーム暗号の「セマンティック・ギャップ」安全性は証明できるが、遅くて現実には使い難い。
高速だが、安全性の保証は経験的。
• このようなギャップは暗号理論/技術の様々な局面にあり。
暗号理論/技術はまだまだ発展途上 筋縄ではいかない• 暗号理論/技術はまだまだ発展途上、一筋縄ではいかない。
• 色々な個性の研究者・技術者が必要。色々な個性の研究者 技術者が必要。
24
記号
• {0,1}n : nビットの文字列全体{0,1}* : 全ての有限長の文字列全体
• k ←$ {0,1} n: nビットの文字列kをランダムに選択
• z = x + y : z は x と y との桁ごとの排他的論理和0 + 0 = 1 + 1 = 0, 0 + 1 = 1 + 0 = 10 0 1 1 0, 0 1 1 0 1
• y ← A(x) : 入力xでアルゴリズムAを実行し、出力y を得た。
• Pr[E] : Eがおきる確率Pr[E | C] :条件Cのもとで Eがおきる確率Pr[E | C] : 条件Cのもとで、Eがおきる確率
• a mod N: 整数aを整数Nでわった余り。
25
a mod N:整数aを整数Nでわった余り。
参考文献
• B. Schneier, “Applied Cryptography”, 2nd edition, John Wiley & Sons, 1996.
• J Katz Y Lindell "Introduction to Modern Cryptography:J. Katz, Y. Lindell, Introduction to Modern Cryptography: Principles And Protocols", Chapman & Hall/Crc, 2007.
• D R Stinson "Crptography" 2nd edition CHAPMAN & HALL/CRC 2002• D.R.Stinson, Crptography , 2nd edition, CHAPMAN & HALL/CRC, 2002.
26