←セキュリティ論シラバスへ
←講義のツボメニューへ

6 ディジタル署名

【2001.11.20 】【第8回】
6.3 一方向性ハッシュ関数
一方向性ハッシュ関数h(x)の満たすべき性質

●一方向性(one-wayness)
h(x)から、もとのが復元できるようなに関するいかなる情報も得られない

●コリジョンフリー性(collision free)[衝突困難性]
given , 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日(火曜日)は中間テスト

←セキュリティ論シラバスへ