情報セキュリティ: 2007年6月1日

q
q
情報セキュリティ
第7回:2007年6月1日(金)
q
q
本日学ぶこと

メッセージ認証
q
q
q
q



一方向ハッシュ関数
メッセージ認証コード
ディジタル署名(デジタル署名)
いずれも,完全性に関する技術
一方向ハッシュ関数,メッセージ認証コード,ディジタル署名
は改竄を検出できる.
メッセージ認証コードは,鍵を共有する当事者間で(のみ)
メッセージの完全性を検証できる.
ディジタル署名は第三者による検証ができる.
2
なりすまし・偽造(復習)
送信
受信
敵
完全性を脅かす
なりすましにはユーザ認証,偽造にはメッセージ認証
3
改ざん(復習)
送信
受信
敵
完全性を脅かす
man-in-the-middle攻撃,中間者攻撃ともいう
4
リプレイ攻撃(復習)
送信
受信
敵
完全性を脅かす
5
機密性・完全性と暗号技術
機密性
完全性
(正真性)
鍵なし
アルゴリズム秘匿
による暗号
一方向ハッシュ関数
共通鍵
対称暗号
メッセージ認証コード
非対称鍵
公開鍵暗号
ディジタル署名
6
一方向ハッシュ関数(one-way hash function)とは

メッセージからハッシュ値と呼ばれる情報を作る操作・関数
q

ハッシュ値について
q
q

メッセージとそのハッシュ値が与えられれば,そのいずれかが
改ざんされていないことを確認できる.
指紋(fingerprint),サマリ(summary)などとも呼ばれる.
一般に,関数ごとに固定長で,メッセージに比べて小さい.
 「8文字のパスワード」も,「1GBのファイル」も,
SHA-1のハッシュ値はそれぞれ160ビット
具体的な一方向ハッシュ関数
q
MD5, SHA-1, SHA-256, SHA-512など
7
一方向ハッシュ関数の数学的準備

表記
q
q
q

h : ハッシュ関数
m, n, x : メッセージ(ハッシュ関数の入力)
h(m), h(n), h(x) : ハッシュ値(ハッシュ関数の出力)
メッセージとハッシュ値について
q
q
メッセージ空間は一般に無限集合
ハッシュ値空間は有限集合
 SHA1なら,160ビットのビット列なので,
ハッシュ値空間の大きさは 2160
8
一方向性とは

任意のメッセージmに対してh(m)を計算するのは容易である
が,任意に与えられたh(m)から,mを求めることができない.
q
集合 Hm={x | h(x)=h(m)} を求めることは原理的に可能である
が,無限集合かもしれないし,mそのものを求めることは不可能.
Hmの要素を一つ求めることは,弱衝突耐性に関する話.
メッセージ
空間
Hm= {x | h(x)=h(m)}
m
hとh(m)によって
決まる集合
ハッシュ値
空間
h(m)
9
一方向ハッシュの利用例(MD5)(1)
ここをクリックで
ファイルを
ダウンロード
ここをクリックで
MD5のハッシュ値
が入手できる
10
一方向ハッシュの利用例(MD5)(2)

確認方法(LinuxまたはCygwin)
1. httpd-2.2.2.tar.gz をダウンロードし,適当なディレクトリに置く.
2. 端末(シェル)を起動し,上記のディレクトリに移動する.
3. 「md5sum httpd-2.2.2.tar.gz」を実行すると,ハッシュ値として,
32文字(128ビット)の16進文字列が出力される.
4. ブラウザで[MD5]をクリックして,ハッシュ値を比較する.
 同じならば,誤りなく送信できたと推定できる.
 異なっていれば,ダウンロードに失敗した恐れがあり,最初
からやり直す.

この方法でファイルの完全性を確認できるが,改ざんされて
いる可能性は否定できない.
q
途中で悪意のある者が,http-2.2.2.tar.gzとハッシュ値の両方を
他のデータに取り替えているかもしれない!
11
弱衝突耐性とは

