<前の日記(2008年02月17日) 次の日記(2008年03月02日)> 最新 編集

高木浩光@自宅の日記

目次 はじめに 連絡先:blog@takagi-hiromitsu.jp
訪問者数 本日: 2368   昨日: 1295

2008年02月29日

公開鍵暗号方式の誤り解説の氾濫をそろそろどげんかせんと

「コンピュータセキュリティを基礎から」というと、暗号の解説、特に共通鍵暗号と公開鍵暗号の違いからなどといった解説をよく目にする。昔は専門の方によって注意深く書かれていたのに対し、ここ何年かはひどい状況になっている。先月、宮崎で開かれたSCIS 2008の席でも暗号研究者の方々との雑談でそういう話になった。私は暗号は専門でないのでその話題は迂闊に書けないできたが、このところの巷の誤り解説の氾濫ぶりは目に余るものがある。

最もひどく蔓延っていてしばらく消えそうにない間違い解説の典型例は次だ。

  • 「公開鍵で暗号化したものを秘密鍵で復号するのと同様に、秘密鍵で暗号化したものを公開鍵で復号できるようになっている。」
    • 事例1: 日本ベリサイン株式会社による公開鍵暗号方式の解説

      このような共通鍵暗号方式の問題点を解決する暗号方式が、公開鍵暗号方式です。(略)つまり、公開鍵を使って暗号化した平文は、ペアとなっている秘密鍵によって復号化します。

      「公開鍵は暗号化するための鍵で、秘密鍵は復号化するための鍵なのかな?」

      いいえ、公開鍵は秘密鍵を逆に使って暗号化することもできます。秘密鍵を使って暗号化した平文は、ペアとなっている公開鍵を使うと復号化できます。電子証明書の基本的なはたらきはこの原理に基づいています。

  • 「公開鍵暗号方式による署名は、メッセージダイジェストを秘密鍵で暗号化することで実現する。」
    • 事例2: 総務省「国民のための情報セキュリティサイト」用語辞典「公開鍵」

      電子証明書やデジタル署名で公開鍵暗号方式を使う場合には、送信したメッセージが本人のものであることを証明するために、本人の秘密鍵で署名を暗号化して、メッセージに埋め込みます。メッセージを受け取った人が、メッセージ中に暗号化された署名を対となる公開鍵で復号できれば、本人の作成したメッセージであることが証明されます。

これらの解説は誤っている。これらは、RSAアルゴリズムを説明するものにはなり得ても、公開鍵暗号方式を説明するものになっていない。公開鍵と秘密鍵が「逆に使える」というのはRSAアルゴリズムがたまたま(まあまあ)そうなだけであって、そのような性質を持たない他の公開鍵暗号方式がたくさん存在する。

断りなくRSAを前提に公開鍵暗号方式一般をこのように解説してしまうことが、どのくらいの重大な誤りと言えるのか、私は暗号が専門ではなくわからなかったので、暗号の専門家に確認したところ、少なくとも、前者については最初に発表された公開鍵暗号方式がその性質を持たないこと、後者については現に広く使用されている方式がその方法ではないことから、完全なる誤りと言ってよいとのことだった。

私はこうした指摘をずいぶん前にWebで見かけて知った。たとえば次などが、古くから公表されていて多く読まれた指摘ではないかと思う。

  • 電子署名≠秘密鍵で暗号化, 稲村 雄, 2003年7月21日(最終更新日), 初出日不明(少なくとも2002年5月には存在したもよう)

    そもそも、『暗号化』と呼ぶ以上、それは(複数であっても構わないんだが)『特定の相手によってのみ復号可能』という条件が成り立っていて欲しいんだよね。ところが、公開鍵を不特定多数の相手に公開してしまってこその公開鍵暗号なんだから、『秘密鍵で暗号化』されたデータなどというものがもしあったとしても、それは誰でも復号ができる、つまり、暗号化されたと呼べるようなデータではまったくないわけ。で、正確を期すならば、『秘密鍵で変換されたデータ』程度に留めておかなければならないということ。

最近でも昨年、次の指摘があった。

この数日後に「IT用語辞典 e-Words」の公開鍵暗号の項目は訂正されたようだが、デジタル署名の項目は指摘に対応する訂正はされていない。「IT用語辞典 e-Words」はGoogleで検索したときにWikipediaに次いで上位に現れるサイトであり、こういったところに誤りが書かれていると、見よう見まねで書かれる解説で誤りが再生産されてしまう。

