文字列ハッシュビジュアライザー
テキストを入力して、カラーブロックでMD5、SHA-1、SHA-256、SHA-512ハッシュを計算して視覚的に比較します。
仕組み
- テキストを入力: 文字列、パスワード、ファイル内容、識別子、ハッシュするテキストを入力または貼り付けます。
- アルゴリズムを選択: ニーズに応じてMD5、SHA-1、SHA-256、SHA-384、SHA-512を選択します。
- ハッシュをコピー: ハッシュ値が瞬時に表示されます。保存、比較、検証のためにコピーします。
なぜ文字列ハッシュジェネレーターを使うのか?
ハッシュは、任意の文字列をその内容に固有の固定長のフィンガープリントに変換します。1文字でも変更すると、完全に異なるハッシュが生成されます。これは、データ整合性の検証、パスワードの安全な保存、キャッシュキーの生成、レコードの重複排除、コンテンツベースの識別子の作成に不可欠です。ハッシュは一方向であるため、ハッシュから元のテキストを取得することはできません, 機密データを安全に保存できます。
機能
- 複数のアルゴリズム: 1つのツールにMD5、SHA-1、SHA-256、SHA-384、SHA-512すべて。
- リアルタイムハッシュ: 入力中にハッシュが瞬時に更新されます, ボタンクリック不要。
- 大文字小文字を区別: 「Hello」と「hello」は、設計により異なるハッシュを生成します。
- クリップボードにコピー: ハッシュのワンクリックコピー。
- 100%ブラウザ内: 文字列がデバイスを離れることはありません, 機密コンテンツに安全。
よくある質問
どのハッシュアルゴリズムを選択すべきですか?
機密の用途(パスワード、署名)には、SHA-256またはSHA-512を使用します。MD5とSHA-1はセキュリティのために非推奨ですが、暗号的強度が必要ないチェックサムとキャッシュキーには引き続き有用です。
保存するパスワードのハッシュにこのツールを使用できますか?
文字列ハッシュは一方向ハッシュを提供しますが、パスワードを保存するには、salt と反復を含む bcrypt、Argon2、PBKDF2 などの鍵導出関数を使用する必要があります。シンプルな SHA ハッシュは速すぎてレインボーテーブル攻撃に脆弱です。
ハッシュは可逆ですか?
いいえ。ハッシュ関数は一方向です, ハッシュから元の文字列を取得することはできません。2つの文字列が同じハッシュを生成する場合(衝突)、それはアルゴリズムの欠陥です。SHA-256とSHA-512には実用的な既知の衝突はありません。
ハッシュ関数の35年の歴史:MD5からBLAKE3まで
暗号学的ハッシュ関数は、長い破壊と置換のサイクルを経て進化しました。MD5は、Ronald RivestによってRFC 1321(1992年4月)でMD4の後継として公開されました。その128ビット出力は10年以上にわたって十分に強いと考えられていましたが、2004年にWangとYuが最初の実用的な衝突を発表しました。2008年までに、研究者たちはMD5の衝突を使って悪意のあるSSL認証局を偽造しました。SHA-1はNSAによって設計され、NISTによってFIPS 180-1(1995)で標準化されました。その160ビット出力は2017年2月まで持ちこたえ、GoogleとCWI AmsterdamがSHAttered攻撃を発表し、同じSHA-1ハッシュを持つ2つのPDFを生成しました。コスト:GPUで約6,500 CPU年相当。SHA-2(SHA-224、SHA-256、SHA-384、SHA-512)もNSAから、FIPS 180-2(2002年8月)で公開されました。SHA-1と同じMerkle-Damgård構造を使用していますが、より大きな状態とより多くのラウンドがあります;今日、完全版に対する実用的な攻撃は存在しません。SHA-3(Keccak、Bertoniら)は公開コンペティションの後にNISTによって選択され、FIPS 202(2015年8月)で標準化されました。SHA-3は完全に異なるスポンジ構造を使用し、SHA-2に影響する長さ拡張攻撃に対して免疫があります。NISTファミリー以外では、BLAKE2(Aumassonら、2012)とBLAKE3(2020)が、MD5の速度でSHA-3クラスのセキュリティを提供します;BLAKE3は最新のラップトップで1 GBのファイルを約1秒でハッシュします。
選択するアルゴリズム:クイック決定表
- MD5(128ビット)。2004年から破られている。非セキュリティ用途では許容:キャッシュバスティング、両側を制御するファイルの重複排除、偶発的な破損に対するチェックサム。パスワード、署名、または敵対的なコンテキストでは絶対に使用しないでください。
- SHA-1(160ビット)。2017年(SHAttered)から破られている。Gitはコミットハッシュにまだ使用していますが、2017年3月にGitは既知の攻撃パターンを拒否するために衝突検出(SHA-1DC)を埋め込み始めました。新しいコードではSHA-1を避けてください。
- SHA-256(256ビット)。現在の主力。Bitcoin、TLS証明書、Linuxパッケージ署名、JWT署名(HMAC-SHA256)、およびほとんどの最新APIで使用されます。ハードウェアで高速(Intel SHA拡張、ARMv8暗号化拡張)。汎用ハッシュのデフォルト選択。
- SHA-512(512ビット)。同じファミリー、より大きな出力。内部状態が64ビットであるため、64ビットマシンでSHA-256よりわずかに高速。追加の衝突耐性が必要な場合、または256ビットが制限的に感じる場合(まれ)に使用します。
- SHA-3 / Keccak(224/256/384/512ビット)。SHA-2の標準化されたスポンジ代替。SHA-2に影響する長さ拡張攻撃に対して耐性があります(HMACなしでキー付きハッシュを構築する場合に関連)。ほとんどのCPUでソフトウェア的にSHA-256より遅いが、異なるクラスの攻撃に対して免疫です。
- BLAKE2 / BLAKE3。現代の非NIST代替。BLAKE3は広く利用可能な最速の暗号化ハッシュで、並列性のおかげでおおよそmemcpyの速度でハッシュします。
b3sum、IPFS、およびWireGuard VPNプロトコルで使用されます。crypto.subtleにはまだありませんが、ライブラリ経由で利用可能。
ハッシュが実際に使用される場所
- ファイル整合性検証。LinuxディストリビューションはISOダウンロードの横にSHA-256サムを公開し、ファイルが転送中に破損したり攻撃者によって変更されたりしていないことを確認できます。
sha256sum -c ubuntu.sha256を10秒で。 - コンテンツアドレス指定ストレージ。GitはSHA-1(SHA-256に移行中)を使用して、すべてのコミット、ツリー、blobを識別します。IPFS、Dockerイメージ(sha256:...)、Nixストアパスはすべてコンテンツアドレス指定を使用します。ハッシュが識別子です。
- キャッシュキー。URLまたはシリアライズされたリクエストのハッシュは、どのストレージシステムにも適合する固定長キーを提供します。Stripe、GitHub、すべてのCDNがキャッシュルックアップにこれを使用します。
- 重複排除。バックアップシステム(Time Machine、Borg、Restic)はファイルブロックをハッシュし、一意のもののみを保存します。異なるファイル間の2つの同一の4 KBブロックは1つの保存されたチャンクにマッピングされます。
- HTTP ETags。WebサーバーはレスポンスのハッシュをETagヘッダーとして送信します。ブラウザは
If-None-Matchでそれを送り返します;変更されていない場合、サーバーは304を返します。冗長なダウンロードを節約します。 - JWTとwebhookシグネチャ。JSON Web Tokensは、HMAC-SHA256(仕様ではHS256)でペイロードに署名します。Stripe、GitHub、Twilio webhooksはすべてペイロードに署名するため、転送中に改ざんされていないことを確認できます。
- ブロックチェーン。Bitcoinはプルーフ・オブ・ワークとブロックリンクにダブルSHA-256を使用します。EthereumはKeccak-256(SHA-3バリアント)を使用します。ブロックチェーンの概念全体は、同じハッシュを持つ2つの入力を見つけることが計算上実行不可能であるという特性に依存しています。
お金を失ったり物を壊したりするハッシュの間違い
- パスワード保存にSHAハッシュを使用する。SHA-256は高速:最新のGPUは毎秒~100億のSHA-256ハッシュを計算します。漏洩したデータベースで、攻撃者は数分で辞書のすべての単語とすべての一般的な変換を試すことができます。Argon2id(2015年Password Hashing Competitionの勝者)、bcrypt、またはscryptを使用してください。それらは意図的に遅く、メモリハードです。
- ソルトを忘れる。遅いハッシュでも、ソルトなしでハッシュされた同じパスワードはユーザー間で同じ出力を生成し、レインボーテーブルや重複パスワードのサイドチャネル検出を可能にします。常にハッシュと一緒にユーザーごとのランダムソルトを保存してください。
- SHA-2への長さ拡張攻撃。SHA-256での
hash(secret + message)は脆弱:ハッシュとsecretの長さを知っている攻撃者は、secretを知らずに任意のデータを追加して結果のハッシュを計算できます。代わりにHMAC-SHA256を使用してください。SHA-3とBLAKE2/3は免疫です。 - 一定時間の文字列比較。JavaScriptで
==でハッシュ(または任意の秘密値)を比較するとタイミングを通して情報が漏れます:最初のバイトの不一致で終了する関数により、攻撃者は多くのリクエストにわたってバイトごとに正しいハッシュを学習できます。Nodeではcrypto.timingSafeEqual、Pythonではhmac.compare_digestを使用してください。 - エンコーディングを指定せずに文字列をハッシュする。Python 3の
sha256("hello")はエラー(バイトが必要);NodeではUTF-8がデフォルト;PHPとJavaではデフォルトが異なる場合があります。異なるエンコーディングは異なるハッシュを生成します。ハッシュする前に常に明示的にUTF-8としてエンコードしてください。 - 「短いID」のためにハッシュを切り詰める。SHA-256の64ビットスライスは短いIDに便利ですが、誕生日のパラドックスは衝突が~2³²項目(約40億)で現れ、2⁶⁴ではないことを意味します。切り詰める場合は、予想されるスケールでの衝突処理を計画してください。
- ハッシュ出力をURL安全な文字列として扱う。生のハッシュバイトは印刷不可能です。hex(最も一般的)またはbase64urlを使用してください。標準base64には
+と/が含まれ、URLとファイル名で壊れます;base64urlが安全なバリアントです。
その他のよくある質問
MD5とSHA-1がまだハッシュを生成するのに「破られている」のはなぜですか?
「破られた」とは、攻撃者がブルートフォースより速く衝突を生成できることを意味します。MD5の場合、今日のラップトップで同じハッシュを持つ2つの入力を見つけるのに数秒かかります。SHA-1の場合、2017年に6,500 CPU年かかり、それ以来劇的に減少しました。ハッシュは機械的にはまだ機能します;破られているのは、それらが「衝突耐性」であるというセキュリティ保証です。非敵対的使用(信頼するファイルを偶発的な破損に対してチェックサム)の場合、MD5はまだうまく機能します。敵対者を含むものはどちらも安全ではありません。
量子コンピュータがSHA-256を破ることを心配すべきですか?
思っているよりも少なく。Groverのアルゴリズムは256ビットハッシュに対するプリイメージ攻撃を2²⁵⁶から2¹²⁸の古典的等価作業に高速化しますが、それでも事実上不可能です。対称プリミティブ(ハッシュ、AES)は、キー/出力サイズを倍にすることで量子コンピューティングを生き残ります。公開鍵暗号(RSA、ECDSA)が量子攻撃で深刻に倒れるものであり、それゆえに2024年8月に公開されたNISTポスト量子標準(ML-KEM、ML-DSA、SLH-DSA)です。今日SHA-256を使用している場合、ポスト量子時代のSHA-512で十分以上でしょう。
ハッシュとHMACの違いは何ですか?
ハッシュ(SHA-256)はキーなし:入力を持つ誰でも同じ出力を計算できます。HMAC(ハッシュベースのメッセージ認証コード)は秘密鍵でハッシュをラップするため、鍵を知っている人だけがタグを計算または検証できます。RFC 2104(1997)で定義されたHMACは、メッセージを対称的に「署名」する標準的な方法です(送信者と受信者が秘密を共有)。webhookシグネチャ、JWT HS256、APIリクエスト署名にはHMAC-SHA256を使用してください。secret + messageでの単純なSHA-256は長さ拡張のために安全ではありません。
異なるライブラリが同じ文字列に対して異なるハッシュを与えるのはなぜですか?
3つの一般的な原因。第一に、文字エンコーディング:UTF-8 vs UTF-16 vs Latin-1は非ASCII文字列に対して異なるバイトを与え、したがって異なるハッシュ。常に明示的にエンコードしてください。第二に、行末:"hello\n"と"hello\r\n"は異なってハッシュ;Windows-vs-Unixファイルチェックサムはこの理由でしばしば異なります。第三に、出力フォーマット:小文字hex vs大文字hex vs base64は異なる値に見えますが、同じバイトを表します。比較する前に入力と出力のフォーマットを正規化してください。
ここでハッシュするときに私の入力はサーバーに送信されますか?
いいえ。4つのハッシュすべてが、組み込みのWeb Crypto API(crypto.subtle.digest)を使用してブラウザで計算されます。DevToolsでNetworkタブを開き、入力に入力すると、ゼロのアウトバウンドリクエストが表示されます。資格情報、トークン、またはデバイスを離れずにハッシュしたいプライベート値に対して安全。