はじめに
電子文書に署名が付いていても、それだけで「本人が作成した」「内容が正しい」と判断できるわけではありません。確認すべきなのは、署名がどの秘密鍵で作られ、その秘密鍵に対応する公開鍵が誰と結び付いているか、署名後にデータが変わっていないかです。
この記事で扱うデジタル署名は、秘密鍵で署名値を作成し、対応する公開鍵で検証する仕組みです。適切に検証すれば、署名対象のデータが署名後に変わっていないことと、公開鍵に対応する秘密鍵を使って署名値が生成されたことを確認できます。
この記事では、公開鍵暗号を利用する電子署名を中心に、署名生成と検証の流れ、電子証明書の役割、暗号化との違い、電子署名だけでは保証できないことを解説します。読み終えると、電子署名が改ざんをどのように検出し、どこまで署名元を確認できるのかを説明できるようになります。
電子署名とは
電子署名とは、電子データに対して署名者を示し、そのデータへの承認や意思を表すために付与する電子的な情報や処理です。電子署名には複数の実現方法がありますが、情報セキュリティでは、公開鍵暗号を利用するデジタル署名方式が代表的です。
デジタル署名では、署名者が安全に管理すべき秘密鍵で署名値を生成し、対応する公開鍵で署名値を検証します。公開鍵で正しく検証できた場合、その署名値は対応する秘密鍵を使って生成され、署名対象のデータが署名後に変わっていないと判断できます。
公開鍵と秘密鍵の関係は「公開鍵暗号とは?公開鍵・秘密鍵の役割と共通鍵暗号との違いを解説」で解説しています。
電子署名で確認できること
電子署名は、主に次の確認を支えます。
| 確認できること | 意味 |
|---|---|
| データの完全性 | 署名後にデータが変更されていないかを確認できる |
| 署名元の認証 | 対応する秘密鍵を使って署名されたことを確認できる |
| 否認防止の支援 | 署名者が後から署名した事実を否定することを難しくする |
完全性とは、データが正確で意図しない変更を受けていない状態です。情報セキュリティにおける完全性は「情報セキュリティの3要素(CIA)とは?機密性・完全性・可用性を解説」で整理しています。
ただし、電子署名だけで署名者の法的責任やデータ内容の正しさまで自動的に証明するわけではありません。署名元を人や組織として判断するには、公開鍵と署名者を信頼できる方法で結び付ける必要があります。
電子署名を作成する流れ
多くのデジタル署名方式では、署名対象データからハッシュ値を生成し、その値を署名処理に利用します。
- 署名対象の電子文書やデータを用意する
- ハッシュ関数でデータからハッシュ値を生成する
- 署名者の秘密鍵と署名アルゴリズムを使って署名値を生成する
- 元のデータと署名値、必要に応じて公開鍵証明書を受信者へ渡す
ハッシュ値は、データの内容が変わると通常は異なる値になります。ハッシュ関数の性質と変更検出の前提は「ハッシュ関数とは?データ改ざん検出の仕組みを解説」で確認できます。
「ハッシュ値を秘密鍵で暗号化したものが必ず電子署名になる」と説明されることがありますが、これは特定方式を単純化した表現です。電子署名一般では、署名アルゴリズムが秘密鍵と対象データのハッシュ値などを使って署名値を生成すると理解する方が正確です。
電子署名を検証する流れ
受信者は、受け取ったデータ、署名値、署名者に対応するとされる公開鍵を使って検証します。
- 受信したデータから、署名時と同じ方式でハッシュ値を生成する
- 公開鍵と署名アルゴリズムを使って署名値を検証する
- 検証結果から、署名値と受信データの対応を確認する
- 公開鍵が想定する署名者に属するかを、証明書などで確認する
署名値の検証に成功した場合、受信データと署名値が対応し、公開鍵に対応する秘密鍵で署名値が生成されたと判断できます。さらに、公開鍵と署名者の結び付きを確認できれば、署名元を人や組織として判断する根拠になります。検証に失敗した場合は、データや署名値が変わった、異なる公開鍵を使った、署名処理に問題があったなどの可能性があります。失敗だけで、悪意ある改ざんが行われたと断定はできません。
電子証明書で公開鍵と署名者を結び付ける
公開鍵だけを受け取っても、その公開鍵が誰のものかは分かりません。第三者が自分の公開鍵を署名者のものとして渡せる状況では、署名値の計算が正しくても署名元を判断できません。
ここで扱う電子証明書は、公開鍵と人・組織・システムなどの識別情報を結び付け、認証局などが署名した公開鍵証明書です。利用者は、証明書の署名、信頼する認証局までのつながり、有効期限、失効状態、利用目的などを検証して、公開鍵を信頼できるか判断します。
電子署名の計算自体に電子証明書が必ず必要なわけではありません。ただし、公開鍵を特定の署名者と結び付けて第三者が確認する用途では、証明書や事前共有した公開鍵など、信頼できる結び付けの仕組みが必要です。
電子署名と暗号化の違い
この記事で扱うデジタル署名と、公開鍵暗号による暗号化は、どちらも公開鍵と秘密鍵を使いますが、目的が異なります。
| 項目 | 電子署名 | 暗号化 |
|---|---|---|
| 主な目的 | 署名元と署名後の変更を確認する | 内容を読めない形にして機密性を守る |
| 主に使う鍵 | 秘密鍵で署名し、公開鍵で検証する | 用途に応じた鍵で暗号化し、対応する鍵で復号する |
| 内容の秘匿 | 提供しない | 提供する |
| データ変更の確認 | 署名検証で確認する | 暗号化だけでは保証しない |
電子署名が付いていても、元の文書は読める状態のままの場合があります。内容を第三者に読まれないようにするには、別途暗号化が必要です。暗号化の目的と鍵の使い方は「暗号化と復号とは?鍵を使ってデータを守る仕組みを解説」で解説しています。
電子署名だけでは保証できないこと
電子署名は、署名対象データの内容が正しいことや、安全な内容であることを保証しません。誤った内容や悪意ある内容でも、秘密鍵を持つ者は署名できます。
秘密鍵が漏えいした場合、第三者が正しい署名値を生成できる可能性があります。検証成功は、署名者本人が必ず操作したことではなく、対応する秘密鍵が使われたことを示します。秘密鍵を誰が利用できたかは、鍵管理や操作記録などと合わせて判断します。
また、証明書の期限切れや失効、検証環境の信頼設定に問題がある場合、署名値の計算が正しくても署名元を信頼できないことがあります。電子署名は、適切な鍵管理、証明書検証、利用者認証、操作記録などと組み合わせて使う必要があります。
安全に使うための基本
秘密鍵は署名者だけが利用できる状態で保護し、漏えいや不正利用が疑われた場合は、証明書の失効や鍵の交換などを行います。署名処理を行う端末やサービスの利用者認証も、秘密鍵の不正利用を防ぐために重要です。
検証側では、署名値の成否だけでなく、使用した公開鍵、証明書の発行者、有効期限、失効状態、署名対象データを確認します。検証エラーを無視したり、信頼できない証明書を警告なしで受け入れたりしません。
独自の署名方式を作らず、利用するOS、ライブラリ、サービスが提供する標準的な電子署名機能を使用します。使用するアルゴリズムや鍵長は、現在の安全性要件と提供元の推奨に従います。
まとめ
この記事で扱うデジタル署名は、秘密鍵で署名値を生成し、対応する公開鍵で検証する仕組みです。検証に成功すると、署名対象のデータと署名値が対応し、公開鍵に対応する秘密鍵で署名値が生成されたと判断できます。
署名元を人や組織として判断するには、電子証明書や事前共有した公開鍵などによって、公開鍵と署名者を信頼できる形で結び付ける必要があります。電子署名は完全性、署名元の認証、否認防止を支えますが、内容の正しさや機密性、秘密鍵を実際に操作した人物までは単独で保証しません。
安全に利用するには、秘密鍵の保護、証明書の有効性確認、標準的な署名方式の利用を組み合わせることが重要です。