ハッシュ関数「SHA-256」の計算プロセスをわかりやすく視覚化してくれる「Sha256 Algorithm Explained」

GIGAZINE



アメリカの国家安全保障局(NSA)によって開発された「SHA-2」は電子署名やブロックチェーンに応用される暗号学的ハッシュ関数の1つです。そのSHA-2の中でも特に使われているSHA-256でハッシュを生成するための計算プロセスがよくわかるサイト「Sha256 Algorithm Explained」を、Domingo Martin氏が公開しています。

Sha256 Algorithm Explained
https://sha256algorithm.com/

Sha256 Algorithm Explainedにアクセスするとこんな感じ。


上部にある入力欄に、好きな文字列を入力します。今回はGIGAZINEのURLである「https://gigazine.net/」を入力してみました。すると、入力したURLをバイナリに変換したメッセージブロックが表示されます。メッセージブロックは32bit×16行=512bitで表現されます。


右上の赤い再生ボタンをクリックすると、計算ステップが1つ進みます。入力文字列のバイナリで構成されたメッセージブロックを基に、まず32bit×64行=2048bitのメッセージスケジュールを生成します。


例えば以下の場合、1行目と14行目に対して循環シフト(right rotate)と論理シフト(right shift)の処理を行い、それぞれの結果の排他的論理和を求め、ρ0とρ1を算出します。そして、0行目と9行目にρ0とρ1を合計した結果を、メッセージスケジュールの16行目に書き込みます。


この計算を上から順番に進めていくことで、メッセージスケジュールが生成されていきます。


32bit×64行のメッセージスケジュールがすべて生成されるとこんな感じ。


続いて、メッセージスケジュールからハッシュを計算します。メッセージスケジュールと組み合わせる「Working Variables」のaからhはハッシュを構成する8つの変数です。この8つの変数の初期値には、固定の初期ハッシュ値(Initial hash value)が設定されます。SHA-256では素数である2・3・5・7・11・13・17・19の平方根を2進化したバイナリが初期ハッシュ値に用いられます。


計算は複雑ですが、ハッシュの計算は基本的にメッセージスケジュールの生成と同様に循環シフトと排他的論理和を用います。メッセージスケジュールの特定行とハッシュ変数から、新たなハッシュ変数a~hを算出し、上書きしていくという仕組み。


この計算をメッセージスケジュールの上から順番に進めていき、最終的なハッシュ変数が16進数のHEXに変換されて並べられ、256bitのハッシュにまとめられます。SHA-256のハッシュは元データのバイナリを基に複雑な計算を重ねて求められ、ハッシュから元データを復元するのは極めて困難となっています。


この記事のタイトルとURLをコピーする

Source

タイトルとURLをコピーしました