【暗号化技術.005】ハッシュ
佐藤@IT雑貨屋です。
次に「ハッシュ」について書いていきます。ハッシュとは一方向性の関数で、メッセージの改竄を干出します。また他のアルゴリズムと組み合わせて、認証など様々な事に利用されます。
◆ハッシュとは
ハッシュとは、一方向性の関数であるハッシュ関数を用いる方法を言います。データに対してハッシュ関数を用いてハッシュ値を求めます。ハッシュ値の長さは、データの長さによらず一定長となります。
ハッシュは暗号化(ハッシュ化)は出来ても、元に戻せないという性質があるため、メッセージを復元させたくない時に役立ちます。
ハッシュの代表的な用途ですが、送りたいデータと併せてハッシュ値を送る事で改竄を検出すう事です。改竄とはデータを書き換える事ですが、元のデータが少しでも異なるとハッシュ値が変わってしまいます。またハッシュ値が同じ別のデータを探す事も難しい事から、改竄を検出する事が可能になります。
ハッシュ関数において、ハッシュ値が一致する二つのメッセージを発見する事の困難さについては、衝突発見困難性と言います。またメッセージと、そのハッシュ値が与えられたときに、同一のハッシュ値となる別のメッセージを計算する事の困難さを原像計算困難性と言います。いずれもハッシュ関数の強度を示す指標となります。
◆ハッシュ関数の用途
このハッシュ関数ですが、改竄検出の他にも様々な場面で使われています。パスワード認証を行うときのチャレンジ・レスポンス方式などでは、このハッシュ関数は良く利用されています。
またパスワードを保管する時には、一般にパスワードをハッシュ関数で変換し、ハッシュ値のみ保管します。受け取ったパスワードをハッシュ関数で変換し、保管してあるハッシュ値と一致するか確認します。ハッシュ値は盗聴されても、元のメッセージが復元できないので、盗聴防止にも役立ちます。
◆ハッシュ関数の種類
代表的なハッシュ関数を以下にまとめます。
①MD5(Message Digest Algorithm 5)
与えられた入力に対して128ビットのハッシュ値を出力するハッシュ関数です。
②SHA-1(Secure Hash Algorithm 1)
NISTが規格化した、与えられた入力に対して160ビットのハッシュ値を出力するハッシュ関数です。脆弱性があり攻撃手法がすでに見つかっているので、利用は推奨されません。しかし普及している事から継続利用が容認されています。
➂SHA-2(Secure Hash Algorithm 2)
SHA-1の後継で、NISTが規格化したハッシュ関数です。それぞれ224ビット、256ビット、384ビット、512ビットのハッシュ値を出力するSHA-256、SHA-384、SHA-512の総称です。SHA-256以上は電子政府推奨暗号リストにも登録されています。
◆ソルト
ソルトとは、パスワードをハッシュ値に変換する際に付加されるデータです。ハッシュ関数のアルゴリズムは公開されているため、同じメッセージから同じハッシュ値を求める事が出来てしまいます。そのために、ハッシュ値が同じデータをみつけることで、元のメッセージが推測出来てしまう可能性があるため、メッセージに付加するデータです。
ソルトを付加する事で、お味メッセージから異なるハッシュ値が求められる事になり、メッセージの推測を困難にする事が出来ます。そのため、レインボー攻撃といった攻撃への対策として有効です。
◆HMAC
メッセージに秘密鍵を付加したものをハッシュ関数で変換した値をHMAC(Hash-based Message Authentication Code)と呼びます。秘密鍵を加えることで、暗号的なハッシュ値となります。鍵付きハッシュ関数と言われ、内容認証などメッセージ内容を認証する場合によく用いられます。