公開鍵暗号関連のテキストの間違いの典型例（その２）

# はじめに
## 背景
以前[公開鍵暗号関連のテキストの間違いの典型例](/angel_p_57/items/ca643138ed9902f7bf1e)で、ありがちな、でも基本レベルでマズい間違いの指摘を行いました。
今回その第2段ということで、渡辺さき女史という方の動画を対象に、同じように指摘していきたいと思います。

## 対象
問題の動画は、[ITパスポート／共通鍵・公開鍵で説明する！デジタル署名とSSL証明書【第16回】](https://www.youtube.com/watch?v=LUIDMfWHtM0)です。
動画自体は2019年4月公開のようです。こちらの2021年10月10日時点での内容を対象とします。
※**2021年10月19日追記**: 誤りの指摘を受け、ご本人より「削除する」旨ご連絡いただきました。既に対応済みのようです。以下の内容は削除前の話となることにご注意ください。

この方の動画を参考にしようとする人が度々いるようで、いちいち説明するのも面倒だからまとめておこうというのが1つ、この方の振る舞いが悪質だろうと判断したのが1つ、取り上げた理由はそんなところです。

## 悪質な点
基本的に、世の中に出回っている参考書と同様、Youtube等での大部分の人の解説もまた問題だらけです。
しかし、この方を特に悪質と判断したのには理由があります。

* 資格取得およびその勉強の価値を毀損する行為であること  
  資格取得は「箔が付く」という目に見える効果だけではなく、取得時の勉強を通じて**関連分野の教養を身に着ける**という効果を見込んだものです。  
  この場合はITリテラシーを高めることで実業務や生活に役立てることにあたりますが、いくら資格試験の点が伸びたとしても、**重要な部分でウソを吹き込まれたのでは教養という意味では逆効果**になります。特に暗号関連はセキュリティにつながる部分で、そこの基礎を間違えると**セキュリティリスクを伴う判断ミス**を引き起こしかねません。
* 本人に自浄能力が期待できないこと  
 間違いがあるだけなら、幾らでも後から修正が効くものです。しかしこの方の場合それに期待できない、つまり自浄能力が期待できないというのが最大のポイントです。  
 実は動画のコメントで、既に大きな点の指摘は入れているのですが**「握り潰す」という最悪の対応**を見せました。  
 以下の図で比較してください。Youtubeログインしていれば指摘者である私のコメントは見えますが、この方の承認がないので、これら指摘は他の方には見えない、つまり**なかったことにされている**ということが未ログインの場合の画像から分かります。  
 修正がなくとも、**正誤情報の補足があればマシとも言えるところ、この方は別の何かを優先させた**ということでしょう。

|ログイン済みブラウザ|未ログインのブラウザ|
|:-:|:-:|
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74396/fcf5c46d-3580-9022-d8ce-249083b18e3d.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74396/1d3e5e15-0748-a4eb-2a38-4a7f3ff0a4d7.png)|


# 動画のスライド/解説の添削
## スライド1: 第15回のおさらい(0:12～)
### 解説の内容
〇 0:26～  
> 「鍵」と表現して逆にややこしくなってしまう理由

これは端的に言うと、**ちゃんと理解して説明できてないから**です。

「鍵」は英語の key の訳語にあたる言葉で、別に専門用語でもなんでもなく、「必要な・重要な」という形容詞としての**一般用語**が名詞に転用された「**必要・重要なもの**」と見ることができます。
※「次の試合の勝利の『鍵』は〇〇選手が握っている」等の言い方で、日本語でもあるものです。

実際、この key という言葉は**暗号技術以外の文脈でも出てきます**。
( データベースの主キー・外部キー、ソートやハッシュでのキー等 )

つまり暗号技術の文脈で「『〇〇鍵』を使います」というのは、

* 手ぶらでは扱えないように、処理の時に**なんらかのデータを用意する必要があるように設計**された技術ですよ
* その必要なデータに**『〇〇鍵』という名前がついてます**よ

という意味に過ぎず、**深く考えたら逆に負け**なのです。

> 鍵と呼ばれる「データ型」は、ロジックとかアルゴリズムというイメージで居てください

ということで、どのようなイメージを持つかは自由とは思いますが、鍵自身はロジックやアルゴリズムではありませんし、「必要なデータのことを鍵と呼ぶ」という**基本を押さえていない状況で**理解を進めるのは難しいだろうと思います。

## スライド2: SSL証明書とデジタル署名の違い(0:53～)
### スライドの内容
まず、**このスライドが酷すぎて「指摘」ではちょっと対応しきれません**。
つまり、「一から作り直せ」というレベルなんですが、一番の問題は**比較対象が揃ってない点**です。