2006年に書かれた日経BPの「情報セキュリティ入門」にも同様の誤り解説がされている。

  • 情報セキュリティ入門, 公開鍵暗号方式[前編]----利用するためのルール, 出口雄一 / 日経IT Pro, 2006年6月14日

    ポイント

    ●公開鍵暗号方式では,1人の利用者(ノード)に対して二つの鍵(キー)を作る。片方を「個人鍵」と呼び,もう片方を「公開鍵」と呼ぶ
    ●個人鍵は,作ってからその鍵ペアを使わなくなるまで,絶対に秘密に取り扱う。このため,秘密鍵と呼ぶ場合がある。これに対し公開鍵は,その名の通り,不特定多数のユーザーに公開して使う
    ●公開鍵で暗号化したデータは,そのペアの個人鍵でしか復号できない
    ●個人鍵で暗号化したデータは,そのペアの公開鍵でしか復号できない

この誤解はそうとう蔓延っており、訂正させても訂正させてもまた湧いてくるという勢いだ。

ところで、先月のSCISで話題になったのは、それに加えてさらに誤り満載なある日経BPの連載記事の話だった。

  • 原理から学ぶネットワーク・セキュリティ 第3回 公開鍵と秘密鍵を作るアルゴリズム, 波多浩昭 / 日経Linux, 2007年11月27日

    デフィーの着想は,鍵を2種類に分けるというものでした(図2)。一つめの鍵は,それまでと同様に大切に扱う鍵で「秘密鍵」といいます。もう一つの鍵は「公開鍵」です。秘密鍵があれば,ある手順により公開鍵を容易に作り出せます。しかし公開鍵から秘密鍵は作り出すことができない,もしくは作り出すのに天文学的な時間が必要となるというものです。

    この秘密鍵と公開鍵はペアで不思議な動作をします。(略)今度は秘密鍵で宝箱を閉めてみます。すると,今後はそのペアとなっている公開鍵でなければ箱は開きません。箱を閉めた秘密鍵を使っても箱は開かないのです。不思議な箱と不思議な鍵です。デフィーとヘルマンはこの仕組みで,鍵交換問題をどのように解決したのでしょうか?(略)

    (略)

    RSA暗号

    デフィーとヘルマンのアイデアは画期的で素晴らしいものでしたが,実際に「秘密鍵から公開鍵を作るのは容易だが,その逆は困難である」という鍵をどうやって作るのかという問題がありました。(略)

    問題を解く最初のステップは,与えられた数を2つの数に因数分解することです。これ自体はさほど難しくありません。難しいのは,その因数が素数であるかどうかの判定です。

    Nが素数であるかどうかを検査する方法として,√Nまでの素数で次々と割り算してみるというのがあります。しかし,「nより小さな素数は,およそ n/log(n)個ほど存在する」(素数の定理)ため,10進数で150けた程度あるNが素数かどうかを判定するには,10進数で70けた以上の個数の素数をラインナップして割り算をしなければなりません。現在のコンピュータでは,この計算が終了するまでに太陽が燃え尽きているということになります。

    (略)

    D-H鍵交換アルゴリズム

    (略)Diffie-Hellman鍵交換アルゴリズム(略してD-H鍵交換アルゴリズム)を図9にまとめています。このアルゴリズムは「数は累乗するより対数(累乗の逆演算)を計算する方が難しい」という原理に基づいています。

  • 原理から学ぶネットワーク・セキュリティ 第4回 ハッシュ関数, 波多浩昭 / 日経Linux, 2007年12月11日

    ハッシュ関数とは,何らかの数値が入力されて,何らかの数値が出力される仕掛けの一つです。同じ数値を入力する限り,必ず同じ数値が出力されます。(略)そこでperlやJavaのような言語では,ハッシュ・テーブルを使うことができます。ハッシュ・テーブルは、(略)

    (略)

    この暗号化されたハッシュ値を「MAC」(Message Authentication Code)といい,特にハッシュを使っていることからHMACともいいます。受信側でも,受け取ったメッセージのハッシュを計算し,一方でMACを復号化してみて計算したハッシュと一致すれば,メッセージは改ざんされていないと分かります。

  • 原理から学ぶネットワーク・セキュリティ 第5回 電子証明書と認証局, 波多浩昭 / 日経Linux, 2007年12月25日

    公開鍵暗号では,「秘密鍵」と「公開鍵」の2つの鍵をペアにして使います。この2つの鍵は,次の2つの性質を持っています。

    性質1)秘密鍵から公開鍵は容易に生成できるが,その逆は非常に困難(図1)。

    性質2)秘密鍵で暗号化した情報は,そのペアである公開鍵でなければ復号化できない。また公開鍵で暗号化された情報は,そのペアである秘密鍵でなければ復号化できない(図2)。

    (略)

特に第3回の記事は多重に間違っているためどういう間違いをしているのか説明しにくい。私は暗号は専門でないので正確に間違いを指摘する自信がない。この連載に対しては、少なくとも2名の方による間違いの指摘がWebに書かれた。

