ハッシュ生成ツール
テキストから MD5、SHA-1、SHA-256、SHA-384、SHA-512 のダイジェストを生成します。すべての処理がブラウザ内でローカルに実行されるため、入力内容がアップロードされることはありません。
入力テキスト
0 文字
ハッシュ
上にテキストを入力するとハッシュが表示されます。
ハッシュ生成ツール の使い方
- 1
テキストを入力する
任意のテキストを入力パネルに入力するか貼り付けます。ハッシュはその UTF-8 バイト列から自動的に計算されます。
- 2
すべてのダイジェストを確認する
MD5、SHA-1、SHA-256、SHA-384、SHA-512 の結果がまとめて表示され、入力に合わせてそれぞれリアルタイムで更新されます。
- 3
適切なアルゴリズムを選ぶ
セキュリティに関わるものには SHA-256 以上を選び、MD5 や SHA-1 はセキュリティ用途でないチェックサムやレガシー互換に限って使います。
- 4
ハッシュをコピーする
任意の行で「Copy」をクリックすると、その16進ダイジェストがクリップボードにコピーされます。すべてブラウザ内で完結します。
ハッシュ関数を解説:ダイジェスト、整合性、そしてやってはいけないこと
ハッシュ関数がすること
暗号学的ハッシュ関数は、任意の長さの入力を受け取り、ダイジェストと呼ばれる固定長のバイト列を生成します。通常は16進数で表示されます。SHA-256 は、1文字を与えても1ギガバイトのファイルを与えても、常に256ビット、つまり64文字の16進数を出力します。この関数は設計上、一方向です。入力からダイジェストを計算するのは高速ですが、ダイジェストから入力を復元するのは計算上不可能です。この非対称性こそが眼目です。
この生成ツールは、同じテキストから MD5、SHA-1、SHA-256、SHA-384、SHA-512 の5つのダイジェストを一度に、利用できる場合は Web Crypto API を使って計算します。それらを並べて見ると、トレードオフが具体的にわかります。古い関数は短くて速く、SHA-2 ファミリーは長くてセキュリティ用途向けに作られています。
決定性と雪崩効果
ハッシュは完全に決定的です。同じ入力は常に同じダイジェストを、毎回、どのマシンでも、どの正しい実装でも生み出します。これこそがハッシュを比較と検証に役立たせている性質です。「hello」という単語を入力すると特定の SHA-256 文字列が得られ、明日もう一度入力すれば同じ文字列が得られます。
とはいえ、その対応づけは入力に対してきわめて敏感です。たった1文字を変える、1文字の大文字小文字を入れ替える、末尾にスペースを足すだけでも、優れたハッシュ関数はまったく異なる、見分けのつかないダイジェストを生成し、出力ビットのおよそ半分が反転します。これが雪崩効果であり、2つの入力がどれだけ似ていたかを推測するのにダイジェストが役に立たない理由です。ほとんど同じ入力がまったく無関係に見えるのは、不具合ではなく仕様なのです。
日常的な用途:整合性とチェックサム
ハッシュの最もよくある正当な用途は、データが無傷で届いたことを検証することです。ダウンロードページがファイルの SHA-256 を公開し、ダウンロード後に自分のコピーをハッシュ化して比較します。2つのダイジェストが1文字ずつ一致すれば、そのファイルは元のものとバイト単位で同一であり、転送中に切り詰められたり破損したりしていません。1ビットでも違えば、ダイジェストは一致しません。
同じ性質が重複排除と変更検知を支えています。ストレージシステムはブロックをハッシュ化して、バイト単位で比較せずに重複を見つけます。バージョン管理システムやキャッシュはコンテンツハッシュを識別子として使い、ビルドツールは入力をハッシュ化して作業を省けるかどうかを判断します。これらすべてにおいて、ハッシュはコンテンツのコンパクトで信頼できる指紋なのです。
ハッシュ化は暗号化ではない
この混同はいたるところにあり、しかも重要です。暗号化は可逆です。正しい鍵があれば元の平文を復元できます。あとでもう一度読むつもりのデータを保護することが目的だからです。ハッシュ化はわざと一方向です。鍵もなく復号の手順もありません。目的が、復元可能なコピーではなく指紋だからです。
ですから、「このテキストを秘密にしつつ後で読めるようにする」の答えにハッシュは決してなりません。何かを保存して取り戻す必要があるなら、欲しいのは暗号化です。元のものを保存せずに、後の入力が以前のものと一致するかどうかだけを確認できればよいなら、欲しいのはハッシュです。間違ったほうに手を伸ばすのは設計上の誤りであり、どれほどアルゴリズムが強力でも直せません。
MD5 と SHA-1 はセキュリティ用途では破られている
MD5 と SHA-1 がここで今も計算されているのは、セキュリティ目的でないチェックサム、レガシーな相互運用、古いシステムが生成した値との照合に依然として役立つからです。しかし両方とも暗号学的に破られています。研究者は実用的な衝突、つまり同じダイジェストにハッシュされる2つの異なる入力を作り出しており、SHA-1 についてはこれが実在する意味のあるファイルで実証されています。衝突は、ダイジェストがその入力を一意に識別するというセキュリティ上の保証を破壊します。
実用的なルールは単純です。攻撃者が一致を偽造して得をしうる場所、すなわち電子署名、証明書のフィンガープリント、改ざん検知ログ、衝突防止用の識別子では、MD5 や SHA-1 を決して使わないこと。セキュリティに敏感なものには SHA-256 以上を選びましょう。レガシーな関数は、敵が登場しない気軽な整合性チェックのために取っておいてください。
単純なハッシュ化がパスワードに不適切な理由
パスワードの SHA-256 を保存してログイン時に比較することで保管したくなりますが、これは重大な誤りです。汎用ハッシュは高速になるように作られており、その速さのせいで攻撃者は盗み出したデータベースに対して毎秒数十億もの候補パスワードを試せます。さらに悪いことに、同じパスワードを持つ2人のユーザーは同じダイジェストを生み、事前計算された参照表(レインボーテーブル)はよくあるパスワードを瞬時に逆引きできます。
適切なパスワード保管は、遅く、ソルト付きで、専用に作られた鍵導出関数、すなわち bcrypt、scrypt、Argon2 を使います。ユーザーごとに一意なランダムソルトが参照表を無力化し、意図的なコスト係数が総当たりを高くつくものにします。ソルトとは、同じパスワードでも保存される値が異なるように、ハッシュ化の前にパスワードと組み合わせる単なるランダムデータです。このツールはハッシュを理解し検証するために使ってください。ただし、認証情報の保管に素のままの SHA ダイジェストを使ってはいけません。
エンコーディング、出力形式、プライバシー
ハッシュはバイトに対して動作するので、テキストのエンコーディングを固定しなければ、ダイジェストはツール間で意味をなしません。この生成ツールはハッシュ化の前に入力を UTF-8 としてエンコードするので、アクセント付きの文字、ラテン文字以外の文字体系、絵文字のいずれも、ほかの UTF-8 ベースの実装と一致する標準的なダイジェストを生み出します。別の場所で計算したダイジェストが食い違うなら、エンコーディングの不一致、あるいは紛れ込んだ末尾の改行が通常の原因です。
すべてはブラウザ内でローカルに実行されます。入力がアップロードされたり、記録されたり、保存されたりすることは決してないので、トークンやファイルの内容、その他の機密値を安全にハッシュ化できます。便利な検証の習慣として、既知の入力を貼り付けて、ダイジェストがアプリケーションやダウンロードページが報告する値と一致することを確認するとよいでしょう。両者がバイト単位で一致すれば、双方が同じものをエンコードしハッシュ化しているということです。
よくある質問
このツールはどのハッシュアルゴリズムを生成しますか?
入力はサーバーに送信されますか?
MD5 と SHA-256 のどちらを使うべきですか?
ハッシュを元のテキストに戻せますか?
Unicode や絵文字を正しく扱えますか?
関連ツール
こちらの便利なツールもどうぞ