今更ながら,MD5のアルゴリズムがどうなってるのか調べてみた。
MD5ってのは一方向暗号化アルゴリズムの一つで,ハッシュ関数って呼ばれる。つまり,ある文字列を一定の長さの文字列に変換する関数。入力文字列の長さに関わらず出力の長さは一定なので,情報が欠落し,復号は出来ない。だから,要約アルゴリズムとも呼ばれる。普通,ある文字列をMD5関数に突っ込むと,32桁の16進数が(文字列で)返ってくる。
ちなみに,アメリカ国土安全保障省はMD5について「暗号としては破られたものと考えるべきであり,今後の利用には適さない」1)って発表してて,更に2010年までに,合衆国政府ではMD5を利用してる部分をSHA-2に置き換えるって発表してる。
この辺の話も数年前に話題になったから,覚えてる人が多いとは思うけれど,念のため。
で,アルゴリズムをざっくり見てみると,耳慣れない関数や演算子は一切使われていない。
Wikipedia英語版に,疑似コード(pseudocode)2)でアルゴリズムが載ってるけど,使われてる演算子は AND, OR, XOR, NOT, n-ビットシフト(順に,)くらいで,あと関数として sin (と abs:絶対値, floor:切り捨て, pow:べき乗)くらいしか使われてない。(
って
の剰余(modulo)とかで使うのね,en:Wikipediaによると。…ってか mimeTeX で \boxplus が書けない!…強引に四角の中にプラス記号突っ込んだけど。あと
も1文字で \lll が無いから書けない!)
だから,全体の流れは理解しやすい。途中で使われる関数も,何をやってんのかは簡単にわかる。
んだけれど,じゃぁ何でそんな操作をしてるのかがわからない…
要するに,その関数の意味って何ってこと。これを考えてみようと思う。
…続く