南京錠という公開鍵認証の不適切な喩え

SSHの公開鍵認証でちょくちょく見かける「南京錠」の喩えの問題点と、その根底にあると思われる公開鍵暗号技術の理解の問題点について綴った話
14
angel (as ㌵㌤の猫) @angel_p_57

SSHにおける公開鍵認証、これを「南京錠(あるいは錠を施した扉)と鍵」で喩える人がいる。で、納得する人も多い。分かり易い喩えだと。 しかし、度々指摘することもあるけど、実はこれは不適切な喩えだ。

2021-01-09 22:34:16
angel (as ㌵㌤の猫) @angel_p_57

確かに喩えとしては分かり易い。南京錠というのは非常に具体的にイメージできるから。 しかし、分かり易いかどうかよりもっと大事なことがある。それは適切に実態を表した喩えになっているかどうか。その面で不合格であり、実際には「分かり易い」のではなく「こじつけ」になってしまっている。

2021-01-09 22:34:49
angel (as ㌵㌤の猫) @angel_p_57

もちろん、「喩え」というのは正確さを多少犠牲にしてでもイメージを作り出すものだ。だから完全な白も黒もなくて、どんな喩えだって灰色だ。そういう意味で、南京錠の喩えだって部分的に合ってると擁護できなくもない。

2021-01-09 22:35:18
angel (as ㌵㌤の猫) @angel_p_57

しかしこの喩えが誤解から生まれているのが透けて見える上に、誤解を助長しかねないという面から見て、白寄りとすることはできない。限りなく黒に近い灰色、だから不適切ということになる。

2021-01-09 22:35:43
angel (as ㌵㌤の猫) @angel_p_57

まず1つ、これは見方によってはそれほど大きくないけど、マズい点。それは認証(authentication)と認可(authorization)の話を混同しているという意味でのセンスの悪さ。

2021-01-09 22:36:09
angel (as ㌵㌤の猫) @angel_p_57

「鍵があれば錠を開けて中に入れる」このイメージ、鍵が「入るための資格」という扱いになることから、認可に沿ったものになってしまう。 しかし、「公開鍵認証」という言葉通り、本来は「(ユーザ)認証」つまり「本人確認」であり、この点がズレてしまっているのだ。

2021-01-09 22:36:36
angel (as ㌵㌤の猫) @angel_p_57

そういう意味では生体認証で「指紋を登録していればその指の持ち主だと判別できますよ」という機能があるのに合わせて「公開鍵を登録していれば秘密鍵の持ち主だと判別できますよ」と説明していればマトモと言える。

2021-01-09 22:37:06
angel (as ㌵㌤の猫) @angel_p_57

ただ本人確認をするのは、そのままSSHでの遠隔操作を許可することに通常はつながるので ( 設定的には別なのだが )、センスは悪いけどそこまで大きな問題ではないかも知れない。

2021-01-09 22:37:35
angel (as ㌵㌤の猫) @angel_p_57

が、もう1つマズい点。南京錠の喩えが公開鍵暗号の使われ方に全く合っていない点が致命的なのだ。

2021-01-09 22:38:01
angel (as ㌵㌤の猫) @angel_p_57

公開鍵認証は、公開鍵暗号の中でも「デジタル署名」を応用した技術であり、その特性・機能は日本の風習で言えば印鑑に近い。そのため素直に喩えるなら銀行印のようなイメージになるはずだ。 参考: qiita.com/angel_p_57/ite… pic.twitter.com/ZIxe6iFwKr

2021-01-09 22:39:36
拡大
angel (as ㌵㌤の猫) @angel_p_57

つまり、印影を登録してあるはんこを持ってきて書類に押印できたら本人の申請として受け付けるのと同様、登録してある公開鍵と対になる秘密鍵により署名を作って貰うことで、本人確認としているということ。

2021-01-09 22:40:12
angel (as ㌵㌤の猫) @angel_p_57

簡単にでもこの機構を知っていれば、流石に南京錠で喩えるのには無理があると分かるだろうと思う。 ※実は情処(基本情報)の過去問にも出ており、ある程度の技術者なら常識でもおかしくない(と期待されている)話だったりする。 fe-siken.com/kakomon/29_aki…

