ハッシュ生成ツール
テキストやファイルの MD5、SHA-1、SHA-2 ハッシュと HMAC。
このツールについて
任意のテキストやファイルの MD5、SHA-1、SHA-256、SHA-384、SHA-512、または秘密鍵を使った HMAC を計算します。ファイルはローカルで読み込まれ、アップロードされることはないため、ダウンロードしたファイルのチェックサム確認にも使えます。
使い方
- 入力として「テキスト」か「ファイル」を選びます。
- テキストを入力するか、ファイルをドロップします。ファイルはローカルで読み込まれ、アップロードされることはありません。
- MD5、SHA-1、SHA-256、SHA-384、SHA-512 を、16 進数または Base64 で一度に確認できます。
- 署名付きメッセージの場合は、HMAC をオンにして秘密鍵を入力します。
よくある質問
- ダウンロードしたファイルを検証するには?
- 「ファイル」を選んでダウンロードしたファイルをドロップし、SHA-256 の値をプロジェクトが公開しているチェックサムと比較します。1 文字でも違えば、同じファイルではありません。
- パスワードに MD5 や SHA-1 を使えますか?
- いいえ。高速すぎるうえ、既知の弱点があります。パスワードは Argon2、bcrypt、scrypt のような低速なパスワードハッシュで保存してください。
- HMAC とは何ですか?
- 秘密鍵と組み合わせたハッシュです。鍵を知っている人から送られ、改ざんされていないメッセージであることを証明します。Stripe や GitHub などのサービスの Webhook はこの方法で署名されています。
- ハッシュが他のツールと異なるのはなぜですか?
- たいていは入力内の目に見えない違いが原因です。末尾の改行、Windows の改行コード、異なる文字エンコーディングなどです。このツールでは、テキストは常に入力どおり UTF-8 としてハッシュされます。
- ハッシュは復号・逆変換できますか?
- いいえ。ハッシュは暗号化ではなく、元に戻すための鍵もありません。「MD5 を復号」できるとうたうサイトは、よく使われる文字列のハッシュを集めた巨大なテーブルから値を検索しているだけです。パスワードや電話番号のような短い入力をソルトなしでハッシュしてもデータが匿名にならないのも、同じ理由です。
- Webhook の HMAC 署名を検証するには?
- 「秘密鍵を使った HMAC」をオンにして署名用のシークレットを入力し、受信したままの生のリクエストボディを貼り付けてから、HMAC-SHA256 の 16 進数の値を署名ヘッダーと比較します。GitHub は X-Hub-Signature-256 で、sha256= という接頭辞の後に署名を送ります。整形し直した JSON では結果が変わります。また、タイムスタンプも署名に含めるプロバイダーがあるため、ドキュメントを確認してください。
- ハッシュをどのアルゴリズムで生成したかを見分けるには?
- 16 進数での長さを見てください。MD5 は 32 文字、SHA-1 は 40 文字、SHA-256 は 64 文字、SHA-384 は 96 文字、SHA-512 は 128 文字です。他のハッシュにも同じ長さのものがあるため、長さだけでアルゴリズムは断定できませんが、すぐに候補を絞り込めます。確認するには、ここで既知の入力をハッシュしてみてください。
ハッシュ関数とは?
暗号論的ハッシュ関数は、任意のサイズの入力を固定サイズのダイジェストに変換します。SHA-256 は、1 単語をハッシュしても 4 GB のファイルをハッシュしても、常に 256 ビット(16 進数で 64 文字)を出力します。同じ入力からは常に同じハッシュが得られ、1 ビット変えるだけで出力の約半分が変わります。ハッシュを逆算して入力を取り出すことはできず、できるのは推測した値をハッシュして結果を比較することだけです。
優れたハッシュは衝突耐性も備えています。同じダイジェストを持つ 2 つの入力を見つけることが、事実上不可能でなければなりません。MD5 と SHA-1 はこの性質を失っています。2017 年には SHA-1 の実際の衝突が公表され(SHAttered)、MD5 の衝突はノートパソコンで数秒で見つかります。どちらも偶発的なデータ破損の検出にはまだ使えますが、署名、改ざん検出など、攻撃者が関わる可能性があるものには SHA-256 か SHA-512 を使ってください。
コマンドラインで同じ SHA-256 ハッシュを得る方法
ターミナルで得た値と比較するには、まったく同じバイト列をハッシュします。Linux では sha256sum file.iso、macOS では shasum -a 256 file.iso、Windows の PowerShell では Get-FileHash file.iso を実行します。Get-FileHash のデフォルトは SHA-256 です。MD5 の場合、コマンドは md5sum、md5、Get-FileHash -Algorithm MD5 です。PowerShell は大文字の 16 進数を出力するので、2 つの値の見た目を揃えたい場合は、ここで「大文字」をオンにしてください。
テキストの場合、echo は改行を追加することに注意してください。echo hello | sha256sum は 5 バイトではなく 6 バイトをハッシュします。ここで入力した内容と一致させるには、printf hello | sha256sum か echo -n を使います。テキストボックスの上のバイト数で、正確な入力を確認できます。Subresource Integrity 属性など、ダイジェストを 16 進数ではなく Base64 で求めるシステムもあります。「出力エンコーディング」を切り替えれば、手で変換せずに得られます。
MD5、SHA-1、SHA-256、SHA-512 の違いと選び方
新しく使うなら、SHA-256 が標準です。高速で、どこでもサポートされ、実用的な攻撃は知られていません。SHA-512 はより長いダイジェストを出力し、64 ビット CPU では SHA-256 より高速なことが多いため、大きなファイルに向いています。SHA-384 は初期値の異なる SHA-512 を切り詰めたもので、TLS や Subresource Integrity でよく使われます。MD5 と SHA-1 は、古いシステムや、以前に公開された MD5 とファイルを照合するといった、セキュリティ目的以外のチェックサムにとどめてください。
Webhook のペイロードなどのメッセージを認証するには、シークレットとメッセージをまとめてハッシュするのではなく、HMAC を使います。シークレットとメッセージをつなげた単純な SHA-256 は伸長攻撃(length extension attack)に弱く、HMAC はこれを防ぐために設計されました。パスワードには、これらのどれでもなく、Argon2id や bcrypt のような低速でソルト付きのアルゴリズムが必要です。ランダムな ID や秘密のトークンには、ハッシュではなく UUID 生成ツールやパスワード生成ツールを使ってください。
うまく動かない、または結果がおかしいですか? このツールの問題を報告