NSA(とGCHQ)の暗号解読能力: 真実と嘘

エドワード・スノーデンが米国家安全保障局(NSA)と政府通信本部(GCHQ)の暗号化能力に関する新情報を明らかにしました(The GuardianPro Republicaリーク文書...)。CryptoGirlもこの件をじっくり検討してみましたので、以下で簡単な質問に答えていきましょう。

暗号は安全ではないのですか?

安全でないわけではありません。基本的に暗号は数学(素数、有限フィールド、多項式...)であり、数学は証拠に基づいた確固たる科学です。暗号アルゴリズムはめったに破られることはありません(例:MD5)。「破られる」ことがあるのは、実装の部分です。なぜなら実装とは数学を不完全な状態で表したものだからです。脆弱性は実装時のバグ(バッファオーバーフローなど)からサイドチャネル攻撃(つまり、微分パワー解析、タイミング攻撃など、実装の物理的特性に基づいた攻撃)まで多岐にわたります。私の言うことが信じられませんか? NSAの文書へアクセスできる立場にいたBruce Schneierも「NSAは数学ではなく、主に不正行為により暗号解読を行っている」と、私と同様の見解を述べています。

しかし、SSLも破ることができるのではないかと思います!

その通りです。ですがSSLは暗号アルゴリズムではなく、セキュリティプロトコルです。

スノーデンが暴露した文書はSSLに関する私たちの懸念を裏づけるものです。以前のブログで書いたように、NSAは特定のドメインの秘密鍵を入手するか、あるいはman-in-the-middle(中間者)攻撃を実行していると思います。BEASTCRIMEBREACHなどの攻撃を使っている可能性もあります。

SSLは広く配備されているため、そのプロトコルに関しては多くのピアレビューが行われています(良いことです)が、セキュリティ関連の会議では毎年、新たな脆弱性が発表されています。NSAもこうした脆弱性のことは知っているでしょう。おそらく、ゼロデイ脆弱性に関しても情報を持っていると思います。


画像はFlickr経由でLaMenta3より無償提供

Matthew Greenは、SSLライブラリのなかでNSAが最も破られる可能性の高いのはMicrosoft CryptoAPIとOpenSSLだと言っていますが、私もこれと同意見です。特に数年前には、OpenSSLは9階層までしか証明書チェーンをチェックしていませんでした。特定の実体に対して出されている証明書は、より高い権限を持つ機関が発行するものであり、その高い権限を持つ機関の証明書は、さらに高い権限を持つ機関から発行されています。これが信用の連鎖(チェーン)です。ですから、チェーン内に10の証明書がある場合、OpenSSLではそのチェーンを調べきれなかったということになります。これは確認されている事項であり、それ以降この問題が修正されたかどうか、私はまだ確認していません。

ところで、Bruce SchneierはTLSの使用を推奨しています(TLSはSSLのより新しいバージョンであり、「SSL 3.1」とも言えます)。セキュリティ面では確かにSSLよりも優れていますが、同様に多くの脆弱性があるため、一概には信頼できないと私は思います。

NSAにはスーパーコンピュータがあり、優れた暗号作成者がいます。RSAアルゴリズムを破ることもできるでしょう

最初の文には賛成ですが、次の文には賛成できません。もちろん、NSAはパワフルなコンピュータと暗号作成者を有していますが、それでも2048ビットキーを持つRSAアルゴリズム(例えばGPGに使われている)を破るのには十分ではないのです。RSA 2048に総当たり攻撃を仕掛けるには、巨大な計算能力が必要です。現在、RSA Factoring Challenge(RSA暗号解読コンテスト)の最高記録はRSA 768となっており、それでもすでに膨大な作業です。

NSAがそれ以上のことをできるとは思えませんし、世界中の暗号作成者よりも優れた暗号作成者を有しているとも思えません。ShamirやRivest、Lenstra、Preneel、Coron、Bonehのような人たちは類まれな能力を持っており、NSAがそのような多様な科学者たちを動かすことができるとも思えません。

しかしRSAのケースでは、不適切な使用や実装により安全性が失われている可能性があります。例えば、PKCS#1と低指数を使ってRSA 1024に署名するのは安全ではありません。ですから、暗号ライブラリ(OpenSSL, BouncyCastleなど)をそうした設定で使用している人は、非常にまずいですね。RSA 1024が安全でないということではなく、その特定の組み合わせが安全でないということです。暗号アルゴリズムはすべて、適切に設計された特定のコンテクストで動作するよう設計されています。そのコンテクスト外で使用すれば、安全性は崩壊する可能性があります。開発者が言うように、マニュアルはちゃんと読みましょう。

ですが記事の解説では、できると言っています!

そうではありません。『ガーディアン』の記事で私もその情報を読みましたが、NSAにはRSAやAESを破る能力がある、と言っているわけではありません。「暗号解読能力を身につけてきている」とか、「画期的な能力」がある、という言い回しをしており、これではあまりにも曖昧な表現です。

私も記事の内容をすべて確認したわけではありません。ですから重要なことを見落としているかもしれませんが、それでも全面的に信用しないほうが良いでしょう。なぜなら、暗号作成者からすれば、技術的な内容には思えないからです。暗号作成者が「画期的な能力」を持ち合わせている、などと書くでしょうか? 書かないでしょう。暗号作成者はそのような言い方はしません。「o(2^n)で破ることができる」というような言い方をするはずです。私からすれば、今回の内容は上層部から出たものに思えます。皆さんも、現実の内容と一致しない商品説明を目にしたこと、ありますよね?

NSAは標準化団体を動かし、アプリケーションにバックドアを仕込んでいます

これはありえると思います。Matthew Greenがこの件を次のように要約しています。「暗号作成者たちは常にNIST(米国立標準技術研究所)に関して複雑な感情を抱いてきましたが、それもNISTがNSAと複雑な関係を保っているからです」

しかし、Guardianは2006年に制定されたどの標準規格のことを言っているのでしょうね。

同じことがP1363のような(一部の)RFCやIEEE標準にも言えるのだと私は考えています。確かに楕円曲線暗号はいくぶん曖昧であり、NSAが影響を及ぼした可能性はあります。これはBruce Schneierの「楕円曲線のシステムよりも、従来の離散対数ベースのシステムのほうが良いでしょう。楕円曲線のシステムは、NSAが自由に影響を及ぼすことのできる定数を使っているからです」という言葉とも一致しています。

プログラムにバックドアを仕込む件に関しては、ある程度事実であると個人的に保証できます。それもアメリカに限られたことではありません! およそ15年前、私は若手開発者としてかなり有名な暗号化商品の開発に取り組んでいました。フランスの法律を順守しつつ製品を商品化できるようにするためには、フランス政府のためにバックドアを埋め込む以外に方法はありませんでした。そのバックドアがあれば、セッション鍵、そしてそのツールで暗号化されているあらゆる文書を復号することができました。その製品には「SCSSI(フランスの以前の情報システムセキュリティ団体)承認」といったラベルが貼られ、実質的には、この製品にはバックドアがあったということを意味しています。フランスでは、暗号化に関する法律は以前ほど厳しくありませんが、アメリカが鍵供託を要求するのも驚きではありませんね。

どのようなツールを使えば良いですか?

Bruce Schneierがいくつかのツールを推奨しています。こちらの文書もご覧ください。Prism-breakも見てみると良いでしょう。私のほうでも個人的に安全だと思うもの、そうではないものを下の表にまとめてみました。残念ながら、「緑」のものも安全であることが保証されているわけではありません。例えば、実装に不備があることもあります。オレンジ色のものよりは良いですが...。

- the Crypto Girl