アルゴリズム

MD5

今更ながら,MD5のアルゴリズムがどうなってるのか調べてみた。

MD5ってのは一方向暗号化アルゴリズムの一つで,ハッシュ関数って呼ばれる。つまり,ある文字列を一定の長さの文字列に変換する関数。入力文字列の長さに関わらず出力の長さは一定なので,情報が欠落し,復号は出来ない。だから,要約アルゴリズムとも呼ばれる。普通,ある文字列をMD5関数に突っ込むと,32桁の16進数が(文字列で)返ってくる。

ちなみに,アメリカ国土安全保障省はMD5について「暗号としては破られたものと考えるべきであり,今後の利用には適さない」1)って発表してて,更に2010年までに,合衆国政府ではMD5を利用してる部分をSHA-2に置き換えるって発表してる。

この辺の話も数年前に話題になったから,覚えてる人が多いとは思うけれど,念のため。

で,アルゴリズムをざっくり見てみると,耳慣れない関数や演算子は一切使われていない。

Wikipedia英語版に,疑似コード(pseudocode)2)でアルゴリズムが載ってるけど,使われてる演算子は AND, OR, XOR, NOT, n-ビットシフト(順に,\wedge , \vee , \oplus , \neg , {\langle\langle\langle}_n)くらいで,あと関数として sin (と abs:絶対値, floor:切り捨て, pow:べき乗)くらいしか使われてない。(\fbox[3][3]{+} って 2^{32} の剰余(modulo)とかで使うのね,en:Wikipediaによると。…ってか mimeTeX で \boxplus が書けない!…強引に四角の中にプラス記号突っ込んだけど。あと<<<も1文字で \lll が無いから書けない!)

だから,全体の流れは理解しやすい。途中で使われる関数も,何をやってんのかは簡単にわかる。

んだけれど,じゃぁ何でそんな操作をしてるのかがわからない…

要するに,その関数の意味って何ってこと。これを考えてみようと思う。

…続く

2) 実在するプログラミング言語で書かれたコードじゃなくて,説明用にプログラムに似せて書かれたもの

Now loading some news...