電子署名

**電子署名**（でんししょめい）とは、電磁的記録（電子文書）に付与する、電子的な徴証であり、紙文書における印章やサイン（署名）に相当する役割をはたすものである。「電子署名及び認証業務に関する法律」では、要件として「作成者の保証」と「内容の同一性（非改ざん性）」が求められている。電子署名により電子契約などの法的効力が担保されている。

電子署名の要件を満たす仕組みとして、公開鍵暗号を用いたデジタル署名が有力である。日本では、「電子署名及び認証業務に関する法律に基づく特定認証業務の認定に係る指針」の第3条（特定認証業務に係る電子署名の基準）で、RSA、DSA、ECDSA の3方式が指定されている。これらのアルゴリズムは、いずれも公開鍵暗号方式を用いた方式である。

## 電子署名の必要性
ある文書について、その作成者として文書に記載されている者（作成名義人）がある場合、その文書が本当にその作成名義人によって作成されたものであることは、通常はその文書に付されたその作成者の印や署名によって証明される。しかし、電子文書には直接印を押したり署名を付けることはできない。紙に押した印や署名をスキャナで取り込み、その画像を文書に付与しても、印や署名の画像は簡単にコピー＆ペーストできるので証明力がない。

電子取引を普及させるためには、取引に用いる電子文書について、**作成者の保証**と**内容の同一性**（非改竄性）を実現する仕組みが必要となる。
;作成者の保証
: 通常の紙文書に用いる印や署名に相当する、電子文書の作成者の証明が可能な仕組み。
;内容の同一性
: 電子文書が改竄されていないことの保証、つまり改竄された場合にそれが検出できる仕組み。

## 電子署名を実現するデジタル署名

電子署名を実現するデジタル署名には、**鍵生成アルゴリズム**、**署名(生成)アルゴリズム**、**検証アルゴリズム**という3つのアルゴリズムがある。

### 鍵生成
鍵生成アルゴリズムは事前準備にあたるアルゴリズムであって、署名をしたいと思うユーザは事前にこのアルゴリズムを実行する必要がある。ユーザがこのアルゴリズムを実行すると、アルゴリズムはそのユーザの**公開鍵**および**秘密鍵**（と呼ばれるデータ）を出力する。印鑑に例えていうと、秘密鍵は実印に対応するものであり、公開鍵は印鑑照合に使う台紙（印鑑登録証）に対応するものである。

ユーザは鍵生成アルゴリズムを実行するときに、**セキュリティ・パラメータ**と呼ばれる値をこのアルゴリズムに入力する。セキュリティ・パラメータは、署名文を偽造することの困難さを表した尺度である。さらに鍵生成アルゴリズムには乱数も入力される。鍵生成アルゴリズムが実行されるたびに異なる乱数が選ばれるので、ユーザごとに異なる公開鍵・秘密鍵ペアが割り振られることになる。

各ユーザは秘密鍵（実印に相当）を他人が使用することができないように保管する一方、公開鍵（印鑑証明書に相当）を皆に公開する。ユーザの秘密鍵を知っている（使うことができる）のはユーザ自身だけであるのに対し、そのユーザの公開鍵は全てのユーザが容易に知りうることになる。公開鍵、秘密鍵をそれぞれ**検証鍵**、**署名鍵**ともいう。

### 署名生成
一度事前準備をすませたユーザは、何度でも秘密鍵（署名鍵）を用いて電子文書に電子署名することができる。電子署名するには、まず署名生成アルゴリズムにメッセージを入力する。すると署名生成アルゴリズムはメッセージに対する署名者の**署名文**を出力する。署名を作成したユーザをその署名文に対する**署名者**という。

署名者は署名文を作成するときに、メッセージとともに自分の秘密鍵を入力する。署名者の秘密鍵を知っている（使うことができる）のは署名者本人だけのはずなので、署名者以外の人は同じ方法で同じ署名を作成することはできないことになり、この性質が電子署名を付した電子文書の作成者を識別する根拠になる。

署名者は、メッセージとそれに対する署名文を他のユーザに送る。

メッセージと署名文を受け取ったユーザ（**検証者**）は、これらを入力して検証アルゴリズムを実行することによって署名文が正しいかどうかを検証することができる。このとき、検証者は検証アルゴリズムに署名者（だと推定されるユーザ）の公開鍵（検証鍵）も入力する。（公開鍵は公開情報なので、検証者は署名者の公開鍵を知ることができる）。

