電子署名とデジタル署名について勉強しました
OAuth2.0を勉強していたつもりが、いつの間にか「署名とは何か」について勉強することになったので、学んだことを整理します。
デジタル署名とは
まずデジタル署名とは、公開鍵暗号化方式を使って以下の2点を証明するためのものです。
- データ送信者が間違いなく当人であること
- 送られてきているデータが改竄されていないこと
一般的には、インターネット上で使われるハンコに例えられますが、その仕組みを知るとハンコとはイメージが違うような違うようにも感じます。
デジタル署名を知る上では、まず公開鍵暗号方式というものを理解する必要がありそうです。
公開鍵暗号方式とは
暗号方式の1つですね。
公開鍵暗号方式には2つの鍵が登場します。
登場するのは秘密鍵と公開鍵のペアで、秘密鍵と公開鍵には以下の関係性があります。
- 秘密鍵で暗号化したデータは、公開鍵でしか複合化できない。
- 秘密鍵で暗号化したデータは、秘密鍵で複合化できない。
- 公開鍵で暗号化したデータは、秘密鍵でしか複合化できない。
- 公開鍵で暗号化したデータは、公開鍵で複合化できない。
用意する時点ではお互いが暗号化/複合化の役割を担うペアの鍵でしかないので、秘密鍵・公開鍵という名前はつきません。
結果、片方の鍵を自分が持ち(秘密)、もう片方の鍵を相手に公開するため、秘密鍵・公開鍵となります。
なお、公開鍵暗号方式の代表格としてはRSA、DSA、ECDSAというものがあります。
公開鍵暗号方式のイメージ
まずAさんが秘密鍵、公開鍵を用意して、仲間であるBさん、Cさんに公開鍵を渡します。
BさんはAさんにデータを送る際に、もらっていた公開鍵で暗号化します。
仮に、Cさんがその送信データを覗こうとしても、Cさんも公開鍵しか持っていないので、送信データを複合化することができません。
一方でAさんは秘密鍵を持っているので、送信データを複合化して無事中身を見ることができます。
デジタル署名の仕組み
公開鍵暗号化方式が理解できたところで、デジタル署名に戻ります。
AさんからBさんにデータを送るシチュエーションで以下の手順となります。
まずはAさんの手順です。
- 送信データをハッシュ化する。
- ハッシュ化したデータを秘密鍵で暗号化する。(これをデジタル署名と呼びます)
- 上記1と上記2をセットでBさんに送信する。
次にBさんの手順です。
- 受け取ったデータの内、生のデータをハッシュ化する。(ハッシュ方式はAさんと合わせておく必要があります)
- デジタル署名を公開鍵で複合化する。
- 上記1と上記2を突合して同一のものかどうか確認します。
上記手順により、Bさんは以下のことを確認できます。
- 送り元が間違いなくAさんであることが確認できる
- 送られてきたデータが改竄されていないことが確認できる
電子証明書
前述の説明がシンプルなデジタル署名の仕組みとなりますが、ここに電子証明書というものが関係すると少し内容が複雑になります。
まずはAさんの手順です。
- 送信データをハッシュ化する。
- ハッシュ化したデータを秘密鍵で暗号化する。(これをデジタル署名と呼びます)
- 上記1と上記2と電子証明書をセットでBさんに送信する。
次にBさんの手順です。
- 受け取ったデータの内、生のデータをハッシュ化する。(ハッシュ方式はAさんと合わせておく必要があります)
- 認証局に電子証明書の有効性を照会する。
- デジタル署名を公開鍵(電子証明書)で複合化する。
- 上記1と上記3を突合して同一のものかどうか確認します。
朱書きの部分が変わったところです。
大きくは、電子証明書を発行した公開鍵をデータと一緒に送信している点と、受け取ったBさんが認証局に電子証明書の有効性を確認するプロセスが増えた点です。
電子証明書とは
認証局(CA:Certificate Authority)が発行した公開鍵のこと。
公開鍵はその名の通り誰でも知ることのできる鍵のことです。なので、本当にその人の公開鍵であるかどうかを証明するための証明書のこと。
電子署名とは
最後に電子署名とデジタル署名の違いについてです。
なんとなく同じものだと思ってしまいますが、実は違います。
電子署名は「データの正当性を証明するもの」という定義であり、具体的な方法は問いません。
一方で、デジタル署名は「データの正当性を証明するための方法」という定義になります。
つまり、電子署名は広義の意味で、どの1つの方法としてデジタル署名があるという位置付けです。
デジタル署名を電子署名と言い換えることは可能ですが、逆に電子署名をデジタル署名と言い換えることはニュアンスが変わります。