#前提
・一方向ハッシュ関数について調べていた時のものをまとめたものです。
・随時編集
・初投稿
・いいねしてくれると嬉しいです。(小並)
#まず一方向ハッシュ関数とは?
まずはじめに本題である、一方向ハッシュ関数について調べてみた。
暗号学的ハッシュ関数(wikipedia)
一方向性関数(wikipedia)
この二つによると、一方向ハッシュ関数は以上二つのキーワードの性質を併せ持つ関数であることがわかった。
注)ほんの少し使う言語はphp
#一方向ハッシュ関数の性質
1.暗号など情報セキュリティの用途に適するような暗号数理的性質をもつハッシュ関数である。(暗号学的ハッシュ関数)
○暗号数理的性質の条件
・同一のハッシュ値であるのに、そっくりだが実は異なるというようなメッセージの作成が不可能であること。
・ハッシュ値から、そのようなハッシュ値となるメッセージを得ることが事実上不可能であること。
(原像計算困難性、弱衝突耐性)
・同じハッシュ値となる、異なる2つのメッセージのペアを求めることが事実上不可能であること。
(強衝突耐性)
2.簡単に計算できるが逆関数の計算は非常に困難である関数を指す。(一方向性関数)
以上が揃って初めて一方向ハッシュ関数として成り立つと考えられる。
#一方向ハッシュ関数の種類
種類としてはあげられるものは以下のものがある。
・md5
MessageDigestalgorythm5のことで、与えられた入力に対して128ビットのハッシュ値を出力するハッシュ関数である。出力128bitのハッシュアルゴリズムとなっている。 現在、安全でないため使用は推奨されていない。
md5(hoge) => ea703e7aa1efda0064eaa507d9e8ab7e
・sha1
Secure Hash Algorithm-1からきている。ソルトを使用し、160ビット(20バイト)のハッシュ値を生成する。
2005年、SHA-1に対する攻撃法が発見され、将来的な利用に十分な安全性を有していないことが示唆され、こちらも使用は推奨されていない。
sha1(hoge) => 0b3b896804f7405b4452d49386912e1bf9e2dfac
・sha2
SHA-2にはSHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256の6つのバリエーションがあり、それぞれハッシュのbit値が異なる(ソルトを使用)。SHA-2は、推奨暗号として採用されている。
hash_hmac ('sha256' , "hoge" , False) => F9F2385A7D7CD1E6E9A801AB9BBBF7AE9998706AF0C2F8B608A39B42AB94D88F
#実際の現場での使われ方
実際、それぞれがどのように使われているのかを調べてみた、
するとsha2以外はセキュリティ的に脆弱性が発見されたため全く使われなくなったのかという予想に反し、
セキュリティ的に、ユーザに直接入力を求めるところでは使えないが、処理がsha1やsha2よりも軽いこともあり
md5が攻撃等がされえない範囲での内部処理的にmatchをさせる際に、利用する例がある。
sha1はmd5ほど脆弱ではないが、処理が軽くもなく中途半端なため使いどころがない。
が、sha2に変更できていない会社が未だに使っているらしい、、、
もちろんsha2はバリバリ現役でパスワード認証などで使われている。
という感じで、現場は成り立っているそうだ。
#余談
最後まで読んでいただきありがとうございます。
なにせ初めての投稿で、右も左もわかっていない状況の中書いたものなので、拙い内容だったと思います。
今後さらに精進していこうと思います。宜しくお願いします。