使い方
- テキストを入力または貼り付けるか、「入力形式」を「16進数」に切り替えてバイト列を入力するか、確認したいファイルを「ファイルを開く」で選びます。
- 「アルゴリズム」は SHA-256 のままにし、「出力形式」で「16進数(小文字)」「16進数(大文字)」「Base64」のいずれかを選びます。
- ダウンロードページに記載されたチェックサムを「比較対象」欄に貼り付けます。「一致」と表示されれば、ファイルは同一です。
- 結果をコピーします。SHA-384、SHA-512 などのダイジェストは「すべてのアルゴリズム」の表からコピーできます。
SHA-256 とは
SHA-256 は SHA-2 ファミリーの中で最も広く使われているハッシュ関数で、NSA が設計し、2002 年に NIST が FIPS 180-2 で標準化しました。現在は FIPS 180-4 で規定されており、RFC 6234 にも同じアルゴリズムがリファレンスコード付きで記載されています。SHA-256 は 512 ビットのブロックを 32 ビット演算による 64 ラウンドで処理し、256 ビットのダイジェストを出力します。16進数では 64 文字、Base64 では 44 文字です。実用的な衝突攻撃や原像攻撃は知られておらず、次のような用途で標準的に使われています。
- TLS の証明書とハンドシェイク、コード署名
- Bitcoin(ブロックハッシュ、プルーフ・オブ・ワーク、トランザクション ID に SHA-256 を 2 回適用します。Base58Check アドレスのチェックサムも同じダブルハッシュから得られます)
SHA256SUMSなどのチェックサムファイル、コンテナイメージのダイジェスト(sha256:...)、サブリソース完全性(SRI)
ダウンロードしたファイルを検証する
ダウンロードしたファイルを開き、配布元が公開しているチェックサムを「比較対象」欄に貼り付けます。大文字と小文字は区別されず、Base64 の値も使えます。「一致」は、ファイルがチェックサムの作成元とバイト単位で同一であることを意味します。ただし、誰が作成したかは証明されないため、チェックサムはダウンロード元のミラーではなく、配布元の HTTPS サイトや署名付きの SHA256SUMS ファイルから入手してください。
テキストの場合、ハッシュ値は文字ではなくバイト列に対して計算されます。Windows の改行(CRLF)、バイトオーダーマーク、UTF-8 ではなく UTF-16 といった違いがあるだけで、SHA-256 はまったく別の値になります。ほかのシステムがハッシュ化したのとまったく同じバイト列を計算するには、「文字コード」の選択か、「入力形式」の「16進数」を使用してください。
伸長攻撃とパスワード
MD5、SHA-1、SHA-512 と同様に、SHA-256 も伸長攻撃(length extension attack)の影響を受けます。SHA-256(secret + message) と秘密の値の長さがわかれば、攻撃者は秘密を知らなくても、そのメッセージにパディングと任意のデータを続けたものに対する正しいハッシュ値を計算できます。鍵を使ってデータに署名したり認証したりするには、鍵とメッセージをまとめてハッシュ化するのではなく、HMAC 生成ツールで HMAC-SHA256 を使用してください。
この高速さも、単純な SHA-256 がパスワードの保存に適さない理由です。ハッシュ値を入手した人は、グラフィックカードが SHA-256 を計算できるのと同じ速さで推測を試せますし、同じパスワードからは同じハッシュ値ができます。反復回数を多く設定した Argon2id、scrypt、bcrypt、PBKDF2-HMAC-SHA256 を使用してください。いずれもソルトを付加します。
コマンドラインとコードで SHA-256 を計算する
$ printf 'abc' | sha256sum
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad -
sha256sum -c SHA256SUMS # Linux:ファイル一覧をまとめて照合
shasum -a 256 file.iso # macOS
certutil -hashfile file.iso SHA256 # Windows
Get-FileHash file.iso # PowerShell(既定のアルゴリズムは SHA256)
# Python
hashlib.sha256(data).hexdigest()
// Node.js
crypto.createHash('sha256').update(data).digest('hex')
abc の値は、規格に記載されたテストベクターです。上の入力欄に abc と入力すると、同じ結果が表示されます。「すべてのアルゴリズム」の表には、入力に対する SHA-384、SHA-512、SHA-1、MD5、CRC の値も表示されます。
エンコード例
| 入力 (UTF-8) | SHA-256 |
|---|---|
Hello, World! | dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f |
Base64.is | 63f2f446bc11a1f96175c0f77bdac08ca1b184ba42c3a42c34ddcbce00b1b800 |
你好 | 670d9743542cae3ea7ebe36af56bd53648b0a1126162e78d81a32934a711302e |
よくある質問
SHA-256 は復号できますか?
いいえ。SHA-256 は暗号化ではなく一方向のハッシュ関数です。オンラインの「復号ツール」は既知の入力の表からハッシュ値を検索しているだけなので、よく使われるパスワードや短い文字列は見つかっても、長い文字列やランダムな文字列は見つかりません。
SHA-256 が公開されているチェックサムと一致しないのはなぜですか?
よくある原因は、ダウンロードが不完全である、バージョンが異なる、ファイルそのものではなくファイル名をハッシュ化している、といったものです。「ファイルを開く」でファイル自体を読み込んでください。また、両方の値が同じアルゴリズムによるものかも確認してください。16進数で 128 文字の値は SHA-512 などの 512 ビットのハッシュ関数によるもので、SHA-256 ではありません。
SHA-256 のハッシュ値を Base64 で取得するにはどうすればよいですか?
sha256- 値(ただし sha384- のほうが一般的です)や HTTP の Content-Digest ヘッダーではこの形式が使われます。16進数と Base64 はどちらも同じ 32 バイトを表しており、Base64 → 16進数で相互に変換できます。SHA-256 と SHA-2 は同じものですか?
SHA-2 はファミリーの名前で、SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256 が含まれます。SHA-256 はその中で最もよく使われるものです。SHA-3(FIPS 202)は Keccak に基づく別の設計で、結果も異なります。
SHA-256 のハッシュ値の長さはどれくらいですか?
= で終わる 44 文字になります。SHA3-256 や BLAKE2s も同じ長さです。正体不明のハッシュ値については、ハッシュ識別ツールでこうした候補を一覧表示できます。