2014年9月18日木曜日

MD5からデータを予測する

ちょっと気になったので実験
MD5から元のデータを予測することはできるか? という事

まず必要なデータを用意する
テストデータとしては"abc"と書かれた3バイトのテキストデータを用意する
このデータのMD5値は900150983cd24fb0d6963f7d28e17f72になる

次にC#で作ったプログラムにこの値を設定する
そして起動

input MD5が与えたMD5値
sizeが"たぶんこのバイナリだろう"と予想した大きさ
dataはそのバイナリを文字列として扱った結果(今回はバイナリファイルは想定していない)
timeは処理時間

無事に元の"abc"を得ることができた

3バイトを得るのに30秒
2バイトだと0.11秒くらいだった
1バイト増える毎にループが256回増えるので、まぁ計算通りかな
たった5バイトでも1ヶ月近くかかる計算
ネットの配布物に付属するMD5値から実際のデータを取り出すのは現実的に不可能

しかしこれにも抜け道は合って、バイナリデータとMD5の変換テーブルを作る というのがある
CPUリソースが開いている時にバイナリデータのMD5をどんどん計算しておいて、MD5値が入力されたら今までに作ったテーブルと比較する
これなら過去に計算したバイナリに同じものがあれば正常なバイナリを答えることができる

ランダムに全ての組み合わせのバイナリを作った場合
数kBくらいで何らかの画像データを得ることができる
数MBであれば何らかの音楽データになり得る
数GBあれば何かの映画を見ることができる

0 件のコメント:

コメントを投稿