「誰が作り、変えられていないか」を確かめる
紙に書いた文字と違い、デジタルデータは複製しても元と区別がつかず、内容の一部だけを書き換えることもできます。そのため、受け取ったファイルを見ただけでは、作成者を装った第三者が送ったものか、配送中に変更されたものかを判断できません。デジタル署名は、この二つの問題を暗号技術によって検査できる形にします。
署名の検証に成功すると、「対応する秘密鍵を使って署名が作られたこと」と「署名後のデータが変化していないこと」を確認できます。これは、情報セキュリティの3要素でいう完全性を確かめる代表的な方法です。一方、署名だけではデータの中身を隠せません。他人に読まれないようにする機密性が必要なら、暗号化を別に行います。
ハッシュ値と秘密鍵から署名を作る
送信者は、まず署名対象のデータをハッシュ関数に入力します。ハッシュ関数は、長さの異なるデータから一定の長さの値を計算する仕組みです。入力が少し変わるだけでも結果が大きく変わり、結果から元のデータを復元することは困難です。この値は、データの特徴を短く表す「指紋」のように利用できます。
次に、送信者だけが管理する秘密鍵と、署名用のアルゴリズムを使って、そのハッシュ値をもとに署名データを作ります。実際には、アルゴリズムが定める形式や追加の値も計算に関わります。そのため、「秘密鍵で文書全体を暗号化したもの」と説明すると正確ではありません。文書と署名データは別のもので、通常は両方を受信者へ渡します。
秘密鍵が第三者に漏れると、その人物も正しい署名を作れてしまいます。秘密鍵を安全に保管し、不要になった鍵や漏えいが疑われる鍵を適切に扱うことまで含めて、署名の信頼性が成り立ちます。
公開鍵で改ざんの有無を検証する
受信者は、届いた文書から自分でもハッシュ値を計算します。同時に、送信者の公開鍵と検証用のアルゴリズムを使い、届いた署名がその文書に対応するかを調べます。計算結果が整合すれば、署名が作られた後に文書が変更されていないと判断できます。一文字でも書き換わればハッシュ値が変わるため、検証は失敗します。
公開鍵は他人に知られてもよく、署名を確かめる人へ配布できます。ただし、公開鍵から秘密鍵を現実的な時間で求められないことや、署名を偽造しにくいことは、採用する暗号方式と鍵の長さが十分に安全であることを前提とします。古くなって安全性が低下した方式を使い続けないことも重要です。
この一連の処理はソフトウェアが行うため、利用者がハッシュ値を目で比べる必要はありません。ソフトウェアの配布元が公開する更新ファイル、電子文書、通信相手を確認する仕組みなどで、検証結果が警告やアイコンとして示されます。
公開鍵と持ち主を結び付ける電子証明書
署名の計算が正しくても、検証に使った公開鍵が本当に相手のものか分からなければ、なりすましを防げません。そこで利用されるのが電子証明書です。電子証明書には公開鍵やその持ち主を識別する情報などが含まれ、証明書を発行する認証局がデジタル署名を付けます。
受信側は認証局の署名を順に検証し、信頼している認証局までつながるか、証明書の有効期間内か、失効していないかなどを確認します。このように公開鍵の持ち主を確かめる仕組みを公開鍵基盤(PKI)と呼びます。Webサイトとの通信で使われる証明書も、この考え方に基づいています。ただし、証明書による相手の確認と、その後の通信内容を暗号化する処理は役割が異なります。
正しい署名でも内容の正しさまでは保証しない
デジタル署名が証明できる範囲には限界があります。検証に成功しても、文書に書かれた主張が事実か、プログラムが安全か、送信者が内容を十分に理解して承認したかまでは分かりません。署名はデータと鍵の関係を確かめる仕組みであり、内容そのものを審査する仕組みではないからです。
また、端末を他人に操作された場合や、秘密鍵を盗まれた場合には、持ち主の意思に反する署名が作られるおそれがあります。署名時の本人確認、端末の保護、鍵を使う権限の管理などを組み合わせる必要があります。多要素認証はアカウントへの不正なログインを防ぐ対策の一つですが、デジタル署名そのものとは別の仕組みです。
「電子署名」と「デジタル署名」の範囲は少し違う
二つの言葉は同じ意味のように使われることがありますが、厳密には範囲が異なります。デジタル署名は、公開鍵暗号やハッシュ関数を使う具体的な技術を指します。電子署名は、電子的な文書について作成者や承認の意思を示す方法を広く表す言葉で、制度やサービスの文脈でも使われます。つまり、デジタル署名は電子署名を実現する代表的な技術の一つです。
名前に「署名」と付いていても、手書きのサイン画像を文書へ貼り付けただけでは、貼り付け後の改ざんを暗号技術で検出できません。見た目ではなく、秘密鍵で署名を作り、対応する公開鍵で検証できることがデジタル署名の要点です。この違いを知ると、画面に署名らしい印があるかではなく、検証結果や証明書の状態を確認する必要があると分かります。