「デジタル署名」とは
デジタル署名とは、電子文書や電子メール、ソフトウェアなどについて、誰が署名したものか、そして署名後に内容が改ざんされていないかを確認するための技術です。
紙の文書では、本人が署名や押印をすることで「この人が作成・承認した文書である」ことを示します。デジタル署名は、これに似た役割をコンピュータ上で実現するものです。
デジタル署名によって主に確認できるのは、次の二つです。
- 署名者の確認:その署名が、対応する秘密鍵を持つ者によって作られたこと
- 改ざんの検出:署名した後に文書やデータが変更されていないこと
一方、デジタル署名を付けただけでは、文書の内容を第三者から隠すことはできません。内容を読まれないようにするには、別に暗号化が必要です。
デジタル署名で使う鍵
デジタル署名では、公開鍵暗号方式と同じように、対になった二つの鍵を利用します。
- 秘密鍵:署名を作成するときに使います
- 公開鍵:署名を検証するときに使います
秘密鍵は署名者だけが持ち、他人に渡してはいけません。一方、公開鍵は署名を確認する人に公開してかまいません。
例えば、Aさんが文書に署名する場合は、
Aさんの秘密鍵で署名を作成
→ Aさんの公開鍵で署名を検証
という関係になります。
受信者Bさんの秘密鍵や公開鍵を使って、Aさんの署名を検証するわけではありません。
デジタル署名の仕組み
デジタル署名の典型的な一つのモデルを示します。以下の方法では、大きな文書全体をそのまま秘密鍵で処理するのではなく、通常はハッシュ関数を利用します。
1.送信者がハッシュ値を求める
送信者は、送信する文書をハッシュ関数に入力し、短いデータであるハッシュ値を求めます。
文書
↓ ハッシュ関数
ハッシュ値
ハッシュ値は、元のデータが少しでも変化すると通常は大きく異なる値になります。また、あるハッシュ値から、そのハッシュ値を生じる元のデータを求めることは困難です。そのため、データが変更されたかどうかを調べるために利用できます。
2.秘密鍵を使って署名を作成する
送信者は、自分の秘密鍵を使って、ハッシュ値に対するデジタル署名を作成します。
そして、次の二つを受信者へ送ります。
3.受信者がハッシュ値を求める
受信者は、送信者の公開鍵を使ってデジタル署名を検証し、署名に対応するハッシュ値を求めます。
同時に、受け取った文書について自分でもハッシュ値を計算します。
4.結果を比較する(検証)
二つのハッシュ値を比較して一致していれば、次のことを確認できます。
- 署名後に文書が変更されていない
- その公開鍵に対応する秘密鍵によって署名された
途中で文書が書き換えられていれば、受信した文書から計算したハッシュ値が変化するため、署名の検証に失敗します。
デジタル署名と「改ざん」
デジタル署名の重要な役割の一つが、完全性の確認です。
情報セキュリティにおける完全性とは、情報が勝手に変更されたり破壊されたりしていない状態を指します。
例えば、
「商品を10個注文する」
という文書に署名した後、途中で、
「商品を100個注文する」
へ変更されたとします。
文書が変化するとハッシュ値も変化するため、受信者が署名を検証すると、元の署名と一致しなくなります。したがって、文書が署名後に変更されたことを検出できます。
ただし、デジタル署名から「どの文字が変更されたのか」まで必ず特定できるわけではありません。また、改ざんされた文書を自動的に元へ戻す機能でもありません。
公開鍵だけでは「本人」とは限らない
デジタル署名では、その公開鍵が本当に署名者本人のものなのかという問題があります。
例えば、Aさんから文書と公開鍵が送られてきたとしても、攻撃者が途中で、
「これがAさんの公開鍵です」
と自分の公開鍵へすり替える可能性があります。
そのため、
公開鍵で署名を検証できた
という事実だけから、
その公開鍵が間違いなくAさん本人のものである
とは限りません。
そこで利用されるのが電子証明書です。
電子証明書
電子証明書は、公開鍵とその所有者の情報を結び付けるための電子的な証明書です。
電子証明書には、次のような情報が含まれます。
- 公開鍵
- 公開鍵の所有者に関する情報
- 証明書を発行した組織に関する情報
そして、証明書を発行する認証局(CA:Certification Authority)が、その証明書にデジタル署名を付けます。
利用者は認証局の署名を検証することで、
- 信頼する認証局が発行した証明書であること
- 証明書が発行後に改ざんされていないこと
を確認できます。
このようにして、
署名者本人 ⇔ 公開鍵
という対応を信頼できるようにします。
したがって、「Aさんのデジタル署名を検証する」という場合には、正確には次の二段階で考える必要があります。
- Aさんの公開鍵で署名を検証する
- 電子証明書などによって、その公開鍵が本当にAさんのものか確認する
デジタル署名で確認できること
デジタル署名と電子証明書を適切に利用すると、主に次の性質を確認できます。
完全性
署名後にデータが改ざんされていないことを確認できます。
真正性
適切に公開鍵の所有者まで確認できれば、その署名が誰に対応するものなのかを確認できます。
例えば、ソフトウェアに付けられたデジタル署名を確認することで、
- 配布後にソフトウェアが改ざんされていないか
- 信頼する発行元によって署名されたものか
を判断する手掛かりになります。
否認防止
電子商取引や電子契約では、後から、
「私はその注文をしていない」
「私はその文書を承認していない」
と主張されることが問題になります。
署名に使った秘密鍵が適切に管理され、本人との対応を信頼できる状況であれば、デジタル署名は、その行為を後から否定されにくくする否認防止にも役立ちます。
ただし、実際の否認防止は、鍵の管理方法や電子証明書、操作記録なども含めた仕組みによって実現されます。
デジタル署名と暗号化の違い
デジタル署名と公開鍵暗号は同じように公開鍵と秘密鍵を利用するため、混同しやすい技術です。しかし、目的が異なります。
| 技術 | 主な目的 | 主に使う鍵 |
| デジタル署名 | 署名者と改ざんの有無を確認する | 署名者の秘密鍵で署名し、署名者の公開鍵で検証する |
| 公開鍵暗号による暗号化 | 第三者に内容を読まれにくくする | 受信者の公開鍵で暗号化し、受信者の秘密鍵で復号する |
例えば、AさんがBさんへ秘密の文書を送り、さらにAさんが作成した文書であることも確認できるようにするとします。
この場合、
- 機密性を確保するため、Bさんの公開鍵で暗号化する
- デジタル署名を付けるため、Aさんの秘密鍵で署名する
という組合せになります。
受信したBさんは、
- Bさんの秘密鍵で復号する
- Aさんの公開鍵で署名を検証する
ことになります。