ぷろぐらむおいしいよ

技術ネタを適当に書いていきます。

ディジタル署名

今回はセキュリティに関する記事。
名前だけは聞いたことがあるかもしれないディジタル署名の概略を簡単に書いてみる。

ディジタル署名の機能

ディジタル署名を使うと何が出来るのか。
主な機能は以下の2つである。

  1. なりすましの防止
  2. 改ざんの防止

"署名"という名前の通り、誰が作ったのかを示すことによってなりすましを防止できる。
また、メッセージをハッシュ化して(メッセージ)ダイジェストを作ることにより改ざんの防止も出来る。

具体的な方法

さて、具体的にはどうディジタル署名を使うのか。
以下に図で簡単に示す。

まず送信者がメッセージを作成する。
次のそのメッセージをハッシュ化し、ダイジェストを作成する。*1
さらにダイジェストを暗号化し、メッセージ本文とともに受信者へ送信する。*2

そして受信者はメッセージ本文とダイジェストを受信する。
ダイジェストは暗号化されているので、送信者の公開鍵で復号化する。
暗号化したときの鍵(送信者の秘密鍵)は送信者しか知らないから、それと対になる公開鍵で復号出来れば、送信者を確認できるというわけ*3

その後、ダイジェストから復号したハッシュと受信したメッセージから新たに生成したハッシュを照合して、一致すれば改ざんはされていないと判断できる。

この二つによって、なりすましの防止と改ざんの防止が出来る。

ディジタル署名で出来ないこと

さて、ではディジタル署名で出来ないこととはなんだろうか。

盗聴の防止

図を見れば分かるけれど、暗号化されているのはダイジェストだけでメッセージ本文は暗号化されていない。
ディジタル署名はあくまでなりすましと改ざんの防止を意図したものなので、盗聴は防げない。
これに関しては、盗聴防止はディジタル署名の役割ではないので普通にメッセージ自体を暗号化すれば済む話である。

なりすましの防止

さて、重要なのはこちらの方である。
さきほどなりすましを防止出来ると書いたが、実際にはこれは正しくない
何故ならこの図のようなことが出来てしまうからである。

上の図のように送信するメッセージ自体も鍵も第三者が偽装してしまえば、照合に使う二つのハッシュは一致してしまう。

ディジタル署名を有効に使うには

ではどうしたらいいだろうか。
ここで出てくるのがいわゆるPKI(公開鍵基盤)である。
具体的には、公開鍵の正当性を保証するためのCA(認証局)を設ける。
そこで、CAに登録された公開鍵(とそのCAの証明書のセット)のみを正当なものと認めることによって、なりすましを防止する。

これの説明はディジタル署名の範疇を超えてしまうのでまた今度。

*1:ハッシュ化にはSHA-1MD5が使われる

*2:暗号化には3DESやRSAが使われる

*3:いわゆる公開鍵暗号方式