ハッシュとメッセージ認証の試験問題への適用

ファイルの検証で重要なのは、何と何を比較し、その基準をなぜ信用できるかです。単純な衝突例、SHA-256の長さ、改ざんされた配布ページ、共有鍵による認証を通して保証の限界を確かめます。

この単元で学ぶこと

  • ハッシュの決定性・出力長・衝突を説明する
  • 信頼できる基準値でファイルを照合する
  • 裸のハッシュとHMACの違いを説明する
  • HMACの機密性と作成者証明の限界を判断する

本文解説

実際のSHA-256の例 ASCIIのabcはba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad、abdはa52d159f262b2c6ddb724a61840befc36eb30c88877a4030b65cbe86298449c9になります。入力は改行なしの3文字です。一文字の違いを検出できますが、これだけで全ての異なる入力に衝突がないと証明したことにはなりません。

衝突の玩具モデル 数字の合計を10で割った余りだけを返すと、12と21はどちらも3です。出力が0から9の10種類なら、異なる入力11個のうち少なくとも二つは同じ値になります。この弱い計算は実用暗号ではありませんが、出力数に限りがある以上、衝突の存在と見つけにくさを分ける必要があると分かります。

長さと表記 SHA-256の256ビットは32バイトで、16進表記は64桁です。16進1桁は4ビットなので64×4=256。先頭4桁だけやファイル名だけの比較へ勝手に置き換えず、指定算法の値全体を照合します。

見た目が同じでもバイトは違う 末尾の改行、文字コード、改行コードなどが違えば入力のバイト列は変わります。比較が不一致なら算法と対象ファイル、バイトの扱いを確認します。不一致だけで必ず攻撃と決め付けることも、一見同じ文章だから無視することも適切ではありません。

配布ページが改ざんされた場合 攻撃者がファイルと掲載ハッシュの両方を変更できれば、悪いファイルと一致する値を載せられます。正しい計算結果であることと、正当な配布物であることは別です。基準値を信頼できる経路で得るか、配布元へ結び付いた署名などを検証します。

HMACを使う事例 AとBがKを共有し、Aが本文とKから認証値を作り、Bが同じ条件で確かめます。途中で本文や値が変われば通常は検証に失敗しますが、誤ったKや別の文字コードでも失敗し得ます。失敗原因は条件を照合して調べます。

共有鍵で証明できないこと Kを知るB自身も有効なHMACを作れます。その値だけを第三者へ渡して、Aだけが作成できたと示すことはできません。また本文を平文で送ればHMACが付いても読まれます。送信者の公開鍵署名や暗号化と、共有鍵認証の役割を区別します。

パスワード保存の判断 高速ハッシュを一回計算しただけの保存では、攻撃者が多数の候補を試せます。ソルトと適切なパスワード用の計算方式・コストを利用します。異なるソルトは同じ秘密の単純比較や事前計算をしにくくしますが、短い秘密への推測を数学的に不可能にするものではありません。

図解

比較結果と信頼を分けて判断する
ハッシュ、HMAC、暗号化、署名は目的と保証範囲が異なる。

重要ポイント

  • SHA-256は256ビット=32バイト=16進64桁。
  • ハッシュは通常、元へ戻すための処理ではない。
  • 衝突の存在と発見の困難さを区別する。
  • 期待値の信頼がなければ出所を確認できない。
  • HMACだけでは本文の秘匿や送信者だけの作成証明にならない。

間違えやすい点

  • ハッシュ値の一致を内容の真実性と混同しない。
  • 先頭数桁だけの照合へ省略しない。
  • 高速ハッシュ一回でパスワード保存が完成したとしない。

用語解説

ハッシュ値
入力データへハッシュ関数を適用した結果の値。
衝突
異なる入力が同じハッシュ値を持つこと。
HMAC
ハッシュ関数と共有秘密鍵を使って、メッセージの認証用の値を計算する方式。
ソルト
パスワード等の検証用計算へ加える値。同じ秘密でも入力を異ならせるため等に用い、復号鍵ではない。

関連教材

参考資料

教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。

確認問題の出題・採点や学習履歴の保存にはログインが必要です。