2021-01-09 22:40:54
angel (as ㌵㌤の猫) @angel_p_57

そういうわけで、南京錠の喩えは不適切なのだが、ではなぜこのような喩えが生まれたのか? それを考えると、実は公開鍵暗号という技術自体への認識という面での問題が浮かび上がってくる。

2021-01-09 22:41:27
angel (as ㌵㌤の猫) @angel_p_57

南京錠という誤解が生まれた背景は容易に推測することができる。それは公開鍵・秘密鍵の機能を「暗号化・復号」と思い込んでいたためだ。暗号化によって保護する(鍵を閉める)、復号で解除する(鍵を開ける)、そういうイメージから来ているのだろう。

2021-01-09 22:41:58
angel (as ㌵㌤の猫) @angel_p_57

この思い込みについては、以前記事で取り上げたことがある。非常に古くから根強くあるもので、また検証せずに鵜呑みにして取り上げる技術者が後を絶たないことから、もはや収拾のつかないデマとなっている。 qiita.com/angel_p_57/ite…

2021-01-09 22:42:34
angel (as ㌵㌤の猫) @angel_p_57

実際、自分の記事で取り上げたのは過去のIBMのサイトの記述だし、Amazon EC2のドキュメントにもつい最近までそういう記述があったくらいで、専門家が絡んでるはずの場面でも信用するのが困難だ。 web.archive.org/web/2020050804…

2021-01-09 22:43:02

去年末の時点で「ログイン情報を暗号化」というくだりが消えてまともな説明に修正されたようだ。正直ホッとしている。

angel (as ㌵㌤の猫) @angel_p_57

ただこれだけであれば、単にSSHという一技術に対する誤解の話に過ぎない。しかし、実際には公開鍵暗号という重要な技術そのものへの誤解が背景にあると見ている。

2021-01-09 22:43:31
angel (as ㌵㌤の猫) @angel_p_57

なにがマズいか、それは恐らく多くの人が「基本」だと思っている「暗号化と復号に違う鍵を使う」「公開鍵で暗号化、秘密鍵で復号する」という説明そのものだと考えている。

2021-01-09 22:43:54
angel (as ㌵㌤の猫) @angel_p_57

正確に言うなら、この説明自体は部分的になら間違いではない。しかし、公開鍵暗号というと猫も杓子もこの説明になる。で、その延長上にデジタル署名があるとされる。結果、皆「暗号化と復号」以外が考えられないという視野狭窄に陥る。

2021-01-09 22:44:23
angel (as ㌵㌤の猫) @angel_p_57

ところが実際はどうか。今回話題にしたSSHで公開鍵暗号は暗号化・復号に使われているわけではないし、もっとポピュラーな技術であるSSL/TLSでも公開鍵暗号は暗号化・復号に基本使われない。

2021-01-09 22:45:10
angel (as ㌵㌤の猫) @angel_p_57

念のために繰り返しておく。SSL/TLSで公開鍵暗号の用途は基本的に暗号化・復号ではない。この点も恐らく大部分の人が誤解している。 参考: qiita.com/angel_p_57/ite…

2021-01-09 22:45:42
angel (as ㌵㌤の猫) @angel_p_57

そしてもっとヒドいのは、「公開鍵暗号の秘密鍵でハッシュを暗号化するとデジタル署名ですよ」という説明。そもそもそんな事実はない。 参考: qiita.com/angel_p_57/ite…

2021-01-09 22:46:08
angel (as ㌵㌤の猫) @angel_p_57

つまり、「暗号化・復号」で既存技術の大部分が説明できないということだ。これは、「基本」が間違っていることに他ならない。公開鍵暗号の大事なところはそんなところではないということで、むしろ「デジタル署名」だけ知ってる方がマシなくらい。

2021-01-09 22:46:56
angel (as ㌵㌤の猫) @angel_p_57

基本が間違えていたら何がマズいか、今更言う必要もないと思うけど、基本を誤解したままだと、たとえ詳細な知識を得たとしてもその理解に支障が出るし、機能・特性として重要な点、概要の認識すらもズレてしまう。

2021-01-09 22:47:53