LoginSignup
9
3

More than 3 years have passed since last update.

デジタル署名について混乱した話

Last updated at Posted at 2019-06-14

デジタル署名の定義

Weblioさんによる解説はこう↓

デジタル署名とは、電子文書の正当性を保証するために付けられる、暗号化された署名情報のことである。 電子商取引をする場合などによく利用され、文書の作成者本人であることと、途中で文書が改ざんされていないことを証明する。 一般にデジタル署名では、公開鍵暗号方式を利用する。

公開鍵暗号方式を使うんだね!
公開鍵で暗号化して、秘密鍵で復号するあれね!

一般にデジタル署名では、公開鍵暗号方式を利用する。具体的には、送信する情報(データ)からハッシュ関数というプログラムを使ってメッセージダイジェストと呼ばれるデータを作り出す。これを送信者の共通鍵(秘密鍵)で暗号化したものをデジタル署名という。送信者は、送信するデータと一緒にデジタル署名を送る。
受信者は、情報と一緒に送られてきたデジタル署名を送信者の公開鍵で復号して、メッセージダイジェストを入手し、同時に受け取った情報(データ)を基に、送信者が使ったものと同じプログラムでメッセージダイジェストを作り出す。両方のメッセージダイジェストが同じものであれば、間違いなく本人が送ったもので、途中で改ざんもされていないということが証明される。

秘密鍵で暗号化して公開鍵で復号しちゃうの!?
公開鍵暗号方式って公開鍵で暗号化して秘密鍵で復号するんじゃないの?

って思ったりしないですか?
今回はそういうモヤッとした方向けのお話

公開鍵暗号方式

それじゃ、まずは公開鍵暗号方式の復習から

公開鍵暗号方式の仕組みは
かなりざっくり言うと、誰にでもメッセージを暗号化できるけど 復号できるのは秘密鍵を持っている人だけ
よくある例えが公開鍵暗号方式は「南京錠」とそれを開ける「鍵」っていうもの。

公開鍵=南京錠
秘密鍵=鍵
①Aさん(受信者)がBさん(送信者)に南京錠を渡す
②Bさんは秘密の手紙がはいった箱に南京錠をかけて(暗号化)、Aさんに送る
③Aさんは秘密の手紙を受け取り、南京錠を開ける(復号)

ここでのポイント
復号できるのが「秘密鍵を持っているひとだけ」ということ

デジタル署名とは

さて、いよいよ本題のデジタル署名ですが、やりたいことはこの2つ

①データの送信元は正しいのか?なりすましをチェック
②送られてきたデータは途中で書き換えられていないか?改ざんをチェック

なりすましチェック

①のなりすましをチェックするために使われるのが「サイン」「署名」
本人であることを証明できるもの、サインとか指紋とかをイメージするとよい
これを送るデータにくっつけることによって、受け手は「あ、本人ね」と分かります
ここで公開鍵暗号方式の特徴を思い出してください
復号できるのが「秘密鍵を持っている人だけ」という点

デジタル署名はこの点を応用して
サインを作成できるのは「秘密鍵を持っている人だけ」という仕組みになっています
これでなりすましをチェックすることが可能
秘密鍵を持っている人以外は署名を作れません

暗号通信と署名では目的が違うのです

  • 暗号通信:誰にも見られたくないデータを受信者にしか分からないようにする
    • 暗号通信で秘密鍵を持っているのは受信者
  • 署名:送信者にしか作れないサインをつけてデータを送る
    • 署名で秘密鍵を持っているのは送信者

秘密鍵で暗号化して公開鍵で復号する、というのは混乱してしまうので
こう理解するとよい

秘密鍵で署名(本人である証)を作って、公開鍵でその署名を照合する
(ちゃんと言うと、秘密鍵で認証して公開鍵で検証)

ここまでの説明が
①データの送信元は正しいのか?なりすましをチェック←こっち
②送られてきたデータは途中で書き換えられていないか?改ざんをチェック

では、改ざんチェックはどうしてるのかしら?

改ざんチェック

改ざんの防止では、データが途中で書き換えられていないか確かめるために、
データから適当な文字列を生成して、それを送るデータにくっつけます。

例えば送るデータ「吾輩は猫である、名前はまだない」の文章から
適当な文字列を生成した結果「QAWSEDRFTGYH」だとします。

  • 受信したデータ
    • 「吾輩は猫である、名前はまだない」
    • 「QAWSEDRFTGYH」

受け手が「吾輩は猫である、名前はまだない」というデータを元に
同じ方法で適当な文字列を生成した結果「QAWSEDRFTGYH」になりました。

文字列の生成の方法は共通なら、
もらったデータから生成した文字列とデータにくっついていた文字列が一致していれば、
途中で文章が変わっていないとわかります。
もし仮に改ざんが起きていた場合、送信側と受信側で生成される文字列が一致しないはず。

デジタル署名のこの改ざん防止方法を説明する際に

  • データを変換して文字列を生成することを「ハッシュ化」
  • 生成した文字列を「ダイジェストメッセージ(ハッシュ値とも)」
  • 文字列生成の方法を「ハッシュ関数」

と呼んでいます。

まとめ

  • デジタル署名の目的は2つ
    • なりすまし防止
    • 改ざん防止

なりすまし防止のために公開鍵暗号方式を応用している

  • 公開鍵暗号方式
    • 公開鍵で暗号化、秘密鍵で復号
  • 公開鍵暗号方式を応用したデジタル署名
    • 秘密鍵で署名作成、公開鍵で署名検証

(おことわり)
電子署名とデジタル署名をごっちゃにするな!定義まちがってるんじゃないの?などなど
スタミナ切れで説明しきれていない部分があると思いますが、大目に見てください

9
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3