デジタル署名
データの作成者が自分の秘密鍵で付ける署名。受け取った側は作成者の公開鍵で検証し、データが改ざんされていないことと、本人が作成したことを確かめられる。
イマシルちゃんの解説
紙の書類なら、本人のハンコやサインで「私が書きました」って証明できるよね。
デジタルの世界でそれをするのがデジタル署名なんだ。
自分しか持っていない鍵(秘密鍵)で署名して、
みんなが持っている鍵(公開鍵)で確かめてもらう。
途中で1文字でも書き換えられたら、確かめたときにバレちゃうんだよ!
より深い解説
定義
デジタル署名は、公開鍵暗号の仕組みを使って、データに付ける署名である。署名には作成者の秘密鍵を使い、検証には作成者の公開鍵を使う。暗号化(受信者の公開鍵で暗号化し、受信者の秘密鍵で復号する)とは、鍵の使い方が逆になる。
署名と検証の手順
| 手順 | 送信者(署名する側) | 受信者(検証する側) |
|---|---|---|
| 1 | データのハッシュ値を計算する | 受け取ったデータのハッシュ値を計算する |
| 2 | ハッシュ値を自分の秘密鍵で処理し、署名を作る | 署名を送信者の公開鍵で検証する |
| 3 | データと署名を送る | 1のハッシュ値と、署名から得られる値が一致すれば、検証に成功 |
データそのものではなくハッシュ値に署名するのは、データが大きくても署名の計算を短く済ませるためである。
デジタル署名でわかること
| わかること | 理由 |
|---|---|
| 改ざんされていないこと(完全性) | データが1ビットでも変わると、ハッシュ値が変わって検証に失敗する |
| 作成者が本人であること(認証) | 対応する秘密鍵を持つ本人にしか、正しい署名は作れない |
| 作成者が後で否定できないこと(否認防止) | 秘密鍵は本人しか持たないので、「自分は署名していない」と言い逃れできない |
一方、デジタル署名だけでは、データの中身を秘密にする(機密性)ことはできない。中身を隠すには、別に暗号化を行う。
公開鍵が本物であることの確認
検証に使う公開鍵が、確かに作成者のものでなければ意味がない。そのため、公開鍵が本人のものであることを、認証局がデジタル証明書で保証する。
主な方式と利用場面
方式には、RSA署名、ECDSA(楕円曲線を使う方式)、EdDSAなどがある。