←セキュリティ論シラバスへ 中間テストの内容へ→ ←講義のツボメニューへ 6 ディジタル署名 【2001.11.20 】【第8回】 6.3 一方向性ハッシュ関数 一方向性ハッシュ関数h(x)の満たすべき性質 ●一方向性(one-wayness) h(x)から、もとのxが復元できるようなxに関するいかなる情報も得られない ●コリジョンフリー性(collision free)[衝突困難性] given x, find y, s.t. h(x) = h(y) find x,y, s.t. h(x) = h(y) 代表的な一方向性ハッシュ関数アルゴリズム ・MD5(Message Digest)Rivestによって提案された。出力128ビット(RFC1321) ・SHA NISTによって提案された。出力160ビット 両方ともopenSSLでサポートされている。 SSL3、TLS(Transport Layer Security, RFC2264)でもサポートされている。 一方向ハッシュ関数の概略(例:MD5) ●前処理:入力、(512の倍数−64)ビットになるよにバディングされる。 入力の長さを64ビットで表現したものを付加する。 32-bit長のレジスタA,B,C,Dをある特定の初期値に初期化する。 ●メイン: 前処理された入力は512ビット毎に分割される。分割された512ビット毎に以下の1.-4.を行う。 1.512ビットをさらに32ビットずつ16個に分割しM1,M2,・・・,M16(メッセージ小ブロックと呼ぶ)とする。 2.レジスタA,B,C,Dの値をA',B',C',D'に待避しておく。 3.ラウンドの処理1≤ r ≤ 4 について以下を行う。 各メッセージ小ブロックMiの処理 i = 1, 2, .... 16の順に非線形関数f(r,i)を用いてA,B,C,Dを更新する。 (A,B,C,D) = f(r,i)(A,B,C,D,Mi) 4. (A,B,C,D) =(A ⊕ A', B ⊕ B', C ⊕ C', D ⊕ D' 最終的なレジスタA,B,C,Dの値を連接したものを出力とする。 非線形関数の例: 論理積、論理和、if...then...else... , 232を法とした定数加算などの組み合わせ。 6.1 RSA 暗号を用いたディジタル署名 ユーザAがユーザBに自分の署名のついたメッセージMを送付する場合を考える。 1.AはMに一方向性ハッシュ関数hを施したもの:h(M)計算する。 2.Aはh(M)を自分の秘密鍵dで暗号化する(すなわち、s = h(M)d mod nを計算する)。 3.AはMとsをBに送る。 4.BはAの公開鍵eを使い、h' = se mod nを計算する。 5.Bは送られてきたMにhを施したもの:h(M)とh'を比較し、一致している場合M,sの組をAの署名つきメッセージとして受理する。 〇必要に応じて3.で送られるM,sを共通鍵暗号あるいはBは公開鍵で暗号化する。 11月27日(火曜日)は中間テスト ←セキュリティ論シラバスへ
6 ディジタル署名