同じ入力でSHA-256とSHA-512を計算する
このページのSHA-256ツールに、先頭や末尾に空白を付けず、大文字と小文字を保ってMultiVertoと入力します。結果の16進数はae71dfc48b890921で始まり、c68938f7185915aaで終わります。次にリンク先のSHA-512ツールへ、まったく同じ10文字を入力してください。こちらはcacbdf4e6ceeaa77で始まり、b71e458c3b7209d9で終わります。これは一つの結果を長短二通りに表示したものではなく、異なる二つのアルゴリズムの結果です。値が一致しなければ、入力した文字を細かく調べます。末尾にコピーされた改行、一つの空白、大文字の違い、文字コードの違いだけでもダイジェストは変わります。サイトは入力したテキストをUTF-8のバイト列にしてから、ブラウザー内で計算します。再現可能な検査には、アルゴリズム名、正確な入力、末尾の改行を含めたかどうかを記録してください。ダイジェストを復号して元の文章に戻すことはできません。
16進数で64文字と128文字になる理由
NISTのFIPS 180-4では、SHA-256の出力を256ビット、SHA-512の出力を512ビットと定めています。16進数の一文字は4ビットを表すため、通常のテキスト表記はそれぞれ64文字と128文字です。長い方は16進数として保存したり送ったりする際に、約二倍の文字数を必要とします。しかしSHA-512はSHA-256の末尾に文字を付け足したものではありません。内部の計算も異なります。受け取り側が指定した形式を最初に確認しましょう。配布ファイルの一覧、API、データベースの列がSHA-256を要求している場合、同じバイト列を正しく計算してもSHA-512の値とは照合できません。アルゴリズム名、ソルト、電子署名などを一緒に含む形式と、単純な16進数のダイジェストも区別します。付加情報にはそれぞれ独立した仕様があり、ハッシュの文字数だけで判断できません。
- 改行なしの正確な文字列MultiVerto
- ブラウザー内のUTF-8バイト列
- SHA-256 → 16進数64文字
- SHA-512 → 16進数128文字
信頼できる参照値で整合性を確認する
ある配布元がダウンロード用の信頼できるSHA-256ダイジェストを示しているとします。手元に届いたファイルの実際のバイト列からSHA-256を計算し、64文字すべてを比較します。この説明で示した先頭と末尾の一部だけを比べるのでは不十分です。一致すれば、照合したバイト列が参照値で表されたものと同じである強い根拠になります。SHA-512でも同じ手順を使えますが、参照値もSHA-512でなければなりません。このMultiVertoツールが計算するのは入力欄のテキストのハッシュです。ファイルの検査には、そのファイルのバイト列を正確に処理する別のツールが必要で、ファイル名を貼るだけでは検査になりません。参照ダイジェストは信頼できる経路から入手します。攻撃者がファイルと表示された参照値の両方を置き換えられるなら、秘密鍵を使わない単純なハッシュ比較だけでは配布元の本人確認はできません。その問題には電子署名や認証された通信経路が必要です。
衝突への耐性と互換性を一緒に考える
どちらも標準化されたSHA-2の関数です。衝突とは、異なる二つの入力が同じダイジェストを作ることを指します。一方、計算値が参照値と違う場合は、通常、入力バイト列または使用したアルゴリズムを確認します。SHA-512の長い出力は、衝突に対してより大きな理論上の余裕を与えます。ただし、出力の長さだけでシステム全体の安全性が決まるわけではありません。使用する規約、指定されたダイジェスト形式、実際の環境での性能、適用される要件も重要です。すでにSHA-256を指定しているチェックサムの仕組みを、128文字の方が安心に見えるという理由だけで変更しないでください。新しい仕組みで両方を使えるなら、選択した方式を明記し、実際のデータで動作を確かめます。SHA-256の値とSHA-512の値を直接見比べても、入力が変化したかは分かりません。方式が違えば、同じ入力からも異なる値が出ます。
単純なハッシュはパスワード保存に使わない
ソルトなどを加えないSHA-256やSHA-512の計算は高速です。ファイルの照合には便利ですが、パスワードのデータベースを盗まれたときには、攻撃者も候補を高速に試せます。OWASPは、パスワードの保存には個別のソルトを使い、Argon2idなど専用の適応型アルゴリズムを選ぶよう勧めています。SHA-512へ替えるだけ、あるいは高速なハッシュを二回計算するだけでは、適切なパスワード検証の仕組みになりません。ハッシュは暗号化とも異なり、復号鍵はありませんが、推測しやすい入力は試行によって見つかる可能性があります。MultiVertoはこのテキスト変換をブラウザー内で処理し、計算のために入力内容をアップロードしません。それでも、実運用のパスワードを説明用の入力欄へ貼るのは避け、アプリケーションで承認された管理方法を使います。チェックサムを保存するときはアルゴリズム名も一緒に残し、後日の比較に使えるようにしてください。