デジタル署名の仕組みを図解で説明
〜公開鍵暗号との違い〜
「デジタル署名」知っていますか?どちらの鍵で何をするのか説明できますか?
暗号化と鍵の使い方が逆になるので、混乱してしまう人も多いと思います。
デジタル署名の仕組みと公開鍵暗号との違いについて、図を使って説明していきます。
デジタル署名とは?
デジタル署名は、データに署名した人が本人であることと、データが改ざんされていないことを確認する技術です。
紙の書類でいうと、サインや印鑑のような役割です。
デジタル署名で確認できることは、大きく3つあります。
①本人確認:送信者が本人であること
②改ざんの検知:途中でデータが書き換えられていないこと
③否認防止:送信者が「送っていない」と言い逃れしにくくなること
否認防止ができるのは、本人の秘密鍵でしか署名を作れないためです。

デジタル署名の前に知っておきたい技術
デジタル署名は、2つの技術を組み合わせています。
公開鍵暗号方式
「公開鍵」と「秘密鍵」のペアを使う方式です。
公開鍵は誰に見せても問題ありませんが、秘密鍵は持ち主だけが管理します。
公開鍵暗号方式については、SSL/TLS通信の仕組みを図解で説明でも説明しています。
ハッシュ関数
ハッシュ関数は、データから決まった長さの値を計算する仕組みです。
計算された値を「ハッシュ値」や「メッセージダイジェスト」といいます。
ハッシュ関数には、次のような特徴があります。
- データが同じなら、ハッシュ値も同じになる
- データが少しでも変わると、ハッシュ値は大きく変わる
- ハッシュ値から元のデータを計算することは困難
この特徴を使うと、データが書き換えられていないかを確認できます。
デジタル署名の仕組み
デジタル署名は①〜⑥の流れで確認を行います。
①送信者が、データからハッシュ値を計算
②送信者が、ハッシュ値を送信者の秘密鍵で処理して署名を作成
③送信者が、データと署名を受信者に送信
④受信者が、署名を送信者の公開鍵で処理してハッシュ値を取り出す
⑤受信者が、受け取ったデータからハッシュ値を計算
⑥受信者が、④と⑤のハッシュ値を比較

2つのハッシュ値が一致すれば、データは改ざんされていないことが分かります。
さらに、送信者の公開鍵で確認できたので、対になる秘密鍵を持つ本人が署名したことも分かります。

暗号化との違い
ここが試験で一番迷いやすいところです。
暗号化とデジタル署名では、使う鍵が逆になります。

暗号化は、受信者しか読めないようにする技術です。そのため、受信者の公開鍵で暗号化して、受信者の秘密鍵で復号します。
デジタル署名は、送信者が本人だと示す技術です。そのため、送信者の秘密鍵で署名して、送信者の公開鍵で確認します。
「誰の鍵か」から考えると覚えやすいと思います。
・読めるのを受信者だけにしたい → 受信者の鍵を使う
・本人だと証明したい → 送信者の鍵を使う
また、デジタル署名はデータそのものを暗号化する技術ではありません。データの中身を隠したい場合は、暗号化も必要です。
公開鍵が本物だと、どうやって分かるのか
ここまでの仕組みは、受信者が持っている公開鍵が本物であることが前提です。
攻撃者が自分の公開鍵を送信者のものだと偽って渡すと、確認の意味がなくなってしまいます。
そこで使われるのが「デジタル証明書」です。
デジタル証明書は、認証局(CA)という信頼できる機関が、公開鍵とその持ち主を証明するものです。
Webサイトのhttps通信でも、このデジタル証明書が使われています。
まとめ
今回はデジタル署名の仕組みと、暗号化との違いについて説明しました。
デジタル署名は、ハッシュ関数と公開鍵暗号方式を組み合わせて、本人確認と改ざんの検知を行う技術です。
送信者の秘密鍵で署名して、送信者の公開鍵で確認する、という流れを覚えておきましょう。
少しややこしいですが、「誰の鍵を、何のために使うのか」を考えると整理しやすくなります。
基本情報技術者試験だけでなく、Webサイトの証明書やソフトウェアの配布など、実際のシステムでも使われている大切な技術なので、しっかり理解しておきましょう。


