2017年9月4日月曜日

RFID とブロックチェーン その5 ダブルハッシュ

その4でご紹介した真贋判定のサービスの提供を開始しました!

  MANICAブランドプロテクション

まー、中身はほとんど Proof of Existence と同じなんですけどねー。

今回はちょっと気になった事について記述します。それは「ダブルハッシュ」です。

ブロックチェーンでは暗号学的ハッシュ関数として SHA-256 が多用されています。これは入力としてデータを与えると、出力として 256bit のデータが出てきます。どんなに短いデータ(1バイトとか)でも、どんなに長いデータ(1テラバイトとか)でも出力は 256bit です。当然ですが同じデータを入力すると同じ 256bit のデータが出力されます。で、入力データが 1bit でも違うと全然違う値の 256bit が出力されます。これで改ざんされていないかどうかを判別するわけです。

で、ブロックチェーンではハッシュを2回行うダブルハッシュというのを利用しています。1回ハッシュ値を算出して、出てきた 256bit の値をもう1回ハッシュをかけて、出力された 256bit の値を利用するわけです。

なんでこんなことしてるのか?というのが素朴な疑問なわけですね。暗号学的にセキュリティが強固になるからというように説明されているところもありますが、どうもよくわからない。計算方法を調べれば納得するかもしれないですけど面倒くさいっす。

ハッシュ1回の場合は、入力データがそれこそ無限に近い数あるわけですけど、2回目のハッシュは入力が 0 ~ (2の256乗 - 1) に限定されるわけです。それでも十分な量ありますけど、でも無限に比べたらやっぱり有限なわけで、出力されたハッシュ値の衝突がそれなりにあるとするとそれはそれで問題でないのかい?というのが今回のテーマです。

これも計算方法を調べればわかるのかもしれませんがやっぱり面倒なので本当に衝突が無いのか地道に計算させてみることにしました。

単純に0からずーっと入力して出力を溜めてって、衝突があると騒ぐというプログラムです。 List 使ってますがそもそも List にそんなにたくさんのデータ入りませんからいずれはオーバーフローするんでしょうけどまぁそんなところまでたどり着くかもわからんしとりあえず動かして土日ほったらかしてみました。

結果... どーん。


残念ながら?衝突は起きてなくてでも 0x3C 0x21 0x5B まで(約394万回)実施の結果だと。あー、先ながーい、消費メモリは1Gくらい、土日使うくらいじゃーここまでかー。

というわけで暇があったらもう少しやってみようかと思います。

0 件のコメント:

コメントを投稿