与えられたh(m)から,h(m)=h(n)を満たすメッセージnを求め
ることができない.
q
q
m=nか否かは問わない.
原理的に求めることができるので,実用上は「計算量的に困
難」であることを示せばよい.
12
弱衝突耐性を破る攻撃
Hm= {x | h(x)=h(m)}
m:百万円契約書
(アリス作成)
メッセージ
空間
一億円契約書
(マロリー作成,たくさん)
マロリーが目標とする
一億円契約書
n
ハッシュ値
空間
h(m)=h(n)
参考:『暗号技術入門―秘密の国のアリス』 pp.184-186
13
強衝突耐性とは

m≠nかつh(m)=h(n)を満たすメッセージm,nを求めることがで
きない.
q
q
hが単射でなければ,原理的に求めることができるので,実用
上は「計算量的に困難」であることを示せばよい.
 hが単射 ⇔ Hm={m}
 通常使う一方向ハッシュ関数では,メッセージ空間(の部分
集合)はハッシュ値空間よりも大きいので,単射とならない.
破れる?
 ハッシュ値空間のサイズMに対して, M 個のメッセージを生
成し,ハッシュ値を求めると,その中の一組が同じハッシュ
値になる確率が1/2を超える.(誕生日攻撃)
q
SHA-1なら,(2160)1/2 = 280個.それでも非現実的.
14
強衝突耐性を破る攻撃
百万円契約書
(マロリー作成,たくさん)
一億円契約書
(マロリー作成,たくさん)
メッセージ
空間
m,n:マロリーが目標と
する契約書
ハッシュ値
空間
h(m)=h(n)
参考:『暗号技術入門―秘密の国のアリス』 pp.186-188
15
メッセージ認証コード

MAC (Message Authentication Code)
q

MacintoshやMACアドレスとは別物
作成の流れ
作成者
メッセージ
鍵
メッセージ
メッセージ
認証コード
MAC値を復号して
メッセージを得る
ことはない
メッセージ
認証コード
MAC値’
鍵
MAC値
等しい?
検証者
16
メッセージ認証コードは脚光を浴びない

できること
q

ある鍵を用いてメッセージとそのMAC値のペアを作成したこと
を,共有する鍵を持つ人の間で,確認(保証)すること.
 「そのペアの所有者は,適切な鍵を持っている」は保証でき
ない.リプレイ攻撃の可能性があるため.
第三者証明と否認ができない
q
q
元のメッセージとそのMAC値を持っていても,鍵がなければ,
それが適切なペアか判断できない.
AliceとBobのみが共有する情報を使って,Aliceがメッセージ認
証コードを作ったとしても,Aliceは後で「私は作っていない(Bob
が作った)」と主張できてしまう.
17
公開鍵暗号とディジタル署名の数式表現

RSA暗号方式
q
q

RSAディジタル署名方式
q
q

暗号化:C = Encrypt(pub, M) = ME mod N
復号:M = Decrypt(pri, C) = CD mod N
署名:S = Sign(pri, M) = MD mod N
検証:M = Verify(pub, S) = SE mod N
RSAでは,暗号化も復号も署名も検証も「べき剰余」
18
ディジタル署名をどう活用する?

復元の結果,意味のあるメッセージが得られたら,この署名
文は適切な鍵で署名されたと判断する. ⇒ 署名文復元法
q

復元の結果と,公開もしくは送信されたメッセージとを照合し,
同じ内容ならば,この署名文は適切な鍵で署名されたと判断
する. ⇒ 認証子照合法
q

「意味のある」の判定が容易でないことも.
メッセージは意味のない(ランダムな)値でもよい.
「署名文の送信者はプライベート鍵(秘密鍵)を所有してい
る」と考えてはいけない.
q
リプレイ攻撃の可能性あり!
19
署名文復元法(1)
プライベート鍵で署名した署名文は
対応する公開鍵でのみ正しく検証できる
メッセージ
(署名文の検証)
(ディジタル署名)
(署名文の作成)
公開鍵で
復元
署名文
プライベート
鍵で署名
公開鍵
公開鍵ペア
メッセージ
プライベート
鍵
図の出典:『暗号技術入門―秘密の国のアリス』 p.214を改変
20
署名文復元法(2)

