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
© Copyright 2024 ExpyDoc