『暗号技術入門』よりメッセージ認証コード、デジタル署名について

結城浩『暗号技術入門第3版 秘密の国のアリス』の一部をまとめました。

メッセージ認証コード・デジタル署名は、どちらもメッセージが書き換えられていないことを示す正真性(完全性)を確保するためや、メッセージが正しい送信者からのものであることを示す認証を実現するために用いられます。

一方、無関係な第三者に漏洩しないという、機密性を確保することはできません。

メッセージ認証コードとは

Message Authentication Code で、MACともいわれます。

コードというと第一印象は何かしらの文字列ですが、そうではなく

鍵に依存した一方向ハッシュ関数

です。メッセージをそのハッシュ関数にかけると、MAC値が得られます。

実際の使い方は以下になります。

  1. 送信者アリスと、受信者ボブは、同じ鍵を持っているとします。

  2. アリスは鍵を使い、メッセージのMAC値を計算します。

  3. アリスはメッセージとMAC値をボブに送信します。

  4. ボブはメッセージと自分が持つ鍵からMAC値を計算し、両者が一致すれば認証成功です。

デジタル署名とは

単語のイメージからは、自分の名前をサインしたものをデジタル上で表現するものと思われます。

実際は、自らの秘密鍵で暗号化したメッセージ*1そのものです。メッセージ全体が暗号化されることがあります。逆に、メッセージ自体は暗号化しない場合のデジタル署名をクリア署名といいます。

簡単に、デジタル署名の使用手順を記載します。

  1. 送信者アリスは、一方向ハッシュ関数*2でメッセージのハッシュ値を計算します。

  2. アリスは、自分の秘密鍵ハッシュ値を暗号化します。これが署名になります。

  3. アリスは、メッセージを署名を受信者ボブに送信します。

  4. ボブは、受信した署名をアリスの公開鍵で復号し、ハッシュ値を得ます。

  5. ボブは、受信したメッセージからハッシュ値を計算し、前の手順から得たハッシュ値と比較します。両者が一致すれば認証成功です。

メッセージ認証コードと、デジタル署名は役割や使い方が近いことが分かります。

メッセージ認証コードと、デジタル署名の使い分け

メッセージ認証コードは、第三者による証明と、否認防止ができません*3。一方、デジタル署名は誰でも検証できますし、否認防止ができます。

ならば、デジタル署名はメッセージ認証コードの上位互換なのでしょうか。

おそらくそれは違っていて、理由は対称暗号が公開鍵暗号より優れているポイントと同じです。

すなわちパフォーマンスが違います。

とはいえここからは個人の感想ですが、デジタル署名はハッシュ値に対して暗号化をかけているわけだし、パフォーマンスもそこまで問題にならなさそうな気がします。

*1:もしくはハッシュ化したメッセージを暗号化したもの

*2:鍵に依存しないのでメッセージ認証コードで使っているものとは別物

*3:どちらも、送信者と受信者が同じ鍵を持つので、どっちかそれを使ったかが証明できないため