ハッシュ関数とは?
この ハッシュ関数は あらゆるコンテンツ — 一文の文章、ソフトウェア、数ギガバイトのバックアップ — を、固定長の文字列に変換します: ハッシュ値 またはダイジェストと呼ばれます。これを特徴づける性質は 3 つあります:入力にかかわらず出力のサイズは常に同じであること、同じ内容は必ず同じハッシュ値を生むこと、そして実務上、ハッシュ値から入力へ戻ることは不可能であること。暗号ハッシュが CRC32 のようなチェックサムと違うのは、この 3 点目です。
実際に使われるのは、大きく 2 つの用途です。 整合性の確認 :配布者がファイルのハッシュ値を公開し、あなたが再計算して照合します。一致すれば、ダウンロードが改ざんされていないことの証明になります。 コンテンツの比較 :文書そのものではなくハッシュ値を保管します — 一致すれば内容も同じで、中身が何かは一切明かされません。
いまどのアルゴリズムを選ぶべきか?
SHA-256 が既定の答えです:NSA が標準化し、世界中に採用され、あらゆる言語で実装され、既知の衝突もありません。 SHA-512 は 64 ビット CPU で大量データに向いており、この種のアーキテクチャでは姉妹版より速くなることが多いです。 SHA-384 は、単なる長い変種以上の意味を持ちません。鍵によるメッセージ署名なら、 HMAC-SHA-256 が定番です:秘密鍵とハッシュを組み合わせるため、鍵を持つ者だけが同じ値を生成できます。
また、 MD5 と SHA-1 は機密性の低い確認 — インデックス、キャッシュ、重複検出 — で役立ちます。耐久性より速度が重要な場面向けです。一方、 CRC32 は暗号ハッシュではありません:偶発的な破損は検出できますが、意図的な改ざんは数秒で作れてしまいます。
なぜ MD5 と SHA-1 は破れているとされるのか?
研究者たちが両者それぞれについて 同じハッシュ値を共有する 2 つの異なる文書を作り出したからです。MD5 ではその実証が 2004 年まで遡り、SHA-1 では 2017 年に SHAttered という名前で実際の衝突が作られました。衝突 1 つで署名は壊れます:攻撃者が文書を選び、配布者がただハッシュ化するだけなら、別の内容に署名させられてしまうのです。だから TLS 証明書、ソフトウェアの更新、パッケージ署名は、これらのアルゴリズムを捨てました。
ハッシュができないこと
ハッシュ化は暗号化ではありません:ハッシュ値は設計上不可逆ですが、内容を読めなくして保護するわけではありません。ハッシュは何も暗号化せず、TLS や暗号鍵の代わりにはならず、パスワード単体を守る役目もありません — それは意図的に遅く設計された bcrypt、scrypt、Argon2 の仕事です。さらに、2 回ハッシュしても強度は上がりません:壊れていない 1 つの関数で十分なところに、アルゴリズムをつなげただけの脆い層を足すだけです。
こんな方におすすめ
ディストリビューションのチェックサムを確認するシステム管理者や CIO、成果物を封印したり webhook を認証したりする開発者、バックアップの整合性をチェックする監査・コンプライアンス担当、文書を配らずに比較する記者やアナリスト、ハッシュ値・衝突・ソルトの概念を扱う暗号学を学ぶ学生 — そして、 コンテンツをハッシュ化する を、速く・痕跡を残さずに使いたいすべての方へ。補助ツールとしては、 パスワードジェネレーター、Base64 エンコーダー / デコーダー、 JWT デコーダー、 正規表現テスター と 文字数カウンター.