IT系サラリーマンの社会的 blog (original) (raw)

この広告は、90日以上更新していないブログに表示しています。

先日、デジタル署名の説明において「秘密鍵で暗号化」という表現は間違いだというツイートを見かけた。

私は「秘密鍵で暗号化」に全く違和感がなく、そしてセキュリティ分野で有名で尊敬できる方がそのように主張されていたので非常に驚いた。それからというもの、その理由や解説をいろいろ調べてみた。そして、これは意外と根深くて複雑な議論になっていることが分かった。

本ブログでは、いわゆる「秘密鍵で暗号化」を調べて分かったことや自分なりに整理したことなどを記していく。

デジタル署名の説明の現状

先にこの議論に対する私の意見を述べると、「秘密鍵で暗号化」と説明してもあながち間違いではないと思っている。(そして、可能な限りその前提を説明する必要がある。)

インターネットで「デジタル署名」を検索するといろいろなサイトでデジタル署名のことが解説されているが、政府機関のサイトはもちろんセキュリティ業界で有名な大企業のサイトでさえも「秘密鍵で暗号化」という表現を使っている。そして、セキュリティに関する本でさえもそのような表現が散見されているらしい。

秘密鍵で暗号化」の一例:

法務省:電子署名法の概要について

デジタル署名を少ししか勉強していない人には「秘密鍵で暗号化」が間違っていることに気がつかないだろう。もちろん私も最初は分からなかった。

この議論に関連してある人の日記によると、2008年に書かれたものにはなるが当時のセキュリティ専門家たちの間でも少し話題になっており見かけたらなるべく訂正しようとしている旨の記載があった。つまり、セキュリティ専門家たちから見てデジタル署名の「秘密鍵で暗号化」は明らかな間違いだと認識されているのである。

高木浩光@自宅の日記 - 公開鍵暗号方式の誤り解説の氾濫をそろそろどげんかせんと

ここでデジタル署名を説明する。

デジタル署名は一般的に以下の3つのアルゴリズムから成る。

まとめると、鍵のペアを生成する必要があること(公開鍵暗号方式)、最後の出力は承認または拒否の2値であることが特徴的なので理解してほしい。

デジタル署名(公開鍵暗号方式)でよく使われるアルゴリズムは以下のとおりである。

RSAアルゴリズム以外にもいろいろあるということを覚えてほしい。

いろいろ調べてみて私としてはこの議論についてある程度納得するところまで理解できたと思っている。

そして「秘密鍵で暗号化」は間違いだと主張する人とそうではない人(つまりその表現を使い続ける人)の両者の気持ちをある程度理解できるようになったとは思っている。

そのような観点で私なりにもう少し深掘りしてみる。

なぜ「秘密鍵の暗号化」は間違いなのか

秘密鍵の暗号化」は間違いだと言う人曰く、

ここでは上記の考えを持つ人を、デジタル署名の「秘密鍵の暗号化」は間違い主義者と呼ぶことにする。

私なりに彼らの主張を補足したいと思う。

一先ず箇条書きでいろいろ書いてみた。自分の説明スキルでは分かりやすく説明することは非常に難しいが、伝えたかったニュアンスはある程度理解してもらえたであろう。多分

この議論を理解する上で一番重要なことは、暗号化と署名は異なる概念であると理解することである。

なぜ「秘密鍵で暗号化」は正しいのか

デジタル署名を少し勉強した人は、残念なことに「秘密鍵で暗号化」だと覚えてしまったかもしれない。私もその一人である。

そのような人がこの議論を理解する上で必要な前提あるいはよくありがちな勘違いを説明する。

しかし、上記のことを正確に理解しているにも関わらず、デジタル署名で「秘密鍵で暗号化」という表現を使い続ける人がいるように思われる。

おそらく、下記のように考えていると推測している。

もう少し勝手に補足すると、間違いだと指摘するのであればどんな風に分かりやすく簡潔に説明すればいいのか、対案を出してみろということかもしれない。

