ハッシュ関数
何かしらのメッセージ(文章、画像、映像なんでも良い)をある一定の固定長の値を返す関数
返された固定長の値をハッシュ値という
100バイトだろうと、100Gバイトだろうとすべて固定長(256ビットとか)のハッシュ値が出力される。
何ができるのか
改ざん検知が可能になる
Aさんが「100万円分購入します。」というメールをBさんに送信する。
しかし、通信の途中でCさんが通信を盗聴していて、Aさんのメールを「1億円分購入します。」と改ざんしてしまったら、Bさんは1億円で処理をしてします。
これを防ぐために「100万円分購入します」というハッシュ値を生成する。(例:abcde)
Aさんは「100万円分購入します」というメール(平文)と合わせてハッシュ値abcdeも送信する。
メールを受領したBさん側もメールの内容をハッシュ化し、Aさんから送られてきたハッシュ値abcdeと比較し
改ざんされていないことを確認する。
SSL/TLS MAC等様々なところで利用されているみたいです。
ハッシュ関数を利用することで完全性が保証される
上記の通り、メッセージから生成したハッシュ値を検証することで改ざんされていないかを確認する。
しかし、改ざんは検知できてもなりすましは検知できないため、そこも確認する場合はディジタル署名、MAC,ディジタル証明書を利用する。
衝突耐性
メッセージの内容が1文字(正確には1ビット)でもずれていたら、ハッシュ値は違う値になるべきであり、同じハッシュ値で別のメッセージが2つ以上生成される(衝突)のは避ける必要がある。
2つのメッセージが同じハッシュ値なら改ざんされてるかどうかわからない。
衝突耐性には3つある。
衝突発見困難性(強衝突耐性)
1つのハッシュ値から2つ以上のメッセージを見つけ出すことが困難なこと。
abcdeというハッシュ値を逆算したらaaaaとbbbbっていう値を見つけ出すことができないこと。
第二原像計算困難性(弱衝突耐性)
メッセージのハッシュ値が与えられたとき、そのハッシュ値から他のメッセージを探すことが困難なこと。
aaaaのハッシュ値abcdeが与えられたとき、逆算してbbbbというメッセージを見つけるのが難しいこと
原像計算困難性(一方向性)
ハッシュ値から元のメッセージを見つけるのが困難なこと
ハッシュ関数一覧
MD4、MD5 ・・・すでに衝突耐性が破られている。同じハッシュ値を持つ2つのメッセージが作れ る。
SHA-1 ・・・160ビットの一方向ハッシュ関数。これも突破されている。
新規での利用は推奨されない。
SHA-2 ・・・SHA-256,SHA-384,SHA-512の総称。
ビット数はそれぞれの数字。
CRYPTRECの推奨暗号リストに入ってる。
ハッシュ化されているからと言って絶対に安全とは限らない
上記で説明している通り、既にいくつかのハッシュ関数は突破されている。
そのため、完全性が必ずしも保証されるとは限らない。
不正アクセスや攻撃によりハッシュ化された情報が流出してしまった場合、ブルートフォースアタック等の攻撃によりいつかは突破されてしまう。
そのためパスワードといったアクセス等に利用しているものをハッシュ値として保管していても、流出してしまった場合は変更することが推奨される。