後者の方は日経IT Proに指摘を送ったそうだが、記事に訂正はないようだ。前者の方の指摘は、わかっている者同士ではこれはひどいよねと認識を共有できても、間違いだと知るべき肝心な読者にはこの声は響かない書き方だと思う。私も何度か自分で書こうとしたが、専門外のことについて誤りを指摘する文はやはり書けない。

こうしたことは真正面から専門の方々にもっと指摘されたらよいのにと思う。必要な読者に読まれる形で。

一般的に言うと、専門家が非専門家の誤りを指摘するというのはなかなか難しい作業である。非専門家の読者の関心を集めるように書かなければそもそも読まれない。どのような誤解に基づくものかを見いだして指摘する必要がある。「専門家の視点と一般向けの視点は別なのですよ」というありがちな言い訳をされないように注意しなければならない。重箱の隅をつつく揚げ足取りと思われないようにし、過剰な指摘をしないよう注意しないといけない。加えて、感情的に反発されないように配慮しないと書けないと考える人もいるだろう。専門家であるが故に、指摘でミスをすれば職業上の信用を失うことになりかねず、慎重になってしまう。

blogの普及と認知はそうしたことをやりやすくしたのだと思うが、日本では暗号研究者によるblogはまだとても少ないようだ。

本日のTrackBacks(全100件) [TrackBack URL: http://takagi-hiromitsu.jp/diary/tb.rb/20080229]
まちゅダイアリー (2008年03月02日 19:41)

■1 暗号化と署名は対称じゃないよという話 高木浩光@自宅の日記 - 公開鍵暗号方式の誤り解説の氾濫をそろそろどげんかせんとより。 これらの解説は誤っている。これらは、RSAアルゴリズムを説明するものにはなり得ても、公開鍵暗号方式を説明するものになっていない。..

高木浩光@自宅の日記の『公開鍵暗号方式の誤り解説の氾濫をそろそろどげんかせんと』を読む。
確かに誤った情報は流れないに越したことはないのだけど。暗号なんかの分野になると...

検索

<前の日記(2008年02月17日) 次の日記(2008年03月02日)> 最新 編集

最近のタイトル

2024年11月11日

2024年07月28日

2024年07月27日

2024年07月07日

2024年04月07日

2024年04月01日

2024年03月23日

2024年03月19日

2024年03月16日

2024年03月13日

2024年03月11日

2023年03月27日

2022年12月30日

2022年12月25日

2022年06月09日

2022年04月01日

2022年01月19日

2021年12月26日

2021年10月06日

2021年08月23日

2021年07月12日

2020年09月14日

2020年08月01日

2019年10月05日

2019年08月03日

2019年07月08日

2019年06月25日

2019年06月09日

2019年05月19日

2019年05月12日

2019年03月19日

2019年03月16日

2019年03月09日

2019年03月07日

2019年02月19日

2019年02月11日

2018年12月26日

2018年10月31日

2018年06月17日

2018年06月10日

2018年05月19日

2018年05月04日

2018年03月07日

2017年12月29日

2017年10月29日

2017年10月22日

2017年07月22日

2017年06月04日

2017年05月13日

2017年05月05日

2017年04月08日

2017年03月10日

2017年03月05日

2017年02月18日

2017年01月08日

2017年01月04日

2016年12月30日

2016年12月04日

2016年11月29日

2016年11月23日

2016年11月05日

2016年10月25日

2016年10月10日

2016年08月23日

2016年07月23日

2016年07月16日

2016年07月02日

2016年06月12日

2016年06月03日

2016年04月23日

2016年04月06日

2016年03月27日

2016年03月14日

2016年03月06日

2016年02月24日

2016年02月20日

2016年02月11日

2016年02月05日

2016年01月31日

2015年12月12日

2015年12月06日

2015年11月23日

2015年11月21日

2015年11月07日

2015年10月20日

2015年07月02日

2015年06月14日

2015年03月15日

2015年03月10日

2015年03月08日

2015年01月05日

2014年12月27日

2014年11月12日

2014年09月07日

2014年07月18日

2014年04月23日

2014年04月22日

2000|01|
2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|05|06|07|08|09|10|11|12|
2012|02|03|04|05|06|07|08|09|
2013|01|02|03|04|05|06|07|
2014|01|04|07|09|11|12|
2015|01|03|06|07|10|11|12|
2016|01|02|03|04|06|07|08|10|11|12|
2017|01|02|03|04|05|06|07|10|12|
2018|03|05|06|10|12|
2019|02|03|05|06|07|08|10|
2020|08|09|
2021|07|08|10|12|
2022|01|04|06|12|
2023|03|
2024|03|04|07|11|
<前の日記(2008年02月17日) 次の日記(2008年03月02日)> 最新 編集