### 署名検証
検証アルゴリズムは署名文が本当にそのユーザによって作成されたか否かを判定し、その結果を出力する。
検証アルゴリズムが署名文を正当 (valid) だと判断したことを、「検証アルゴリズムが署名文Aを受理 (accept) した」または「署名文が検証を**通過した**」という。それに対し、検証アルゴリズムが署名文を不当 (invalid) だと判断したことを、「検証アルゴリズムが署名文Aを棄却 (reject) した」または「署名文が検証を**通過しなかった**」という。

なお、「署名検証時は署名文を公開鍵でする」と説明する文献が多数見られるが、この仕組みで検証できるのはRSA署名などごく一部であって、検証アルゴリズム全体に対する説明としては**全くの誤りである**。

### 公開鍵の認証
公開鍵を公開する場合は、**** (trusted third party, TPP) を介して公開することが望ましい。各公開鍵を、公開鍵の持ち主と対応させる方法は幾つか知られている。代表的な方法は、次の二つである。

# 信頼できる第三者機関が各人のIDと公開鍵を対応付けた表（**公開鍵簿**）を作成し、公開する。
# 信頼できる第三者機関が認証局を運営し、PKI の仕組みを用いて各人の ID と公開鍵とを対応付ける（印鑑証明書に相当する）。

### 改竄の防止
一般に電子署名は、単なる本人認証よりも偽造・改竄の防止を目的とする場合が多い。その場合には、デジタル署名の署名生成アルゴリズムに入力するメッセージとして、文書そのものではなく文書の改竄検出符号（ハッシュ値）を用いる。これは、デジタル署名のサイズを文書のサイズよりも小さくする効果もある。

不適切な改竄検出符号（例えば改竄検出符号の代わりに CRC などの誤り検出符号）を用いると、デジタル署名の偽造や改竄が容易になる。これは、CRC などの誤り検出符号には衝突体制がないためである。

したがって、デジタル署名は、用いられる改竄検出符号を含めて評価されることがある。

## 電子文書の真正な成立の推定

民事訴訟法228条は、「文書は、その成立が真正であることを証明しなければならない。」と規定する（228条1項）。民事訴訟では、ある文書をその作成者として記載されている者（作成名義人）によって作成されたものとして証拠に用いるには、まずそのこと（その文書が本当にその作成名義人によって作成されたものであること＝真正な成立）を証明しなくてはならない。

例えば、甲が乙を訴えた訴訟において、甲・乙の署名押印がある契約書を甲が証拠として用いるには、（甲自身については自認すれば良いとして、）乙が本当にその契約書を作成したということをまず証明しなければならない。しかし過去のある時点で行われた（作成という）行為を証明するのはなかなか困難なことである場合が少なくない。

その負担を緩和するため、民事訴訟法は228条4項で「私文書は、本人又はその代理人の署名又は押印があるときは、真正に成立したものと推定する。」と規定し、229条1項では、「文書の成立の真否は、筆跡又は印影の対照によっても、証明することができる」と規定している。

これにより、甲は契約書にある乙の（ものとして付されている）署名押印が確かに乙のものであるということを証明すれば、反証されない限りその契約書を証拠として用いることができるのである。そして、その契約書に乙の実印による押印がされていて、かつその印影が乙の印鑑証明書のそれと一致するのであれば、その押印が乙の意思によるものであることもまた経験則上容易に推定される。

乙の実印による押印と印鑑証明書が付されていることによってその契約書は、（それに反する事実を乙が証明しない限り）真正な成立の証明に多大な労力を費やすことなく証拠として用いることができるわけである。

電子署名法は、電子文書はその内容について本人による電子署名が行われているときは真正に成立したものと推定すると規定している（3条）が、これは民事訴訟法228条4項の電子文書版ということができる。

## 関連項目
* デジタル署名
* 暗号理論
* 公開鍵証明書
* 電子証明書
* 電子署名及び認証業務に関する法律（電子署名法）
* 個人番号カード - 住民基本台帳カード
** 公的個人認証サービス
* データ完全性
* 改竄検出

## 外部リンク
*電子署名 - デジタル庁