はじめに
背景
これまでも、公開鍵暗号・デジタル署名については色々記事を出していますが、どうしてもある程度詳しい話が入ると「一般人向けでない」ものになりますので、ポイントを絞った説明を作ることにしました。
ただし、一般人向けといっても、一般の技術者にも基本としては十分であると考えています。
記事の構成
記事は大きく3つに分けていますが、最低限必要なのは1つ目の部分最低限の基礎知識だけです。
ただそれではどうも納得し辛い、あるいはもうちょっと関連した話が欲しいという場合は他の2つの部分関連情報や理由の補足もご覧いただければと思います。
最低限の基礎知識
べからず集
一見面倒で、しかも一般的には言及しないことをよしとされる話題ですが、先に「理解のためにはこういうことはしてはいけない」「こういった情報は誤りである」といった話を知っておく必要があります。
- 不適切な鍵のイメージ(錠前含む)
暗号技術においては、"XX key" の訳語として「○○鍵」が出てきます。ここで日常的に「鍵」というのが、扉等の開け閉めで身近な存在であることから、暗号技術においても開け閉めをイメージして理解につなげようという人が多いです。
しかし開け閉めというイメージは不適切なので捨てなくてはなりません。加えて、機能的に鍵をかけるといった説明や、錠前の喩えが分かり易いものと信じて採用する人も多いですがそれらも同様に不適切です。そういった説明は誤解の表れとみなしましょう。 - 不適切な基本機能説明
世の中公開鍵暗号の説明としては「暗号化と復号に異なる鍵を用いる」「暗号化に公開鍵を用い、復号に秘密鍵を用いる」がまず真っ先に挙げられ、それに疑いを持つ人はいません。
この説明、部分的には確かに誤りではないのですが、一般人向けの基本説明としては不適切ですし、それを土台にしてつながる先もありません。
そうすると、ITパスポートや基本情報、非IT系の資格試験、学校での情報の授業に公開鍵暗号が含まれるのはどうなんだという話になりますが、正直シラバスの設定自体が不適切と言えます。
不適切とは言え、人によっては試験対策しなければならない事情もあるでしょうが、真に受けないという認識が必要になります。 - デマだらけの情報
前の項目とも重複するところではありますが、一般に出回っている情報は大なり小なり誤りが含まれています。それも、細かいところに粗があるというレベルではなく基本的なところから間違えているのがほとんどです。
しかもこれは詳しい(ように見える)人、ほとんどの一般向け参考書や教科書レベルですでに当てにならない状況です。つまりちゃんとした技術情報以外、信用してはならないというのが基本となります。
一番重要な話
さて、上ではかなり悲観的な話を列挙しましたが、基本的なことを掴むのに実は難しいことはありません。一番重要なのはデジタル署名について理解することです。公開鍵暗号の知識は不要です。
そしてデジタル署名とは文字通り「デジタルな『署名』」です。…が、それだけではよく分らないとなる人が多いでしょうから、ポイントを挙げていきます。
- 現実の「署名」の理解
デジタル署名は文字通り「デジタルな『署名』」なので、現実の署名とは何かを把握していなければ話になりません。ただ日本であれば、ほとんど同等の風習である印鑑の方でも構いません。
「そんなの常識だよ」で済む人は構いませんが、「え? 自分の名前書く(写す)だけでしょ」レベルの人は、今一度現実の署名/印鑑を認識し直す必要があります。
…と言っても、難しい話ではありません。
署名にしても印鑑にしても当人にしか付けられない印を書類に付けることで、同意や承認、保証を表す証拠とするという習慣です。これがそのままデジタル署名の理解につながります。 - デジタル署名の基本
デジタル署名は、1つ前の署名の話の延長です。
なんらかの計算技術によって当人にしか作れなくて誰にでも本物かどうかを確認できるデータ、署名を実現する技術です。署名を作るのに必要となる当人用のデータ(ハンコに相当)を秘密鍵もしくは署名鍵と呼び、本物かどうかを確認するための不特定の人用のデータ(確認用の印影見本に相当)を公開鍵もしくは検証鍵と呼びます。それぞれの操作には署名と検証という用語があてられています。
基本的な機能も現実の署名と同じで、何らかのデータに対してその内容への同意や保証を示す証拠として使うものです。これを「言い逃れできない」という意味で否認防止と呼びますが、日本語としてはやや分り辛いかもしれません。訳語はありませんが、同じ意味を表す "content commitment" という言い方をすることもあります。こちらの方が「内容への保証」を直接的に表していると言えるでしょう。
なお、デジタル署名の基本説明に「公開鍵暗号を応用」だとか「暗号化」といった言葉が出てきたらほぼデマです。また「データ作成者を証明する」という機能説明もウソです。
※「データ改ざんを防ぐ」という機能説明は間違いではありませんが、ピンボケです。 - デジタル署名の応用
前項の通り「内容の保証」がデジタル署名の基本的な機能で、それに沿った使い方もしますが、「当人にしか作れない」という特性から本人確認(認証)に使う応用もあります。最近話題のパスキーも、デジタル署名を本人確認に使う応用例です。 - 鍵という用語
公開鍵・秘密鍵という用語は、public(不特定の人用)な鍵、private(当人用)な鍵というところから来た訳語です。( 秘密鍵の方は「当人以外に秘密」とした意訳になっています )
しかし「それでは『鍵』ってなんなんだ?」「錠前がダメならどう説明するんだ?」となる人もいるでしょう。そのため、鍵のことをちゃんと説明できる必要があります。
しかし、実はこれは深く考えるところではありません。単純に操作に必要であったり重要なデータをキー/鍵と呼ぶという習慣に則った用語に過ぎないからです。それに「ちょっとしたものなのに」というニュアンスも追加されているかも知れません。( 例えばキーワードとかキーパーソンの「キー」を想像してください )
なので、公開鍵・秘密鍵がなにものか、加えて公開鍵をなぜ公開して良いのかを悩むのは大抵は無駄です。操作に必要なデータがあるよう設計した技術なのでその必要なデータを鍵と呼んでいる、不特定の人が使えることを実現したから公開できる、ただそれだけの話なのです。
※公開できることに納得がどうしてもできないなら「数学のマジックって凄いね」くらいの認識で済ませましょう。
関連情報
公開鍵暗号とは
「公開鍵暗号の知識は不要」と上で説明しましたが、それでも「公開鍵暗号ってなに?」と気になる人はいるでしょうし、デジタル署名も公開鍵暗号とかかわりがあることには変わりません。
話は複雑でもあり簡単でもあります。
複雑になっているのは、公開鍵暗号には2つの意味があるためです。それは狭い意味と広い意味の2つです。世間一般で言われる公開鍵暗号は狭い意味の方ですが、大事なのは広い意味の方です。なので、一般に出回っている説明はあまり役に立たないのです。
逆に簡単なのは、広い意味の方の公開鍵暗号が、デジタル署名や狭い意味の公開鍵暗号を含めた技術をまとめた技術ジャンルを指す用語に過ぎないからです。
こちらを簡単に説明するなら「デジタル署名のように、当人だけができる処理と、不特定の人ができる処理を分けて実現しているセキュリティ技術群」ということで、鍵についても公開鍵・秘密鍵という共通の呼び方をしているだけです。
狭い意味での公開鍵暗号の方は深く知る必要はありませんが、それでも「当人だけができる処理と不特定の人ができる処理が分かれている」( それぞれ秘密鍵による復号、公開鍵による暗号化 ) ということだけ認識していれば十分ではないかと思います。
デジタル署名の説明の補足
デジタル署名の一般的な説明には「ハッシュを使う」「データ改ざんを防ぐ」というものがあります。
これらは基本としては不要ですが、間違いということではありません。この2つについて補足します。
- ハッシュを使う
デジタル署名はその実装上、ハッシュ(SHA-2等の暗号学的ハッシュ)を組み込んで使う必要があります。
そのため、例えば古いハッシュ(SHA-1)の廃止に引きずられて、デジタル署名も影響を受けるといった知識は有用です。ただ、「なぜデジタル署名にハッシュが必要か」は一般の人や初級者の手に余る問題なので、深く気にするところではありません。本記事では割愛します。 - データ改ざんを防ぐ
見方によっては「データ改ざんを防ぐ」となることは確かです。しかしそれは「内容を保証する」という機能を実現するための前提でしかありません。なので、改ざんの話をメインに持ってくるのはピンボケの説明になります。( 現実の署名/印鑑に改ざんを防ぐ機能がないことを考えてみてください )
なぜ前提となるのかは、データの切り貼りやコピーがいくらでもできるデジタルデータと、紙からインクをそっくり取り外せない物理的な署名や印影との違いです。「この署名 S は、X という文書に対するものです」という対応が崩れたらそれが分かるように、署名データは対象のデータに応じて変化します。これが「データ改ざんを防ぐ」にあたるわけです。
デジタル署名の応用
デジタル署名の応用として、内容の保証を行うものだけでなく、本人確認(認証)としての事例もあります。具体的な応用例を以下に挙げます。
- 内容の保証
- 契約書等の文書ファイル(pdf等)への署名
- メールへの署名 (S/MIMEやPGP)
- コンピュータ上で動かすプログラムデータへの署名(コード署名)
- 公開鍵とその所有者の対応を示すデータ(公開鍵証明書)への署名
※署名を施す組織を認証局(CA)と呼ぶ - ブロックチェーンで送金履歴のようなデータをチェーンに残す際の署名
- 本人確認(認証)
- HTTPS(SSL/TLS)でサーバがドメイン通りの本物であることを示す(サーバ認証)
※人ではなくて、サイト/サーバが対象ですが、意味的に本人確認と変わりません - SSHでユーザが本人であることを示す(公開鍵認証)
- パスキーでユーザが本人であることを示す
- マイナンバーカードでオンラインサービス利用者が本人であることを示す
- HTTPS(SSL/TLS)でサーバがドメイン通りの本物であることを示す(サーバ認証)
理由の補足
上で書いた内容に「自分が聞いてた話と違う」とか「そんな断定されても納得できない」という人もいるかも知れません。なので、簡単にではありますが、理由を補足します。
べからず集を設けた意図
通常、否定的な説明から入るのはそちらの方がより印象に残りやすいということで、推奨されない説明方法かと思います。
しかし、あまりにデマがはびこる現状や、特に鍵の誤ったイメージに足を引っ張られることで、理解の妨げになる事例も多く、先に否定しておかざるを得ないのです。
※誰が悪いという話なら、そんなデタラメをはびこらせた先人が悪い、というしかありません。
特に「鍵なのに公開できるなんて!」「鍵でどうやってサインするんだよ!」みたいに拒否反応を示すのは、開け閉めする鍵のイメージに引きずられた事例の最たるものでしょう。key→鍵という訳語が、実はイメージ的に良くなかったのかも知れませんが ( 「キー」のままならここまでひどくなかった可能性がある )、しかしちゃんと「開け閉めする鍵じゃないよ」という説明をする人が乏しかったという方が大きかったのではないかと思います。
錠前という喩えが不適切な理由
よく「不正確でも分かり易いから」という言い訳で正当化する人が後を絶たないのですが、単純に要約として出来が悪いからです。というより、開け閉めする鍵のイメージが変にあると理解がこじれると言ったばかりなのに、まさに開け閉めする錠前が適切なわけがないでしょう。
なお、狭い意味での公開鍵暗号に対して、公開鍵での暗号化を錠前のロック、秘密鍵での復号を鍵でのアンロックに喩えようとする人がいますが、それは「錠前を使えば公開鍵暗号の真似事ができる」だけの話であって、「未学者に理解し易いように、現実の錠前の機能・運用を喩えに使う」ことになっていません。本末転倒です。かつ「錠前」という「鍵を否定するモノ」に置き換えることで、鍵の理解すら阻害します。
デジタル署名はまさに署名を喩えに使えますが、狭い意味での公開鍵暗号は、そもそも喩えを使って説明するものではない、ということです。
※デジタル署名の説明でも錠前を使おうとするのは、それ以上に論外です。
デジタル署名の誤り説明について
デジタル署名の説明で暗号化という用語を使って説明するのは、非常によくありがちな誤りで、しかもなかなか皆直そうとしない部分です。
そういう人に限って理由を求めるのですが、話は簡単です。まともな技術ドキュメントでそんな説明していないからです。
※そもそも、ちゃんと妥当性を確認した上での説明ではないので「どこがどう間違っている」を個別に指摘しても徒労になることが多いです。
詳しそうな人であっても、その知識の拠り所はしょせん参考書であったり、誰かの伝言ゲームでしかありません。本来行われるべき実態と照らし合わせての妥当性の確認がすっぽり抜けているのです。まるで「赤信号みんなで渡れば怖くない」状態です。
※本来、そういった参考書でそんなデマが蔓延している状況が一種異様ではあるのですが
なおそうすると、「暗号化とか使わずにどう説明するんだ」という人もいるのですが、そもそもそういう説明は不要です。というか、逆にやってはいけません。あくまで「秘密鍵で署名する、公開鍵で検証する」だけで済ませないとならないのです。
おわりに
誤りが広まっていたり、様々な障害のせいで難しく感じる人も少ないと思いますが ( 実際、誤解の払拭から入る分手間ですが )、基本的なところは別に難しくもありません。
一般の人でも、本来身近に使用している技術として、理解が広まる一助になれば幸いです。