wiz.code

いきさつ ― SHA256の解説と実装

MD5の脆弱性が発見され、使用を中止する勧告が出されてからずいぶん経過しました。 私も、プログラムの各所にMD5によるメッセージダイジェストを使用しているので、そろそろ別のハッシュアルゴリズムに置き換えようと考えていたところです。 世の中には、さまざまなハッシュアルゴリズムが存在しますが、その中でも私はSHA-256に注目しました。

ところが調べてみると、SHAのアルゴリズムを解説するWebサイトが思いのほか少ない。 外国語のサイトならあるのですが、日本語で解説されているサイトは皆無(SHA-1ならあるんだけど、探し方が悪いのかな…)。 別にアルゴリズムを知らなくたって困りはしませんが、いかんせん「何をやっているか分からない」プログラムを自分のアプリケーションに組み込むのは気持ちが悪い。

そこで、私自身の備忘録とドキュメント執筆練習を踏まえて、以下の3点をwiz.codeに掲載しようというものであります。

  1. 日本語によるSHA-256のアルゴリズム解説
  2. .NET Frameworkに実装されているのに敢えて自作したVisual Basic 2005のオリジナルコード
  3. オリジナルコードを元に作成したJavaScript

プログラムコードは、SHA規格の本家である米国連邦標準規格の仕様書「FIPS 180-2」を参照して独自にコーディング。 動作検証は、FIPS 180-2に掲載されているサンプルデータとの照合及び、.NET FrameworkのSHA256Managedクラスで同じ値が取得できることを確認していますが、 万が一コーディングミスがあったり、掲載したコードを利用したことによって何らかの損害を被っても、私は一切責任を負いませぬ。 あしからず。

追記(2016年12月9日)

この記事は、2009年時点のものです。 現在、SHA256に関するFIPSは、FIPS 180-4に更新されています。