シュナイアーの法則 (Schneier's Law)

Takayuki Kawamoto

Contact: there is no way to me now.

First appeared: 2018-02-21 18:01:38,
Modified: 2018-02-22 22:20:56,
Last modified: 2018-02-24 17:23:53.

はじめに

YouTube で久しぶりにブルース・シュナイアーBruce Schneier)の講演を眺めていたときに、ふと彼の著作一覧を調べようとウィキペディアへアクセスしたら、もちろん彼の名前を冠している「シュナイアーの法則」という言葉は紹介されているのだが、その意味合いが全く説明されていないことに気づいた。

「無能な素人から最上の暗号家に至るまで、誰であれ、自分自身が破ることのできない(暗号の)アルゴリズムを作ることができる(Anyone, from the most clueless amateur to the best cryptographer, can create an algorithm that he himself can't break.)」という警句は「シュナイアーの法則」として知られている。

[Wikipedia contributors, 2017]

上記の記述だけで、果たしてどれくらいの人がシュナイアーの法則を理解できるのだろうか。どうして素人が自分でも破れないような暗号を作れるのか。暗号のアルゴリズムを作れるなら、その人は素人ではないのではないか。もちろん、ここで強調しなくてはいけないのは、このような暗号アルゴリズムは、だいたいにおいて暗号学的に妥当なアルゴリズムではないということであって、暗号アルゴリズムを素人でも暗号学的に妥当なレベルで簡単に作れるということではない。しかし、このフレーズの何が重要なポイントなのかを誰も解説しようとはしていないために、国内でも多くの専門家は知っているらしいが、彼らが本当にこのフレーズの主旨と趣旨の両方が分かっているのかどうかは実は怪しいという実情がある。現に、「シュナイアーの法則」というキーワードを固定して(つまり二重引用符で囲むことで正確に「シュナイアーの法則」というフレーズを含んでいるページだけを)検索してみると、下記のようにウィキペディアのページ以外はまともなページがないという状況だ。(とは言え、実は DuckDuckGo で “bruce schneier's law” というキーワードで日本語へ限定せずに検索してもロクなページが出てこないのだが。)

Result at Google with a Japanese phrase of this law

この結果にはいささか驚いた。もちろん、シュナイアーや彼の事跡は情報セキュリティ業界の人々しか知らないだろう。たとえプログラマやシステム開発や IT ベンチャーの業界人ですら、大半は名前すら知らないと思う。あくまでも一例だが、Beautiful Security (eds. by Andy Oram and John Viega, O'Reilly, 2009) という本にシュナイアーの名前が出てくるのは、小さなエッセイの著者として参考文献表(246ページ)に一箇所だけである。しかし、せめて情報セキュリティの技術に関する専門家であれば彼の著作を幾つかは読んでいると期待しても無理な話ではないだろうし、情報セキュリティ・マネジメントに従事している僕らのようなバックオフィス系の実務家であっても、彼の著作の幾つかは(翻訳書ならなおさら)特に高度な離散数学や代数系のような素養を要求するわけでもないので、手にしていてもおかしくはないだろう。そして、実際に彼の著作を読むと、シュナイアーは何冊かの著作で「シュナイアーの法則」と同じ趣旨の議論を述べている。

暗号アルゴリズムやプロトコルを選ぶのはむずかしい。これで絶対、というものがないからだ。暗号アルゴリズムを比べるのに、圧縮アルゴリズムを比べるようなわけにはいかない。圧縮は簡単だ。あるアルゴリズムが他より優れている――つまり圧縮率が高いとか高速だとか――ことを実証できる。セキュリティはむずかしい。あるアルゴリズムが弱いことは証明できるけれど、自分に破れないからといって、そのアルゴリズムが強いことは証明できない。これで絶対というのがないから、手持ちの証拠しか使えない。それは、専門家の合意、というやつだ。

[Schneier, 2001: 156]

こういう箇所からシュナイアーの考え方を受け取れば、「シュナイアーの法則」について言及し、専門家や実務家の観点から自由に語りうることは容易に予想がつくし、期待もできる。しかし、少なくとも日本語のリソースとしては、上記で述べたように(Google や Bing の検索結果としてヒットした限りでの、という前提はあるにせよ)殆ど言及も議論もされていない。これは、要するにシュナイアーの法則というフレーズどころか、彼が論じている内容についても、国内では殆ど議論されたり考察されていないのではないかと疑える余地がある。もちろん、専門家や実務家が海外の或る技術者が「言ったこと」について議論していなくてもいいが、しかしその人物が議論しているポリシーや発想や着想や主張については、専門家や実務家として従事している限りは学んで検討に付してから自分なりの見識をもつことが要求されてよいだろう。その結果として、ブログやウェブページに記載するかどうかは確かに自由だが、これだけページがないというのはどう考えても不自然だ。仮に、専門家や実務家ならば、この程度のフレーズの主旨は正しく理解しておくのが当たり前であって、わざわざフレーズを取り上げて紹介したり論じること自体が一種の恥であるというコンセンサスが、国内の情報セキュリティ技術者や研究者や実務家の中にあると仮定しても、いまこうして書いている僕のような人間が全く国内におらず、何らかの牽制が社内や学界や業界で働いていたなどという陰謀論を想定しても無意味だろう。つまり僕の予想としては、多くの研究者や技術者や実務家は、「シュナイアーの法則」というフレーズどころか、彼が語っている話題そのものについて、そもそも関心がないのではないかという可能性しか残らないのである。もしそのように思われては困るというプロパーや実務家がいるなら、ぜひ反論を期待したいところであるが、少なくとも「無能」呼ばわりしていないだけ、こちらは穏健に解釈しているということだけは肝に銘じておくべきだ。

冒頭に戻る

「シュナイアーの法則」の経緯

「シュナイアーの法則」と呼ばれることになった議論が現れた経緯は、シュナイアー自身が丁寧に調べている。彼が2011年に書いた “Schneier's Law” というブログ記事よれば、1988年に彼が自分の発行するメルマガで書いた 'Memo to the Amateur Cipher Designer' というエッセイに “Anyone, from the most clueless amateur to the best cryptographer, can create an algorithm that he himself can't break”(「誰であれ、それがたいていの無知な素人だろうと最高の暗号解読者だろうと、自分自身で破れないアルゴリズムを作り出せてしまうものだ」)というフレーズがある。しかし、これだけだと(趣旨は措くとしても)多くの人には主旨が分からないので、やはりもう少し丁寧に紹介する必要があるだろう。彼はそのエッセイで、続けて次のように書いている。「そういうアルゴリズムを作り出すのは、困難ですらない。何が困難なのかと言うと、それは何年かの解析を経ていようと誰にも破れないようなアルゴリズムを作り出すことなのである。そして、そのアルゴリズムが解析に何年かかろうと誰にも破れないということを証明する唯一の方法は、最高の暗号解読者たちによる解析結果なのである」[Schneier, 1998]。つまり、アルゴリズムを作り出した当人が自分でアルゴリズムの強さを主張しても不十分なのであり、アルゴリズムが強いかどうかは専門家のコミュニティによって検証されなくてはならないという、言わば社会的な信用という根拠を要求する。

もちろん、このような考え方は「草の根」という観念を何か無条件に善いものだと考えがちな人々からは反感を持たれるだろう。なぜなら、専門家のコミュニティによって認められた専門家の業績でなければ信用に値しないというのであれば、専門家によって認められていないアマチュアは専門家のコミュニティに加わることなど永久にできず、したがってアマチュアは最初から専門家のコミュニティからは締め出されてしまっているように見えるからだ。これは、しばしば大学の教員採用において「パラドクス」と揶揄されるものと似ている。なぜなら、日本の大学において若手の研究者を教員として公募する際に、その採用条件として「講師の経験がない人は採用しない」と公示することがあり、これでは大学の現職教員しか応募できなくなり、博士課程修了者や OD が締め出されてしまって、殆どの若手研究者が応募できなくなるという状況に陥り、これは専門家でなければ専門家として認められないと言っているかのような上記の状況と似ている。

大多数のカンファレンスや研究会では、多くの専門家による解析を経ていない、無名の人物が提案する暗号アルゴリズムの発表は受理しない。これは不公平に見えるかもしれない。なぜなら、無名の人物は無名であるがゆえに暗号技術を公に認めてもらえず、それゆえ成果を誰にも知られずに、無名な人は無名なままで終わることになるからだ。しかし実際には、無名の人物のアルゴリズムが公に認められないであろう理由というのは、その人物がアルゴリズムの「設計」しかしていないからなのである。もし、無名の人物でも既存のアルゴリズムについて解析できる能力があることを公にすれば、専門家として認められるかもしれないし、そうなれば多くのカンファレンスで論文を受理してもらえる。

[Schneier, 1998]

そして、シュナイアーが述べるところでは、このような考えを公に「シュナイアーの法則(Schneier's Law)」として名付けたのは、コリー・ドクトロウの次のような文章だったという。

鍵の導入というのを考えてみよう。鍵を使う暗号は、使わない暗号よりも安全だ。なぜなら、もしその暗号が破られたり、それどころか暗号化したメッセージが通信経路で奪われたとしても、鍵がなければ(あるいは鍵を解析できなければ)メッセージは解読できないからだ。そして第二次大戦後に、僕がシュナイアーの法則として考えている次のようなことを僕らが実感するようになって、鍵はとても重要なものになっている。「どうやって壊せばいいのか本人が想像もつかないほど優れたセキュリティ・システムを、誰でも発明できる(any person can invent a security system so clever that she or he can't think of how to break it)」。これはつまり、あなたの暗号アルゴリズムの設計に間違いがあるかどうかを見つける唯一の方法は、そのアルゴリズムを有能な人々に知ってもらって、実際に破れるかどうかを有能な専門家である他人に吟味してもらうしかないということなんだ。こういう重要な手順を踏んでいない限り、あなたがどういう暗号やセキュリティ・システムを編み出そうとも、たぶんあなたは、結局のところぬか喜びしているにすぎない。つまり、既に攻撃者はあなたのアルゴリズムをとっくに破っていて、傍受したメッセージをひっそりと解読して薄ら笑いを浮かべているかもしれないってことだ。

[Doctorow, 2004]

なお、この「法則」と似たような考えは更に古くからあるらしいが、それ自体は別に驚くようなことでもないだろう。先行するアイデアの一つとして、次の節でケルクホフスの原理と呼ばれるものの一部を紹介するが、他にも似たようなアイデアは数多くあり、そのこと自体はシュナイアーの議論の価値を減ずるものではない。(実際、彼は何も「シュナイアーの法則」と呼ばれる議論を自分のオリジナルな業績だと言っているわけでも何でもない。)

冒頭に戻る

「シュナイアーの法則」の妥当性

ここまでなら、初めてシュナイアーの法則を紹介された人の中でも察しが良い人は即座に理解できるのかもしれない。よって、日本版のウィキペディアに書かれているような引用一つで十分だと言い得るので、わざわざプロのセキュリティ技術者は自明の知識についてブログ記事など書かないものだと開き直ることだってできるだろう。それはちょうど、「私は今日も呼吸をしていた」と書くようなものだからだ。しかし、ここから先のような吟味や検証については、やはり「法則」を支持するにせよ疑問を感じるにせよ、思うところがあれば何かを議論したり表明しておくことが望ましいと思う。こういうテーマに関する専門家や実務家としての見識というものは、アンチウイルス・ソフトのベンダーや情報セキュリティのコンサルティング会社や大学の研究室において、部下や同僚や学生と話して互いに了解しておけばいいというものではないのである。その最も強い理由は、シュナイアーたちがまさに論じているように、世の中には安全性を保証する根拠が開発者である自分たちの検証だけというソリューションやツールやサービスが市中に出回っているからだ。そして、そういう技術が特許を取得しているというのは(ましてや出願しているだけというのは)、暗号技術の設計に対する一定の保証にはなり得ても、それをサービスとして提供する際の安全性の保証にまではならない。情報セキュリティに関する全ての設計やモデルというものは、blockchain と各種の仮想通貨システムの関係が示すように、理論、理論の応用、応用の実装、そして実装の運用と、それぞれの実務なり場面を区別してリスクを見積もるものである。どれほど理論として優れた数理モデルがあろうと、その応用が脆弱性を追加してしまう可能性もあるし、実装時にコーダが脆弱性を作り込むこともあれば、サービスの運用方法や手順の間違いで途方もない結果を生じることがあり得る。このようなことは、およそ単独の部門や企業や業界あるいは国の単位ですら十分な検討ができる人材や時間を確保できるとは限らず、少なくとも理論に関する事前のリスク対策として最も効果的で効率的なのは、理論(設計)を自分たちがどう理解しているかということや、どう評価しているかを公に問うことなのである。

では、改めてシュナイアーの主張に戻ってみよう。本稿の「はじめに」で彼の著作から引用したが、その後にも同じ趣旨からシュナイアーは次のように書き進めている。

問題はつまり、どんな素人でも、自分では破れないような暗号要素*を設計することはできる、ということだ。これがだいじな点。つまり、だれでもすわって暗号要素をつくり、それを破ろうとして失敗して、こう宣言できるわけだ。「高セキュリティアルゴリズム/プロトコル/なんたらを発明しましたよ!」。この宣言の本当の意味はこういうことだ。「自分じゃ破れないから、高セキュリティだよ」。これを聞いて真っ先に聞くべき質問は、「ほぅ、そういうあんた、何者?」あるいはもっと具体的には「あんたが破れないってだけで、なんで高セキュリティだと思わなきゃならんわけ? あんたが破れなきゃほかのみんなも破れないと考えるべき資格があんたにはあるわけ?」

[Schneier, 2001: 157]

*元の表現は “cryptographic primitive” と言い [Schneier, 2015: 116]、暗号技術を利用したセキュリティ・システムを設計するにあたって処理を分解したときの基本的なルーチンなり仕組みのことを言う。例えば、ストリーム暗号とか一方向性関数とか疑似乱数発生器などだ。もちろん「要素」で意味は通じるのだが、“building blocks” あるいは “components” という意味合いが伝わり難いように思う。昨今、「要素」という言葉を “aspect” のような意味で使ったり理解する人も多いため、できれば(たとえ読み手が不見識な人々でも)誤解を与えないようにしたいところだが、プロパーの著作を見ると「暗号プリミティブ」などと表記していて、これはこれで普及しているなら合わせておきたいところだ。しかし、今度は日本語で「プリミティブ」と書くと、「素朴」とか「原始的」などという意味にとる人が出てくるのでややこしい。ということで、個人的には「暗号学的な構成要素」という非常に堅苦しい表現にするか、あるいは山形さんのノリに倣って「暗号の部品」とでも訳した方がいいのではないかと思えてくる。

既に彼の趣旨は十分に展開したり説明できていると思うので、次にこのような「権威主義」が本当に妥当なのかどうかを検討してみよう。なお、僕が当サイトで書いているものを読んでいる方はご承知のとおり、僕は「権威」というものを社会の安定性や効率にとって必要だと考えているので、シュナイアーの議論を「権威主義」だと指摘したからといって、だから彼の議論や発想は駄目だとか批判しなくてはならぬなどと loaded language を込めているわけではない。とは言え、僕は権威という委譲の仕組みを許容しているだけであって、形式的に国会議員であるとか大学教員であるとか上場企業の経営者であるというだけで、当該分野について権威を認めるのは愚かであろう(大学教員であろうと僕よりも学術的な観点で言って無能な人は大勢いる。もう Twitter でそれは十分に分かった)。

シュナイアーの議論は、主旨としては専門家や実務家あるいは学術研究者のコミュニティによる権威をむやみに振り回しているだけに見えるが、その後に続く、「暗号コミュニティが発見したのは、だれ一人としてそんな資格をもったヤツはいない、ということだ」(“What the cryptographic community has found is that no one person has those sorts of credentials”)という結論を読めば、暗号アルゴリズムの妥当性を、誰か最終的な判定者なるものに託すことはできないという見識もうかがえる [Schneier, 2001: 157; 2015: 116]。それに、アマチュアであろうと自分の能力を公に証明すれば「専門家」の一人として受け入れられるようになるという道筋を描いているわけなので、専門家のコミュニティとアマチュアや素人という断絶それ自体に何か価値判断を与えているわけではない(愚かな権威主義というものは、自分の権威を保護することを自己目的化してしまうので、こういう断絶を固定して自分の立場が安全になることを求める)。なんにせよ、シュナイアーが暗号アルゴリズムの妥当な評価手続きに求めているのは、その評価を公に行うことと、一定の能力を公に立証したものが評価することという二つの点に集約できるだろう。もちろん彼も述べているように、どれほどすぐれた専門家であろうと、或る一人の人物が既存の成果を遥かに凌駕するような特性をもつ暗号アルゴリズムを考え出せないと断言し得る根拠は持っていないだろうし、あらゆる暗号アルゴリズムについて妥当な評価ができるような優れた人物が出てこないと断言できる根拠もない。しかし、それだけのことで、どこにでもいる日曜プログラマが安楽椅子で考え出したアルゴリズムを ACM や NSA の作業部会において真面目に検討するべきだと言える根拠にはならない。そして、どちらの想像や推定を基準にして暗号アルゴリズムの評価を行うことが社会にとって生産的で信頼し得る成果を上げるかは、おおよそ歴史が証明していると言ってよいだろう。もしチューリングの論文と見知らぬアマチュアの論文とを数学者のコミュニティが全く同じだけのリソースで査読しなければならないとすれば、アマチュアの論文の方が数も多くて頻繁に学会や学会誌の編集者や個々の研究者の元へ送られてくるので、学術コミュニティの生産性は著しく低下するだろう。学術やビジネスにおいては、偽陰性を恐れるあまり偽陽性の山を処理して「本当は陰性」だと取り除いていかなければならなくなると、その集団の生産性は極端に下がる。したがって、以上の理由でシュナイアーの議論は妥当として良いと思う。ただし、見かけは在野の研究者やアマチュアを締め出すような(ただの)権威主義に見えてしまうので、この議論は丁寧に補足した方がいいとは思う。

では次に、シュナイアーの法則は「ケルクホフスの原理Kerckhoffs' principle)」として知られている原則に関連付けられて紹介されることもあるので、これらの関係を検討してみよう。

[...] 更に暗号学の分析を進めるには、ケルクホフスの原理、つまり「敵はその仕組みを知っている」という暗号の基本的な原理を打ち立てなくてはならない。この仮定の重大さが過小評価されてはならないのは、或る暗号システムが本当に安全であると分かるための唯一の方法は、最善の暗号解析によって破れないことにある。[暗号をやりとりする] アリスとボブが、[暗号を破ろうとしている] イブによって知られえない暗号化の仕組みを選んでいたら良かったのだなどと推定することは、恐らく馬鹿げたことなのだろう。なぜなら、もしイブがその仕組みの仕掛けを知ることになれば、イブは簡単に両人のセキュリティを破れるだろう。秘密にするのは鍵だけにしておく方が良いのである。

実際、アリスとボブが自分自身で暗号アルゴリズムを発明しようと、そういうアルゴリズムはたいてい安全ではない。これはシュナイアーの法則と呼ばれているものであり、「無能な素人から最上の暗号家に至るまで、誰であれ、自分自身が破ることのできない(暗号の)アルゴリズムを作ることができる」と表現されている。したがって、アリスとボブに最善の助言をするなら、何度も解析を受けて検証されてきた方法やアルゴリズムを使うべきだと言わなくてはいけない。

[Jogenfors, 2017: 4f.]

上記の説明で語られているように(なお、「敵はその仕組みを知っている」というフレーズはクロード・シャノンによる言い換えなので、「シャノンの格率(Shannon's maxim)」と呼ばれることもある)、暗号というものは暗号アルゴリズムが攻撃者に知られていると仮定してもメッセージを安全に通信できるように設計されることが理想とされる。例えば、サーバ証明書を使った HTTPS 通信や PGP を使った暗号化メールの送受信のように鍵だけを秘密にしておけば、それぞれの通信プロトコルや暗号化のアルゴリズムが公表されていても安全性が損なわれることはないというわけである。

シュナイアー自身がケルクホフスについて言及している文章を見てみると、すぐに Applied Cryptography: Protocols, Algorithms, and Source Code in C(『暗号技術大全』)にある、以下の箇所が出てくる。

それから、ケルクホフスによる次のような前提を忘れないようにしよう。もしあなたの新しい暗号システムの強度が、そのアルゴリズムの内部機構を攻撃者に知られていないという事実に依存しているなら、あなたは救いようの無いバカなのだろう。あるいは、アルゴリズムの内部機構を隠し続けるということが、その内部構造を研究者コミュニティの吟味に委ねるよりも、あなたが考えた暗号システムのセキュリティを高めるのだと信じているのなら、あなたは間違っているのだ。そして、もしあなたのコードを誰も逆アセンブルしたりしないとか、あなたのアルゴリズムについてリバース・エンジニアリングを実行しないだろうと思っているなら、それは甘い(1994年に RC4 のアルゴリズムがそうやって実際にリバース・エンジニアリングされてしまったのだ。詳しくは 17.1 で述べる)。我々がもつ最高のアルゴリズムというものは、その内部構造が公にされて、何年にも渡って世界中の優れた暗号論者たちによって攻撃されても、まだ破られていないアルゴリズムのことなのである。[...] 自分自身で破れなかったというだけの暗号を誰にも破り得ない暗号だと言い張る人たちは、天才かアホウのどちらかだ。そして気の毒なことに、そういう人々の大多数はアホウなのである。[...] よい暗号論者というものは、同僚の評価によって、よいアルゴリズムとクソを見分けるのだ。

[Schneier, 1996: 6f.]

このように、「秘匿によるセキュリティ(Security through obscurity)」を否定するスタンスとして、ケルクホフスの原理とシュナイアーの法則はアイデアを共有していると言えるだろう。僕も当サイトで WordPress のセキュリティ対策について記事を書いたときに、WordPress のバージョン番号がメタタグとして出力されることを抑制してもセキュリティ対策になどならないし(そんなものを確認しない大規模なボットネットで、手当たり次第に攻撃される危険が増えてきている)、Apache のシグネチャ表示を抑制したところで、バージョンが分からないから攻撃をやめるなんて攻撃者などいないと書いた。寧ろ、そのような情報の隠蔽によってサーバ・ソフトウェアや WordPress を古いまま使い続けるなどという運用の言い訳にしてしまうサイト運営者の愚かさこそが、サイトやサーバのセキュリティを損なっているのである。

冒頭に戻る

参考文献

Cory Doctorow (2004)
'Microsoft Research DRM talk,' given on June 17, 2004, http://craphound.com/msftdrm.txt.
Bruce Schneier (1996)
Applied Cryptography: Protocols, Algorithms, and Source Code in C. 2nd edition, John Wiley & Sons, 1996.
Bruce Schneier (1998)
'Memo to the Amateur Cipher Designer,' Crypto-Gram, October 15, 1998.
Bruce Schneier (2001)
『暗号の秘密とウソ: ネットワーク社会のデジタルセキュリティ』, 山形浩生/訳, 翔泳社, 2001 (1st, 2000); [Schneier, 2015] の初版の翻訳.
Bruce Schneier (2011)
'“Schneier's Law”,' Schneier on Security, posted on April 15, 2011 at 1:45 PM.
Bruce Schneier (2015)
Secrets and Lies: Digital Security in a Networked World, 15th Anniversary Edition, John Wiley & Sons, 2015 (1st, 2000); [Schneier, 2001] の原著の新版.
Jonathan Jogenfors (2017)
Breaking the Unbreakable: Exploiting Loopholes in Bell's Theorem to Hack Quantum Cryptography. Linköping University (Linköping Studies in Science and Technology Dissertations, No. 1875), 2017.
Wikipedia contributors(2017)
"ブルース・シュナイアー," Wikipedia, https://ja.wikipedia.org/w/index.php?title=%E3%83%96%E3%83%AB%E3%83%BC%E3%82%B9%E3%83%BB%E3%82%B7%E3%83%A5%E3%83%8A%E3%82%A4%E3%82%A2%E3%83%BC&oldid=65953887 (accessed October 16, 2017).

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Google+ Twitter Facebook