スポンサーリンク

SHA-256のアルゴリズム

しばしば、ハッシュ関数について「入力データから一定のハッシュ値を生成する」という解説がありますが、やや不正確です。

実は、SHAのアルゴリズムは初期のハッシュ値が決まっています。その初期ハッシュを変化させるために使われる情報が入力データです。つまり、入力データが大本ではないのです。だから、正確に言うと、「初期のハッシュ値を、入力データを使って変化させていくことで、一定のハッシュ値を生成する」が正しいです。

ここからはスライドを使って解説していきます。

ここで、1つ補足します。上では、「入力データを64byteごとに分割する」と書きました。しかし、メッセージブロックが64byteで割り切れない場合があります。その時に、だからといって、データの不足部分を補うために、単純に0を置いて補えば良いことにはなりません。なぜなら、それだとハッシュの衝突が生じてしまうからです。

それを防ぐために、「パディング処理」という処理をします。簡単に言うと、データの不足部分に入力データの元々の長さを記録すれば良いのです。したがって、パディング処理では、以下の処理をします。

1.入力データの末尾に1bit置く。

2.不足部分を0で補う。

3.最後に、8byteを使って、入力データの長さを記録する。

(4.ぴったり64byteだった場合は、もう1つブロックを追加して、入力データの長さを記録する。)

ハッシュ関数は、ビットコイン以外でも使われている

最近、暗号通貨やブロックチェーンが注目を浴びるにつれ、ハッシュ関数の知名度も上がってきていると思われます。だから、ハッシュ関数は、ビットコイン技術の構成要素の1つくらいにしか思われていない人もいるかもしれません。しかし、ハッシュ関数は、ナカモト論文以前からある技術であり、様々な場面で使われている重要な技術です。

ちなみに、Pythonの標準モジュールに含まれるhashlibの中に、SHA-256が入っています。使ってみると、どのような値が出力されるのかがわかると思います。

参考文献

大石哲之 『ビットコインはどのようにして動いているのか? ビザンチン将軍問題、ハッシュ関数、ブロックチェーン、PoWプロトコル』

光成滋生 『クラウドを支えるこれからの暗号技術』

杉井靖典 『いちばんやさしいブロックチェーンの教本 人気講師が教えるビットコインを支える仕組み 「いちばんやさしい教本」シリーズ 』

GMOインターネット株式会社 『意外に知らない暗号の謎を解く!

wiz.code 『SHA-256アルゴリズム解説』

そろそろちゃんとやります 『ビットコインで使われているSHA-256の仕様と実装について』

Quita 『一方向ハッシュ関数についてまとめてみた。』

Pistatium Blog 『Hash関数まとめ(md5, sha1, sha2, crc32, PBKDF2)』

Marine Road 『[セキュリティ] ハッシュ化と暗号化は違いますよ!!』

Blockchain Biz 『ブロックチェーンの暗号技術を支えるハッシュ関数「SHA-256」

 

Twitterでフォローしよう!

おすすめの記事
スポンサーリンク