契約行為や決済行為をネットワークを介した計算機環境で行う場合,紙ベースの情報は電子化され,同時に契約や決済への同意を示す署名,捺印も電子化される必要がある.署名,捺印の代わりに電子情報の作成者が確かにそれを作成したことを示すための,あるいは電子情報の内容に承認したことを示すための技術としてディジタル署名 (digital signature)という技術がある.
ディジタル署名は,情報が改ざんされていないことを保証するとともに,署名者が確かに署名したという事実を保証できる技術である.ディジタル署名では,送信者がメッセージとともに認証子(署名)を送り,受信者がその認証子を検証してメッセージ認証とユーザ認証 (送信者の身元確認) を行う.
ディジタル署名が備えているのが望ましい性質として以下のものがある.
ディジタル署名では,これらの性質を公開鍵暗号の技術を利用して実現している. 但し,ディジタル署名に利用する場合には,署名作成は秘密鍵を用いて行い,署名検証は公開鍵を用いて行う. 暗号として利用する場合と鍵の使い方が逆になる.これにより,署名を作成できるのは本人のみであることが保証され (性質1~3を満たす),検証は登録されている公開鍵を使うため,誰にでもできる (性質4)ことが分かる.
ディジタル署名により,次の効果が得られる.
公開鍵暗号を用いたディジタル署名方式には,すべてのメッセージ M に対してDKs(M) が定義でき,EKp(DKs(M)) = M が成立するような RSA暗号のような暗号アルゴリズムを用いるものと,ディジタル署名専用の公開鍵暗号アルゴリズムを用いるもの (DSA等)とがある. ここで,Ks は秘密鍵,Kp は公開鍵,EKpは暗号化関数,DKsは復号関数である.
ディジタル署名専用の公開鍵暗号アルゴリズムの場合,データの暗号化には利用できない.
なお,ディジタル署名の実現方法としては共通鍵アルゴリズムを用いる方式もあるが,一般的には公開鍵アルゴリズムのディジタル署名が利用されている.(→ 公開鍵暗号とディジタル署名)
ディジタル署名は,署名生成と署名検証の 2 つのフェーズに分かれる.公開鍵アルゴリズムの場合,署名生成では秘密鍵 (署名鍵)を用い,署名検証では公開鍵 (検証鍵)を用いる.
ディジタル署名では,ハッシュ関数 (h で表されることが多い)を使ってメッセージを一定長に圧縮してから認証子(署名)を生成する. こうすると署名の長さはいつも一定になり,署名の生成処理時間もメッセージ長に依存しないため好都合となる.
下図にディジタル署名の概要を示す.
署名作成者を A,署名検証者を B とする.A は自分の秘密鍵 SA と公開鍵 PA のペアを生成して SA を秘密に保持しておき PA を公開しておく.署名検証者は公開された PA を入手する.
ディジタル署名に対する安全性の達成度(偽造困難性)には次の段階がある.
一方,ディジタル署名への攻撃法には,次のようなものがある.