デジタル署名の仕組みを図解で説明
〜公開鍵暗号との違い〜

「デジタル署名」知っていますか?どちらの鍵で何をするのか説明できますか?

暗号化と鍵の使い方が逆になるので、混乱してしまう人も多いと思います。

デジタル署名の仕組みと公開鍵暗号との違いについて、図を使って説明していきます。

デジタル署名とは?

デジタル署名は、データに署名した人が本人であることと、データが改ざんされていないことを確認する技術です。

紙の書類でいうと、サインや印鑑のような役割です。

デジタル署名で確認できることは、大きく3つあります。

①本人確認:送信者が本人であること

②改ざんの検知:途中でデータが書き換えられていないこと

③否認防止:送信者が「送っていない」と言い逃れしにくくなること

否認防止ができるのは、本人の秘密鍵でしか署名を作れないためです。

デジタル署名で確認できることの図。本人確認、改ざんの検知、否認防止の3つ

デジタル署名の前に知っておきたい技術

デジタル署名は、2つの技術を組み合わせています。

公開鍵暗号方式

「公開鍵」と「秘密鍵」のペアを使う方式です。

公開鍵は誰に見せても問題ありませんが、秘密鍵は持ち主だけが管理します。

公開鍵暗号方式については、SSL/TLS通信の仕組みを図解で説明でも説明しています。

ハッシュ関数

ハッシュ関数は、データから決まった長さの値を計算する仕組みです。

計算された値を「ハッシュ値」や「メッセージダイジェスト」といいます。

ハッシュ関数には、次のような特徴があります。

  • データが同じなら、ハッシュ値も同じになる
  • データが少しでも変わると、ハッシュ値は大きく変わる
  • ハッシュ値から元のデータを計算することは困難

この特徴を使うと、データが書き換えられていないかを確認できます。

デジタル署名の仕組み

デジタル署名は①〜⑥の流れで確認を行います。

①送信者が、データからハッシュ値を計算

②送信者が、ハッシュ値を送信者の秘密鍵で処理して署名を作成

③送信者が、データと署名を受信者に送信

④受信者が、署名を送信者の公開鍵で処理してハッシュ値を取り出す

⑤受信者が、受け取ったデータからハッシュ値を計算

⑥受信者が、④と⑤のハッシュ値を比較

デジタル署名の流れの図。送信者がハッシュ値を秘密鍵で処理して署名を作り、受信者が公開鍵で確認してハッシュ値を比較する

2つのハッシュ値が一致すれば、データは改ざんされていないことが分かります。

さらに、送信者の公開鍵で確認できたので、対になる秘密鍵を持つ本人が署名したことも分かります。

改ざんの検知の図。送金額が10万円から99万円に書き換えられると、計算したハッシュ値と署名から取り出した値が一致しない

暗号化との違い

ここが試験で一番迷いやすいところです。

暗号化とデジタル署名では、使う鍵が逆になります。

暗号化とデジタル署名の比較の図。暗号化は受信者の公開鍵と秘密鍵、デジタル署名は送信者の秘密鍵と公開鍵を使う

暗号化は、受信者しか読めないようにする技術です。そのため、受信者の公開鍵で暗号化して、受信者の秘密鍵で復号します。

デジタル署名は、送信者が本人だと示す技術です。そのため、送信者の秘密鍵で署名して、送信者の公開鍵で確認します。

「誰の鍵か」から考えると覚えやすいと思います。

・読めるのを受信者だけにしたい → 受信者の鍵を使う

・本人だと証明したい → 送信者の鍵を使う

また、デジタル署名はデータそのものを暗号化する技術ではありません。データの中身を隠したい場合は、暗号化も必要です。

公開鍵が本物だと、どうやって分かるのか

ここまでの仕組みは、受信者が持っている公開鍵が本物であることが前提です。

攻撃者が自分の公開鍵を送信者のものだと偽って渡すと、確認の意味がなくなってしまいます。

そこで使われるのが「デジタル証明書」です。

デジタル証明書は、認証局(CA)という信頼できる機関が、公開鍵とその持ち主を証明するものです。

Webサイトのhttps通信でも、このデジタル証明書が使われています。

まとめ

今回はデジタル署名の仕組みと、暗号化との違いについて説明しました。

デジタル署名は、ハッシュ関数と公開鍵暗号方式を組み合わせて、本人確認と改ざんの検知を行う技術です。

送信者の秘密鍵で署名して、送信者の公開鍵で確認する、という流れを覚えておきましょう。

少しややこしいですが、「誰の鍵を、何のために使うのか」を考えると整理しやすくなります。

基本情報技術者試験だけでなく、Webサイトの証明書やソフトウェアの配布など、実際のシステムでも使われている大切な技術なので、しっかり理解しておきましょう。