RevealTheme logo

ハッシュジェネレーター(MD5 / SHA)

暗号学的ハッシュを生成します:MD5、SHA-1、SHA-256、SHA-384、SHA-512。Web Crypto APIを使ってブラウザ内で実行されます。

暗号学的ハッシュとは何か、そしてどんなときに必要か?

暗号学的ハッシュ関数とは、任意の入力(数バイト、数ギガバイトのファイル、あるいは英語版Wikipedia全体)を、「ダイジェスト」または「ハッシュ」と呼ばれる固定長の出力に変換する決定論的なアルゴリズムです。SHA-256は256ビット(16進数64文字)を生成し、SHA-512は512ビットを生成し、MD5は128ビットを生成します。非暗号学的なもの(CRC32など)に対して、暗号学的なハッシュを定義する4つの性質があります。決定性(同じ入力→常に同じハッシュ)、雪崩効果(1ビットを変えるだけで出力ビットの約半分が変わる)、原像計算困難性(ハッシュを逆算して入力を復元できない)、そして衝突困難性(同じハッシュを生成する2つの入力を見つけられない)です。ハッシュ関数が破られるとき、通常はこの後者の2つの性質が崩れます。MD5(2004年)とSHA-1(2017年)に対する衝突攻撃は、これらをセキュリティ目的には不適切なものにしましたが、ファイルのチェックサムのような、敵対者のいない整合性チェックには依然として役立ちます。新しいセキュリティ関連の作業にはSHA-256またはSHA-512を使ってください。このツールはブラウザのWeb Crypto API(crypto.subtle.digest)を使用し、最新のデバイスではハードウェアアクセラレーションが効きます。そしてOpenSSL、Pythonのhashlibモジュール、Nodeのcryptoモジュールとバイト単位で同一の出力を生成します。

よくある活用例

  • ダウンロードしたファイルが、発行元の公開したSHA-256と一致するか検証する(LinuxのISO、セキュリティツールのリリースなど)。

  • キャッシュキー用のコンテンツアドレス可能な識別子を生成する(コンテンツのハッシュ→安定したURL)。

  • ファイル保存用の重複排除キーを作成する(同じハッシュ=同一ファイル)。

  • Webhook署名の検証を実装する:共有シークレットを用いたペイロードのHMAC-SHA256。

  • Gitスタイルのコンテンツハッシュ(ツリー/blob識別子用のSHA-1)を生成する。

  • キーとなる列のハッシュを計算して保存することで、データベース行の整合性を検証する。

よくある質問

なぜMD5はセキュリティ用途では非推奨なのですか?
暗号研究者たちは、同じMD5を生成する2つの異なる入力を構築する方法を発見しました。いったん衝突を見つけられるようになると、MD5は敵対的なシナリオにおいて信頼できる整合性のシグナルではなくなります(誰かがファイルをすり替え、同じハッシュを持つ別のファイルを生成しうるからです)。敵対者のいないチェックサム(ファイルは正しくダウンロードされたか?)にはMD5は依然として問題なく機能します。安全でないのは、デジタル署名や攻撃者の影響を受けうるものに対してだけです。
ハッシュは逆算できますか?
直接にはできません。暗号学的ハッシュは一方向関数です。ただし、(1)短い、またはエントロピーの低い入力(パスワード、ありふれたフレーズ)の場合、攻撃者はあり得るすべての入力のハッシュを事前計算(レインボーテーブル)して、あなたのものを探し出せます。だからこそパスワードのハッシュ化には、一意でランダムなソルトを使います。(2)任意長で高エントロピーの入力(ランダムなキー、ファイルの内容)の場合、逆算は計算上実行不可能です。
SHA-256とHMAC-SHA256の違いは何ですか?
SHA-256は単純なハッシュです。入力を持っている人なら誰でも同じハッシュを計算できます。HMAC-SHA256はキー付きハッシュで、計算するには共有シークレットが必要です。Webhookがこれを「ペイロードが既知の値と一致するか?」だけでなく「これはシークレットを知っている誰かが作成したものか?」を知りたいため、HMACを使います。キー付きのバリアントには当サイトのHMACジェネレーターをご利用ください。
SHA-256ではなくSHA-512を使うべきなのはどんなときですか?
SHA-512は出力ビット数が多く(512対256)、これにより衝突攻撃が理論上より困難になります。とはいえ、SHA-256はすでに、あらゆる現実的な期間を超えて安全です(衝突に対する実効的な強度は2^128)。SHA-512は、内部演算の幅が広いため、64ビットハードウェアでは時に高速になります。デフォルトではSHA-256を使い、具体的な理由がある場合にSHA-512を使ってください。
なぜ私のSHAハッシュは他のツールのものと異なるのですか?
考えられる原因は3つあります。(1)入力エンコーディングの違い:ハッシュ化されるバイトが一致している必要があります。UTF-8、UTF-16、Latin-1は、同じ表示テキストに対して異なるハッシュを生成します。このツールは入力をUTF-8としてエンコードします。(2)末尾の改行:改行を付け加えるツールもあれば、そうでないものもあります。(3)BOM(バイトオーダーマーク):一部のエディターがUTF-8ファイルに付加する、3バイトの隠れた接頭辞です。
機密データに使っても安全ですか?
はい。ハッシュの計算はWeb Cryptoを使ってあなたのブラウザ内でローカルに行われます。入力がデバイスから外に出ることはありません。ハッシュそれ自体は、(十分なエントロピーがあれば)入力を明かさないという意味で「機密」ではありません。ただし、低エントロピーのデータ(ソルトなしのパスワードなど)のハッシュを計算する場合、そのハッシュを見た人がレインボーテーブルを使って逆算できる可能性があることに注意してください。

関連ツール