改竄検出
改竄検出(かいざんけんしゅつ、英: manipulation detection, modification detection)とは、誤り検出の一種であり、暗号学的ハッシュ関数を使用することで改竄を検出すること。一般的な誤り検出は誤り検出訂正の一部であるが、改竄検出は故意に訂正能力を持ち得ないように設計されている。
各々の改竄検出の特徴の全ては、使用している暗号学的ハッシュ関数に依存する。
耐性
[編集]暗号学的ハッシュ関数が誤り訂正や消失訂正が不可能[注釈 1]なように設計されていることから、それを利用する改竄検出は一般的な誤り検出とは異なり意図的な改竄が困難になっている。これを意図的な改竄に耐性がある、と言う。
意図的な改竄とは、同じ符号語を生成する他の内容を求めることであり、この困難さは、総当たり以外に消失訂正をし得ない[注釈 1]ことと、総当たりに時間がかかるように符号を長く設定してあることに由来している。
この耐性がどんなに高くとも、改竄ついでに改竄検出符号を差し替えられてしまえば意味はない。これを防ぐためには電子署名などの、単なる検出符号にとどまらない対策が必要となる。逆に、この耐性がない一般的な誤り検出を用いて電子署名がしてあっても、同じ署名で異なる内容を得ることが容易であることから電子署名の意味がない。
このことから改竄検出は、電子署名のような認証方法とセットで語られる場合が多い。しかしメッセージ認証符号のように一体化する応用や、より手軽に改竄検出符号だけは別の方法[注釈 2]で配布するなどの対策もある。
消失訂正
[編集]改竄検出では消失訂正はできない[注釈 1]が、それが本当に消失したのであれば、その消失範囲を総当たりで再計算して同じ符号語となるものを探すことで高い確率で消失訂正が行なえる。
しかしそれが行なえることは保証されていない[注釈 3]。保証できるような数学的関連性を持っていないことが暗号学的ハッシュ関数の重要な特徴だからである。
同様に、消失範囲を総当たりする場合には「本当に」総当たりをしなければならない[注釈 4]。それはその消失範囲の中に同じ符号語となる値が複数含まれていて一つに定まらない可能性があるからである。一つに定まらなかったなら消失訂正に失敗したことになる。この一つに定まらない場合とは単なる衝突のことではないので、誕生日のパラドックスは発生しない。
このため改竄検出符号を用いて消失訂正を行なうことは(特に暗号学的ハッシュ関数の実行が高コストであることから)非現実的であり、自動再送要求などの再送可能な状況下での使用が想定される。もしも前方誤り訂正を必要とする場合には別途誤り訂正符号を設けるのが現実的であるが、この誤り訂正により改竄耐性が失われ大きなセキュリティホールとなる場合があるので併用の際には充分な注意が必要である。その他の攻撃の存在も考え合わせれば、前方誤り訂正をするのではなく、改竄が検出された段階でただちに全てを破棄して切断し、再接続するべきである。