数式を当てはめると
M'
(署名文の検証)
(ディジタル署名)
(署名文の作成)
Verify
S
Sign
pub
公開鍵ペア
M
pri
S = Sign(pri, M)
M' = Verify(pub, S) = Verify(pub, Sign(pri, M))
21
認証子照合法(1)
M
pri
M
等しくなかった
ら,
Sign

S
S

pub
Verify
M'


適切なプライ
ベート鍵で署名
されていない
通信路中で
改竄が起こった
M' = M?
S = Sign(pri, M)
M' = Verify(pub, S)
= Verify(pub, Sign(pri, M))
図の出典:『暗号技術入門―秘密の国のアリス』 p.217を改変
22
認証子照合法(2)
M
h
M
前ページのSよりも
格段にサイズが小さい
h
等しくなかった
ら,

S
h(M)
h(M)

pri
Sign
S
pub
Verify
M'
適切なプライ
ベート鍵で署名
されていない
通信路中で
改竄が起こった
M' = h(M)?
S = Sign(pri, h(M))
 M'
= Verify(pub, S)
= Verify(pub, Sign(pri, h(M)))
図の出典:『暗号技術入門―秘密の国のアリス』 p.219を改変

23
リプレイ攻撃対策は?

シーケンス番号
q

タイムスタンプ(timestamp)
q

メッセージに通し番号を埋め込む.
メッセージに時刻情報(作成時刻または期限の時刻)を埋め込
む.
ノンス(nonce)
q
セッションごとに異なるランダムな値を生成し,埋め込む.
24
「原理的に可能」とは?

知ってほしいこと
q
q
無限集合といっても,一般にその各要素は,有限の長さで記述
できる
解を求めることが「原理的に可能」な実例
 「原理的に可能」と言うときはたいてい,「現実的には困難」と
続く.
25
ビット列が無限集合であるとは
0, 1, 00, 01, 10, 11, 100, 101, …
1ビット
2ビット
3ビット
…
とビット列を並べることで
q
q
q
重複なくビット列を列挙できる.
 この系列のx番目のビット列を求めることができる.
 ビット列mが,この系列の何番目にあるかを求めることも
できる.
この系列はいくらでも書くことができる. ⇒ 無限集合
しかしこの系列に出現するどの要素も,長さ有限のビット列
である.
26
一方向性・弱衝突耐性の破り方



入力: ハッシュ関数h,ハッシュ値M = h(m)
出力: 集合 {x | h(x) = M},またはその要素の一つ
方針
q
q

ビット列の(無限)系列の各要素を小さいものから順に取り出し
(xとする),h(x) を求め,それが M と等しいか判定する.
等しければ,その x を出力する.(一つだけでいいなら,ここで
終了)
計算できる?
q
q
計算理論では,「帰納的可算」と呼ばれる(ただし「帰納的」では
ない).
一方向ハッシュ関数では,終了するまでの時間はハッシュ値空
間に比例するので,この空間を大きくすればよい.
27
強衝突耐性の破り方



入力: ハッシュ関数h
出力: 集合 {(x,y) | x≠y, h(x)=h(y)},またはその要素の一つ
方針
q
q

自然数の集合をNと書くとき,N×N = {(a,b) | a∈N, b∈N} は
N と1対1に対応する.すなわち,N×Nの各要素を順に漏れ
なく列挙可能.
そこで,N×Nの要素(a,b)を順に漏れなく取り出し,
ビット列の系列のa番目の要素xおよびb番目の要素yに対して,
x≠y かつ h(x)=h(y)であるかを評価すればよい.
計算できる?
q
q
計算理論としては,これも帰納的可算.
実用上は,ビット列x,yをランダムに生成するほうが簡便.
28