デジタル署名の説明で、「発信者の本人確認」は微妙だし、改ざん検知を前面に出すのも微妙～令和７年度共通テスト「情報Ⅰ」を例に

ついに「情報Ⅰ」が入った初の共通テストがおこなわれました。ただ、その初のテストのそれも一番最初で出題されたデジタル署名に関する問題が、少し微妙なところがある問題でした。

決して間違っているわけではありませんし、むしろ世の誤ったデジタル署名に関する説明・問題の数々を思えば非常に気を使っている問題であると思います。ですが今後この問題を意識した授業がおこなわれるであろうことを考えると、ちょっと書いておいたほうがいいかと思い、記事にしました。

時間がない人は[最後](#最後に)だけでもどうぞ。

# 問題

令和７年度共通テスト「情報Ⅰ」、大問１ 問１より引用します。まだ大学入試センターからの公式の問題 PDF は公開されていないので、とりあえず[産経ニュースで公開されているもの](https://nyushi.sankei.com/kyotsutest/25/2/exam/6110.pdf)にリンクしておきます。

> インターネットで情報をやり取りする際，発信者が本人であることを確認するためにデジタル署名が利用できる。また，デジタル署名を用いると，その情報が【改ざんされていないか】を確認できる。

※ 実際には【 】部分が空欄となっており、そこに入る選択肢が問われている。

# 本題の前に～よくある「もっと良くないデジタル署名の説明」

最初にも書いた通り、この問題は世の誤ったデジタル署名の説明の数々に比べれば、はるかに適切な文章となっています。まずはそうした「誤ったデジタル署名の説明の数々」を挙げておきます。

## ×「デジタル署名は秘密鍵で暗号化し、公開鍵で復号する」

これは現実のデジタル署名に即していないので論外です。[^1] この記事の主題ではないので深くは触れませんので、気になる人は以下の記事などをお読みください。

- [電子署名≠秘密鍵で暗号化](https://web.archive.org/web/20210925032557/www.vicus-oryzae.com/gorua/sign.html)
- [RSA署名を正しく理解する](https://zenn.dev/herumi/articles/rsa-signature)

[^1]: なお個人的には、RSA 署名に限定した話をするのであれば、「秘密鍵で暗号化」という表現も許容できるかと思います。（良いとは思いませんし、そもそも非専門家に向けて「RSA 署名に限定した話」をすることに意味があるとは思いませんが。）
 ただしその場合も、仮に試験に「RSA 署名では、秘密鍵で【 】する」みたいな問題を出したのであれば、**『暗号化』だけでなく『復号』という解答も正解にしなければなりません。** それをしないのは、「俺が教えた以外の解答は不正解！」という最低最悪の指導です。

せっかく共通テストではそうした部分に触れないでいてくれたのに、共通テストの解説でわざわざそうした誤った説明をしている人をさっそく（それも複数）見かけてげんなりしました。

## ×「デジタル署名は作成者の本人確認ができる」

共通テストでは「**発信者**が本人であることを確認」という表現を使っていますが、これが「**作成者**が本人であることを確認」になると明確に「誤り」と言ってよいでしょう。他人が作ったデータに対して自分のデジタル署名を付与することができてしまうからです。デジタル署名は作成者の証明には使えません。

# 本題：共通テストの文章の微妙な点

## 「発信者が本人であることを確認」

確かに、「発信者が本人であることを確認するためにデジタル署名が利用できる」というのは何ら誤りではありません。例えば『発信者』を『Web サーバー』に、『本人』を『ドメイン名通りのサーバー』に置き換えれば、まさに TLS においてデジタル署名が果たしている役割です。

あくまでも「試験問題文」として見れば、文章量の都合もあるので こうした書き方になるのは仕方ないかもしれません。しかし「デジタル署名のことを知らない人に向けた説明文」として扱ってしまうと、微妙な説明となっています。

前提知識なく「発信者が本人であることを確認」という文章を見た時、どのようなものを想像するでしょうか？…おそらく多くの人は、「なりすましでないことの確認」という意味に捉えてしまうのではないでしょうか。例えば SNS などでのなりすましアカウントが問題になっていますが、そうした行為を防ぐためにデジタル署名が使えると勘違いしてしまうのではないでしょうか。

### デジタル署名でできること

デジタル署名で直接的にできることは、「『署名した人』と『公開鍵の所有者』[^2]が同じかどうかの検証」だけです。

[^2]: 一応補足しておくと、『公開鍵の所有者』と書きましたが これは文字通りの「公開鍵を持っている人」のことではなく（だって公開したら誰でも持てるので）、『その公開鍵に対応する秘密鍵の所有者』の省略として書いています。他にも細かいことを言い出すといろいろあるでしょうが、ここでは省略します。

![digital_signature.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180658/413f12ec-c7b5-39d0-5f1a-79a10faeea4a.png)

ですからデジタル署名を使って「発信者が本人であることを確認」するためには、『発信者』と『署名した人』，『公開鍵の所有者』と『本人』が同じであることを、何らかの方法で確認する必要があります。

たとえば TLS の場合であれば、自分と通信相手の Web サーバーしか知り得ないデータに対して署名をしてもらうことで『通信相手の Web サーバー』と『署名した人』が同じであることを確認し、さらにサーバー証明書を用いることで『公開鍵の所有者』と『ドメイン名通りのサーバー』が同じであることを確認した結果、『通信相手の Web サーバー』が『ドメイン名通りのサーバー』であることを確認できているわけです。

紙文書への署名・押印でも同様です。重要な書類への署名押印は持ち帰りではなくその場でやってもらうことがありますが、それは『眼の前の人物』と『署名した人』が同じであることを確認するためです。また、実印を使う場合印鑑登録証明書の提出が求められることがありますが、これも『実印の所有者』と『A さん』が同じであることを確認するためです。これにより最終的に『眼の前の人物』が『A さん』であることを確認できているわけです。

では、SNS でのなりすましアカウントを防ぐために――つまり例えば A さんを名乗るアカウントが確かに A さんのものであることを確認するために――デジタル署名は使えるでしょうか？そのためには『A さんを名乗る SNS アカウントの人』と『署名した人』，『公開鍵の所有者』と『A さん』が同じであることを確認しなければなりません。前者はともかく、後者を実現するのは大変そうです。eKYC（電子本人確認）などが使えるとは思いますが、そもそも eKYC を使うなら『公開鍵の所有者』と『A さん』ではなく 直接『A さんを名乗る SNS アカウントの人』と『A さん』を結びつけることができるので、デジタル署名は不要です。

## 「改ざんされていないかを確認」

「情報が改ざんされていないかを確認できる」という文章も、問題文の文章としては決して誤りではありません。しかしこれも「デジタル署名のことを知らない人に向けた説明文」として扱う場合には、微妙な説明です。

### 改ざん検知はデジタル署名の目的ではない

喩え話をします。洗濯機は通常洗濯や脱水の過程で洗濯物をグルグルと回しますから、「洗濯機は洗濯物をグルグルと回すことができる」という文章は誤りではありません。しかし違和感を覚えるのではないでしょうか。洗濯機は洗濯・脱水をすることが目的の機械です。その目的を達成するためには洗濯物を回す必要があっただけであり、洗濯物を回すことは洗濯機の目的ではありません。

同様のことがデジタル署名にも言えます。改ざん検知はデジタル署名の目的ではなく、あくまでも本来の目的を達成するためには改ざん検知もできる必要があったというだけです。

#### 紙文書への署名からデジタル署名へ

![verify1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180658/6796fc76-0a33-c1e9-05af-87407566091c.png)

紙文書への「署名」は、どの文書にも同じもので大丈夫でした。攻撃者が A さんの署名付きの文書を入手したとしても、それを別文書にコピーや切り貼りしたりしたら不自然になり検証者に気付かれてしまうからです。

![verify2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180658/bfaeef59-d06a-3e54-83b3-e2c6d0c4b439.png)

しかしデジタルの世界ではそうはいきません。不自然な点なしにコピーや切り貼りができてしまうので、どの文書にも同じ「署名」では、攻撃者がひとたび A さんの署名付きの文書を入手したら その署名を切り貼りして検証者が見破れない A さんの署名付きの偽文書を作成できてしまいます。

![verify3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180658/029ec9b1-0cc1-69c1-e734-67bde2ad5703.png)

だからデジタル署名では、文書ごとに異なる「署名」を作ります。攻撃者が A さんの署名付きの文書 Y を入手し、その署名を偽文書 Z に切り貼りしても、文書と署名が対応しないので検証者が偽文書だと気づくことができます。

![verify4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180658/c3b8cd02-4bff-6923-2b5d-3fe271fe8d4a.png)

結果的に、これは改ざん検知にもなります。攻撃者が A さんの署名付きの文書 Y を入手し、それを改ざんして文書 Y' を作ったとします。しかしこの場合も文書と署名が対応しなくなるので、改ざんを検知することができます。

このように、デジタル署名で改ざん検知ができるのは「それが必要だったから」というだけで、本来の目的ではないのです。

### 単なる改ざん検知にデジタル署名は牛刀割鶏

そもそも「改ざん検知」をしたいだけであれば、デジタル署名は不要です。暗号学的ハッシュや MAC といった他の方法があり、その方が処理速度などの面でも有利です。

確かにハッシュや MAC ではなくデジタル署名が必要な状況もあります。しかしそれは改ざん検知ではなく、デジタル署名の本来の目的が必要な状況だからです。

「デジタル署名で改ざん検知ができる」ということをあまり全面に出してしまうと、「改ざん検知が必要？よし、じゃあデジタル署名だ！」と誤った判断をしてしまう可能性があります。

# 最後に

この記事は共通テスト作問者に文句を言うことが目的ではありません。共通テスト問題の解説をしたり、共通テスト問題を念頭に授業をしたり参考書を書いたりする人に向けて、不適切な説明をしないようになってもらうことを目的とした記事です。

「デジタル署名で発信者の本人確認や改ざん検知ができます！」という説明では、この共通テストの問題は解けるようになるでしょうが、本記事中で書いたように「SNS のなりすましを防ぐためにデジタル署名を活用しよう！」とか「改ざん検知が必要？よし、じゃあデジタル署名だ！」と誤った判断をしてしまう可能性があります。

数学などの他の教科では昔からよく「テストで点を取らせるためだけの、理解の伴わない教え方」が批判されていますが、共通テストに加わったことで今後情報でもそうした教え方をする人が増えてくることが予想されます。そうした教え方ではない、より良い教え方をする人が１人でも増えるのに、この記事が一役買ってくれれば幸いです。