おそらく、デジタル署名の「秘密鍵の暗号化」は間違い主義者はこう説明するであろう。(RSAアルゴリズムの使用を前提として)

(だれかさん) 署名とは何ですか?「署名」の説明に「署名」を用いるのはナンセンスです、意味不明です。

(デジタル署名の「秘密鍵の暗号化」は間違い主義者) 分かりました。下記のとおり訂正します。(RSAアルゴリズムの使用を前提として)

わざと可能な限り誇張して補足してみたが、私個人としては「秘密鍵の暗号化」と説明したくなる気持ちもなんとなくだが分かった気がしている。

もちろん、1時間以上かけてデジタル署名を説明してもいいだろう。(説明を受ける側にそこまでの価値があるかどうかは定かではない。)

重要なことは、暗号化と署名は異なる概念であると理解することである。

秘密鍵で暗号化」にある根本的な何か

秘密鍵で暗号化」という表現を使う人にとって、電子署名といえばRSAアルゴリズムであるという思い込みがあるようには感じる。

もちろん実際はそうではない。

冒頭に示した法務省による電子署名の説明は、普通はもっと一般的で抽象的なレベルで説明すべきところ、「秘密鍵で暗号化」と書いてあるのでRSAアルゴリズムによる公開鍵暗号方式による署名だということが分かる。

これは不適切である。

署名アルゴリズムRSAアルゴリズムだけではないし、RSAアルゴリズムの場合というような注釈もない。

法務省が管轄の電子署名法において使用可能な署名アルゴリズムRSAアルゴリズムだけだと明言されていればあながち間違った説明ではないが、ほぼ間違いなくそう書かれていないだろうし実際の使用においてはECDSAなどのアルゴリズムも使われているだろう。

電子署名は電磁的記録の改ざん防止、改ざん検出のために用いられる技術全般のことであるのに、急にRSAアルゴリズムのことを説明するのは明らかなミスリードである。

この世の中には署名アルゴリズムRSAアルゴリズムだけしか存在しなくて「秘密鍵で暗号化」するものだと誤解されてしまい、挙げ句の果てにECDSAアルゴリズムの説明でも「秘密鍵で暗号化」と説明されてしまう可能性がある。

このようなことは、注釈や前提などにRSAアルゴリズムを使用した場合の例と書くだけで解決する話である。適切に前提や前置きを記載する必要がある。

まとめ

デジタル署名で「秘密鍵で暗号化」という表現を使う際は以下のことを理解してほしい。

その他

秘密鍵で復号

秘密鍵で暗号化」は間違いで、「秘密鍵で復号」が正しいという表現を見かけた。

こちらも調べてみたが、個人的にはさすがにこれは言い過ぎだと思う。

単純に非常に分かりづらい。やはり、署名と暗号化(復号)は異なる概念である。

実はデジタル署名のWikipediaに「hash-and-decrypt」という文言が残されている。

デジタル署名 - Wikipedia

ずっと昔はそのような議論があったかもしれない。

現在は、調べた限りおそらく誰もそのようなことは言っていないようである。

あと、デジタル署名の「秘密鍵の暗号化」は間違い主義者が「秘密鍵で暗号化」としているのはなぜなのかは気になっている。

個人的には鉤括弧の範囲を単に「暗号化」としてもいいのではと思っており、わざわざ秘密鍵のところまで含めている理由は正直よく分かっていない。おそらく暗号化のRSAアルゴリズムの「公開鍵で暗号化」と対比させるためかもしれないと推測しているが、確証は全くない。

RSAアルゴリズムの今後について

ウェブブラウザでアクセスしているサイトのサーバ証明書を確認できるが、時々署名アルゴリズムがECDSAであるものを見かける。

それに、RSAアルゴリズムがそろそろ限界かもしれないという記事も見かける。

近い将来RSAアルゴリズムがほとんど使われなくなった場合に「秘密鍵で暗号化」という表現はどうなっていくのだろうか。

最後に

私個人の意見としては、「秘密鍵で署名」でいいのでは。