この回では、なりすましや改ざんを防ぐ「デジタル署名」の仕組みと役割を学ぶわ。公開鍵暗号を「逆向き」に使うのがポイントよ。
先生、デジタル署名ってハンコみたいなものだよね?
イメージは近いわね。
でもデジタル署名は、書いた人が本人だと確認できる(認証)だけでなく、内容が改ざんされていないこと(完全性)も同時に保証できるのよ。
公開鍵暗号を使うんですよね。
暗号化とは鍵の使い方が逆になると習いました。
そのとおり。
暗号化では受信者の公開鍵で暗号化するけれど、署名では署名者の秘密鍵で署名を作り、受信者は署名者の公開鍵で検証するの。
秘密鍵は本人しか持っていないから、正しく検証できれば本人が作った証拠になるわ。
でも文書全体を秘密鍵で暗号化するんですかぁ? 遅そうですぅ…
いい着眼点ね。
実際は文書全体ではなく、ハッシュ関数で作ったメッセージダイジェスト(ハッシュ値)を秘密鍵で暗号化するの。
これが署名の本体よ。
ハッシュ値ってなんだっけ?
元データから作る固定長の要約値ですね。
少しでも元データが変わると値が大きく変わるので、改ざん検知に使えます。
検証側は、受け取った文書から同じハッシュ関数でハッシュ値を計算し、署名を公開鍵で復号して得たハッシュ値と照合するの。
一致すれば「本人が作り、かつ改ざんされていない」と分かるわ。
もし途中で内容を書き換えられたら…ハッシュ値が変わって一致しなくなるんですねぇ。
そう。
だから改ざんが検知できる。
さらに、秘密鍵は本人しか持たないので「自分は署名していない」と後から否定できない、否認防止の効果もあるのよ。
じゃあ盗聴は防げるの? 中身は誰でも読めちゃう?
鋭いわね。
デジタル署名は機密性(秘匿)は保証しないの。
中身を隠したいなら別途暗号化が必要よ。
署名が守るのは完全性・認証・否認防止の3つ、と覚えてね。
RSAだけでなく、楕円曲線を使うECDSAなどの署名方式もありますね。
ええ。
方式は複数あるけれど、『秘密鍵で署名・公開鍵で検証』という原則は共通よ。
確認クイズ
デジタル署名に関する記述のうち、適切なものはどれか。
- 送信者は受信者の公開鍵で署名を生成し、受信者は自分の秘密鍵で検証する。
- 送信者は自分の秘密鍵で署名を生成し、受信者は送信者の公開鍵で検証する。
- デジタル署名を用いると、通信内容の盗聴(機密性の侵害)を防ぐことができる。
- デジタル署名は文書全体を秘密鍵で暗号化して作成するため、処理が高速である。
こたえを見る
正解: 2. 送信者は自分の秘密鍵で署名を生成し、受信者は送信者の公開鍵で検証する。
署名は送信者(署名者)の秘密鍵で生成し、送信者の公開鍵で検証するのが正しく、イが正解。アは鍵の対応が逆。ウはデジタル署名が保証するのは完全性・認証・否認防止で、機密性(秘匿)は保証しないため誤り。エは実際には文書全体ではなくハッシュ値(メッセージダイジェスト)に署名するため誤り。