11, SHA-256 MD構造 ―― ハッシュ関数に刻印を刻めるのはこの構造のみ
そう。まず、暗号論的ハッシュ関数に刻印を刻もうなんて……その発想自体が飛んでいた。あのフィーすら……首を傾げたくらいだから。
それでも、一つだけ……その可能性が生じる構造があった。それが、SHA-1やSHA-256を構成しているMD構造だった。
この構造、ハッシュ関数の1ラウンドの安全性が全体に波及する――そのような解釈が存在していたわ。ただし、それは総当たりによるアタックを想定した場合。
すでに当時の時点で……中間状態脆弱性などを抱えていたのよ。
中間状態脆弱性は、当初、長さ拡張攻撃に悪用されることで知れ渡っていったわ。
あるハッシュ値HAがあって、その原像……メッセージMAに対して、とあるメッセージMBを「拡張」する。すると、それによって得られるハッシュ値HBは、なんと……メッセージMAを知らなくても、ハッシュ値HAをメッセージMBで拡張することで得られてしまう。
そこに、中間状態脆弱性が絡んでいるということなのよ。midstateとも呼ばれていて、そこから計算を再開できてしまう脆弱性……ということ。それは、利点ではないわよ。
それでも、その性質を知っているのなら、そうならないように注意して使えば安全――という前提だった。ただ……この性質。量子から観察すると、かなりよろしくない性質だった。
なぜなら、途中から計算を再開して、最終ハッシュ値を求めることができてしまうから。つまり、フルスケールではない、限られた量子リソースでも、途中までなら解析できてしまう怖さ。
もしこれが、スポンジ構造のハッシュ関数や、暗号鍵――ECDSAやRSAなどであれば、途中までの量子演算結果なんて使い物にはならないわ。つまり、フルスケールが揃うまでの時間稼ぎが可能だった。
ところが、このSHA-256は違う。こんな性質だからこそ、暗号の最先端を扱う研究機関が、この脆弱性を見逃すわけがなく……。
すでに、ラウンド・ステップ別に量子演算を処理することで、途中解――「衝突」を求め始めていたわ。
そんなのはわかっていた。
途中までの結果すら利用できるのだから……当然、そうなってしまっていた。
さて……それで、なんと。そう。刻印を刻むにも、このMD構造でなければならない。
なぜなら、ハッシュ関数に刻まれる刻印は「構造」を持つから。
つまり、その刻印を浮かび上がらせるのに、時間がかかるのよ。
それで……刻印をハッシュ関数に刻む。それは、気が遠くなるような再試行をしているはず。ううん、必ずしているわ。よって、刻印を浮かび上がらせるまでの時間を大幅に短縮させることは、絶対に必要となる。そうしないと、時間的に詰んでしまう。
黙示録の壁画のような……あんなSHA-256刻印を、ハッシュ関数に刻むなんて到底無理。工夫しないと辿り着けないようにもなっている。
その論拠が……これなのよ。




