メッセージ認証は、文書の内容が改ざんされていないかどうかを検証する技術です。メッセージ認証の一つにディジタル署名があります。ディジタル署名は、印鑑と同じ役割を担っています。文章にディジタル署名を付与すると、内容が第三者によって改ざんされていないことや、文書の作成者が署名を行った本人であることを確認できます。ディジタル署名は、メッセージダイジェスト関数(ハッシュ関数)と暗号技術を利用して付与します。
1:メッセージダイジェスト関数
文書が改ざんされていないかどうかを確認するためにメッセージダイジェスト関数を利用します。メッセージダイジェスト関数はハッシュ関数の一種です。メッセージダイジェスト関数は、次の特徴を持っています。
・入力値のサイズと関係なく一定サイズの出力値が得られる。
・入力が異なれば、同じ出力値が出る可能性は極めて少ない。
・出力から入力を求められることが極めて難しい。
・すでに与えられている出力値と同じ出力値となる別の入力を見つけることが極めて難しい。
これらの特徴から、メッセージダイジェスト関数が利用する場合は、
出力値が同じであれば入力は同じとして扱います。出力値は、文書の「指紋」の役割をするのです。なお、出力値をメッセージダイジェストと呼ばれます。
2:ディジタル署名
ディジタル署名は、メッセージダイジェストを署名者の秘密鍵で暗号化したものです。
ディジタル署名の付与の手順として、
①メッセージをメッセージダイジェスト関数(ハッシュ関数)に入力して、メッセージダイジェストを作る。
②メッセージダイジェストを署名者Aの秘密鍵で暗号化し、ディジタル署名とする。
③メッセージとディジタル署名をまとめて1ファイルとして送信する。
ディジタル署名が付与さえrている文書を受けった人は、ディジタル署名を検証して、
・内容が第三者によって改ざんされていないか
・文書の細工性者が署名を行なった本人であるか
を確認します。
ディジタル署名は次の手順で検証します。
④ファイルからメッセージ部分を取り出して、メッセージダイジェスト関数(ハッシュ値)に入力してメッセージダイジェストを作る。
⑤ファイルからディジタル署名を取り出して、署名者A
の公開鍵で復号し、メッセージダイジェストを入手する。
⑥④のメッセージダイジェストと⑤のメッセージダイジェストを比較し、一致することを確認する。
⑥で、2つのメッセージダイジェストが一致しない場合は、文書が改ざんされているか、文書の作成者が署名を行なった本人でないかのどちらかです。どちらにしても、そのような文書は不要ですから破棄してしまい、再度Aに送り直してもらうよう要求すれば良いです。
なお、ディジタル署名を付与してもメッセージが暗号化されるわけではありません。メッセージを第三者に読まれないようにするには、ディジタル署名を付与した上で、さらに、メッセージを暗号化する必要があります。
3:公開鍵署名書と認証局(CA)
Aのディジタル署名を検証するには、Aの公開鍵が必要です。公開鍵ですrから必要に応じてAからもらうことができます。しかし、BはAに成り済ました何者かに騙され、Aの偽公開鍵を取得してしまうかもしれません。Aの偽公開鍵では、署名の認証は正しく行えません。
このような場合、中立的な第三者が、「確かにこの公開鍵はAの公開鍵である」という保証をすれば、騙される危険性は減ります。公開鍵が確かなものであるということを保証する文書が公開鍵証明書(ディジタル証明書)です。公開鍵証明書を発行する組織を認証局(CA)と言います。CAは、Aの公開鍵情報にCAの秘密鍵を使って署名を付与し、公開鍵証明書を発行します。公開鍵証明書はX.509という形式を使います。また、執行した公開鍵証明書の一覧(CRL)も発行します。
Bは、はじめにAの公開鍵署名書を受け取り、公開鍵証明書の内容を検証します。その後、公開鍵証明書に記載されていたAの公開鍵を利用して、Aのディジタル証明書を検証すれば良いのです。
CAによって公開鍵の正当性を確保し、セキュリティレベルを高めた環境のことを、PKI(公開鍵基盤)と言います。