一方向ハッシュ関数は一方通行の暗号化!?
- セキュリティを高めるためには、暗号だけでは足りない!
- セキュリティには鍵がキーになる!
- 対称暗号(共通鍵暗号)といえば、AES!
- セキュリティを高める一つの基準「CRYPTREC」は大切!
- 非対称暗号(公開鍵暗号)といえば、RSA!
- ハイブリッド鍵暗号システムは対称(共通鍵)暗号と非対称(公開鍵)暗号のいいとこどり!
- 一方向ハッシュ関数は「一方通行の指紋」だった!
- メッセージ認証コードの弱点は「否認防止」だった!
- 「誰が作成したの?」を解消するデジタル署名!
- 証明書を証明する最上位認証局(ルートCA)は最重要!
はじめに
2025年10月のプロジェクトマネージャ試験受験を終え、2026年春の情報処理安全確保支援士に向けて勉強中です。
セキュリティに関して無知であるため、資格勉強の傍ら暗号技術入門 第3版 秘密の国のアリスを読んでいます。
本記事は、そんなセキュリティ初心者による読書感想文です。
本記事では、書籍のうち「第1部」と「第2部」の内容のみ扱います。そのため、より詳しい内容や「第3部」については書籍をご参照ください。
目的
認証技術のうち、一方向ハッシュ関数について学習します。
対象
一方向ハッシュ関数についてザックリイメージを持ちたい方を対象としています。
一方向ハッシュ関数
インプット(メッセージ)からアウトプット(ハッシュ値)を生成し、メッセージの完全性を検証するために用いられます。
ハッシュ値はビット列ですが、メッセージ長には関係なく固定サイズのハッシュ値が得られます。
例えば、SHA-256という一方向ハッシュ関数では、ハッシュ値は常に256ビット(32バイト)です。
つまり、送信元で算出されたハッシュ値と受信先で算出されたハッシュ値を突合することで、該当データが本当に送信者のものであるかを検証することができます。
一方向ハッシュ関数の性質
上記に加え、「メッセージが異なればハッシュ値も異なる」という性質もあります。
当然と言えば当然ですよね。
ただ、2つの異なるメッセージから同じハッシュ値が生成される「衝突(Collision(= コリジョン))」が発生し得ます。
そのため、一方向ハッシュ関数で完全性を検証するためには、衝突の発生は許されません。
衝突
衝突は理論上発生することがありますが。一方向ハッシュ関数で発生させてはいけません。
したがって、一方向ハッシュ関数には、衝突が発生しない性質「衝突耐性(CollisionResistance)」を持つ必要があります。
また、衝突耐性にも弱衝突耐性と強衝突耐性があり、中でも一方向ハッシュ関数には強衝突耐性をもっている必要があります。
弱衝突耐性と強衝突耐性
弱衝突耐性とは、あるメッセージと同じハッシュ値を持つ別のメッセージを見つけることが困難な性質です。
一方で、強衝突耐性とは、異なる2つのメッセージから生成されたハッシュ値の一致を見つけることが困難な性質です。
一方向ハッシュ関数では、強衝突耐性を持つことが重要です。
一方向性
一方向ハッシュ関数には、強衝突耐性を持つ必要がありますが、一方向性も持つ必要があります。
これは、ハッシュ値からメッセージを逆算できない性質です。
つまり、メッセージからハッシュ値を計算することはできても、ハッシュ値からメッセージを計算することはできません。
一方向ハッシュ関数の具体例
具体的な一方向ハッシュ関数は下記のとおりです。
- MD4, MD5
- SHA-1, SHA-256, SHA-384, SHA-512
MD4, MD5
どちらも128ビットのハッシュ値を持つ一方向ハッシュ関数です。
しかし、MD4は衝突が発見され、MD5は強衝突耐性が破られているため、どちらも安全ではありません。
なお、強衝突耐性が破られているとは、同じハッシュ値を持つ2つのメッセージを作り出す攻撃が可能となっていることを指します。
SHA-1, SHA-256, SHA-384, SHA-512
どれも、NIST(NationalInstituteofStandardsandTechnology)で作成された一方向ハッシュ関数です。
SHA-1は160ビットで、そのほかは末尾の数字分ビットのハッシュ値を持ちます。
SHA-1以外をまとめてSHA-2と呼び、SHA-1は強衝突耐性が破られましたが、SHA-2は破られていません。
SHA-3の選定
SHA-1の強衝突耐性が破られたことを受け、NISTは新しい一方向ハッシュ関数の選定を開始しました。
これをSHA-3と呼びますが、コンペ方式による標準化も行いました。
その結果、Keccak(ケチャック)と呼ばれるアルゴリズムが選定されました。
※ Keccakの内部構造など詳しい内容は本書をご参照ください。
一方向ハッシュ関数で解決できない問題
一方向ハッシュ関数は改ざんを検出できますが、なりすましを検出することはできません。
したがって、本当に想定している相手のものかどうかは認証によって検証しなくてはいけません。
認証を行うための技術が、メッセージ認証コードとデジタル署名です。