デジタル証明書とデジタル署名を比較しようとしているのですが、デジタル証明書はデジタル署名を応用した技術、またはそれによって作られたデータなので「どう違うのでしょう?」と考える以前の問題なのです。
例えば**「『(携帯)電話』と『電波』の違いは…」とか説明したら変だと気付く**でしょう。それと同レベルです。
「用語が似ているから混乱するのでは」という考えかも知れませんが、説明するならまず
「レイヤーの違う話」である点からであって、同列に並べてやることではありません。

そして表の中身も問題です。

* 「信頼できることを証明してくれる」  
  裏を返せば、「証明書を持っていれば信頼できる」ということになってしまいますが、**そんなわけありません**。  
  これを間に受けると悪質なサイトでもSSLなら信頼して受け入れるという行為につながりますから、**重大かつ悪質なデマ**です。  
  では、SSL証明書の目的は何か。それは運転免許証やパスポートを身分証明に使うのと同様、
  「そのサイトが確かにURL通りの本物だと確認する」ための**サイトの身分証明**です。
* 「通信相手が送ってきた証明書を、認証局に照会し、通信相手の身元を確認できる」  
  わざわざ認証局に照会してたら**認証局が大変**です。  
  そうならないように証明書を検証する仕組みがPKIとしてまとめられている点を**全く認識できていない説明**です。
* 「データが通信途中で改ざんされていないことを証明する」  
  デジタル署名が**「(自筆)署名」(日本で言う「印鑑」) のアナロジー**として名付けられている点を全く考慮できていません。  
  例えば契約書類にハンコを押すのは「改ざんされていないことを証明」するためではなく、
  「契約内容に同意している、契約内容に責任を持つことを『**保証**』しますよ、その『**証拠**』としての印鑑ですよ」という意味を持ちます。  
  それと同じで、デジタル署名の一番の目的は**「あるデータを『保証』しているという『証拠』」**です。  
  ※専門用語的には「(データの内容の)『否認 (しらばっくれること)』ができない」ということで「**否認防止**」と言います。
* ハッシュ関数を用いる(アルゴリズムの証明)  
  ハッシュ関数を用いるのは事実ですが、**何かの証明のためではありません**。  
  ハッシュ関数によるデータ圧縮が各署名方式にとって都合が良いために過ぎません。

### 解説の内容

〇 0:54～
> この暗号化技術は、「SSL証明書」「デジタル署名」の話をするとき登場します

**暗号化技術とデジタル署名は別物**です。
広い意味ではどちらも暗号技術の一部ですが、**「デジタル署名は暗号化を応用した技術ではない」**という基本的なところで誤解のある人は多いです。
※「歴史的に暗号化の応用としてアイデアが生まれた」「暗号化と署名で内部的に同じ計算を利用している方式が一部にある」という点では関連がありますが、またそれは別の話です。

〇 1:06～
> (デジタル証明書は)デジタル署名と似ているためほとんどの人が「SSL証明書」と表現しています

デジタル証明書に色々な用途があることを知っていれば**「そんなわけない」と一笑に付される**説明かと思います。
**SSL/TLSのサーバ認証に使われているから「SSL証明書」**と言われているだけの話でしょう。
「色々な用途」についてどこまで詳しく知っているべきか、という話はあると思いますが、最低限、「SSL証明書等を検証するためのCA証明書もデジタル証明書の一種である」ことは認識しておくところかと思います。
※最近の話題としては、**マイナンバーカードにデジタル証明書(認証用・署名用)が2種類入っている**のも知っておくと良いでしょう。

## スライド3: SSL証明書(1:40～)
### 解説の内容
〇1:40～
> このSSL証明書はwebサイトの信頼性を証明するものです
> 鍵マークのついたhttpsとついているものは信頼された機関と情報をやり取りしている、目印

前のスライドでも指摘しましたが**「信頼性の証明」ではありませんし、「信頼された期間と情報をやり取りしている」ことの保証にはなりません**。
ブラウザの鍵マークは、「アクセスしたサイトが確かに**URLで指定された通りの本物のサイト**で、暗号化で通信を保護していますよ」という状況を示しているものであって、その**サイトが信頼できるかどうかは別問題**です。
実際にSSLのフィッシングサイトも今は出てきており、重要なのはSSLの保護があることに加えて「そのURLのサイトを信頼して良いか」を**人間が判断すること**であって、それは例えば

* TVCMで目的の企業が案内していた通りのURLだから、その企業のサイトと見て大丈夫だろう
* 店舗で貰ったパンフレットに載っていたURLだから、その店舗の関連のサイトと見て大丈夫だろう

といった、**暗号技術の範囲外の話**になります。
※なお「メールで案内が来たURLだから…」は**ニセメールの危険性があるので同列に扱えない**ことに注意

この認識は、**悪質なWebサイトで被害を受けるかどうかの大きなポイント**であって、ウソの解説で誤解を植え付けられるのは、非常に危険なことだと注意するところかと思います。

## スライド4: デジタル署名の仕組み ( 一部スライド2 )(2:01～)
### スライドの内容
ハッシュ値を秘密鍵で暗号化するという、**よくある誤解に基づいた説明**である点もそうですが。
参考: [「電子署名=『秘密鍵で暗号化』」という良くある誤解の話](/angel_p_57/items/d7ffb9ec13b4dde3357d)

その点をおいたとしても「アマゾンでショッピングするために個人情報とデジタル署名を送る」というシチュエーションが現状でありえません。
この方は、デジタル署名がどのように使われているかを**そもそもご存知ない**のだと思います。

### 解説の内容

〇2:08
> SSL証明書との違いは認証局ではなく、ハッシュ関数により証明する点

前述の通り、この**説明自体が意味をなしません**。
デジタル署名の持つ「保証」の機能は、各署名の計算内容全体をもって達成するものであって、ハッシュ関数はそのパーツの一部に過ぎないからです。

そうなると「どのような仕組みなんだ?」と気になる方もいると思いますが、そこはITパスポートレベルでは、いえ、それより上位の資格試験でも**気にしてはいけない**ところです。
なぜなら**仕組みは決まっていない**からです。

デジタル署名は、現実の自筆署名や印鑑のように

* 特定の人だけが(署名や押印を)作り出せる
* 不特定多数の人が本物と確認できる

という**2つの特性を達成した技術の総称のようなもの**です。
つまり、**どんな仕組みであれ上記機能を実現して**「秘密鍵で署名する」「公開鍵で検証する」という枠組みを守っている限りデジタル署名なのです。

重要なのは仕組みに悩むのではなく、機能特性と利用シーンを把握することであって、
**デタラメな説明でも良いから仕組みに対して納得感を得ようとするのは害**でしかありません。

## スライド5: SSL証明書の仕組み(3:23～)
### スライドの内容
図にある「共通鍵を公開鍵で暗号化」する方式は、**今はもう使われなくなっているもの**です。
つまり、( 他の多くの人もそうですが ) この方は**「実際の技術としてどうか」を確認してません**。
「共通鍵を暗号化」( 正確には「共通鍵の『素』になるデータを暗号化」) でも、昔使っていたなら良いのではないかと思われるかも知れませんが、それでもまだ1つ大きな問題があります。

それは、SSL証明書の目的である**「サーバ認証」についての説明が全くなくなってしまう**ことです。

この部分はITパスポートレベルの範囲を超える話になるとは思いますが、次の図のように現実の運転免許証のような身分証明書に容易になぞらえることができます。

![運転免許証とSSL証明書比較イメージ](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F74396%2F46e6ff06-16af-1756-1e70-ac760c6d1ea4.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&w=1400&fit=max&s=9d9468f60f54c9e5a524fa8a15f537c9 運転免許証とSSL証明書比較イメージ)
参考: [記事「SSL/TLSの基本」の「サーバ証明書の役割」の章](/angel_p_57/items/446130934b425d90f89d#%E3%82%B5%E3%83%BC%E3%83%90%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%AE%E5%BD%B9%E5%89%B2 )( この記事ではSSL証明書ではなく「サーバ証明書」で説明しています )


つまり、身分証に顔写真が載っていることで、**顔と比較して本人確認ができるのと同様**、SSL証明書に公開鍵が含まれることで、サーバが持っている**秘密鍵による処理とあわせてサーバが本物と確認できる**ということです。
※現在は通常「サーバが使い捨てのデジタル署名を作り、クライアントがその署名を公開鍵で検証することで ( 秘密鍵の持ち主しかデジタル署名を作れないことを活かし ) 本物のサーバかどうかを判別する」という処理を行います。

# 終わりに
最初、自分が動画に残したコメントを見て「『全部デタラメ』というのは正直厳し過ぎじゃないか?」と思ったのですが、真面目に指摘を挙げたら**本当に全部デタラメ**でした。これは酷い。
なお、問題なのは「悪質な点」もそうなのですが**自分に理解できていないことを誤魔化してウソの解説で誤解をばらまく**ところもそうだと思います。
別に一つ一つ詳しく知っている必要はなくて、しかし**基本として大事なところは誤魔化さない**という姿勢であれば、たとえITパスポートが他の情報処理技術者試験より簡単な内容といえども、深い教養として役立てることはできるかと思います。
そのような姿勢の**まともな解説者が増えることを**願ってやみません。