雑種路線でいこう

ぼちぼち再開しようか

RSAとNSAとの秘密契約疑惑で揺らぐ暗号システム評価

RSAといえば代表的な公開鍵暗号アルゴリズムで、作者が暗号を商用化するために設立した会社の社名でもある。その老舗がNSAから1000万ドルを受け取って、同社の暗号ツールキットBSafeで、NSAが開発したバックドアを含む擬似乱数生成器Dual Elliptic Curveを標準設定にしたとロイターが報じた。事実であればRSAやBSafeのブランドだけでなく、Dual_EC_DRBGをSP 800-90Aとして標準化したNISTへの信頼も揺らぐ。

あるNSAメモは、大胆にもその進捗状況についてこう書いている。「暗号解読機能がオンラインで使えるようになった。これでこれまで捨てられていた大量の暗号化インターネットデータを活用できる」 (略) ReuterがNSARSAに1000万ドル払って欠陥アルゴリズムを使わせたと暴露したことによって話は変わってきた。NSAがある種の邪悪な黒幕で、人気のセキュリティー標準を陳腐化しようと必死になっている、と思われていたものが、実は金を使って企業に侵入していたのだから。

報道からは実際どれだけ多くの製品がBSafeを組み込み、デフォルト設定通りDual_EC_DRBGを使っていたのかなど分からない点は多い。不適切な乱数が暗号システムの脆弱性となることは広く知られているが、専門機関でさえ気付けない欠陥を乱数生成器に仕込むだけで、どこまで暗号解読が容易になったかも気になる。
問題はRSAのBSafeだけでなく、中立的な機関として数多くの暗号アルゴリズムを評価・標準化してきたNISTがDual_EC_DRBGにお墨付きを与えてしまい、オープンソースで検証が容易であるはずのOpen SSLまでデフォルトではないが対応したことだ。オープンソースのメリットとしてバックドアの有無を検証できるとする神話があるが、専門家によるソースコード・レビューだけではバックドアの存在に気づけると限らないことも明らかになった。
BSafe以外に対してもNSAが解読容易になるよう実装者にアプローチしてきたのではないかという疑惑もある。著名なLinuxカーネルハッカーとして知られるGoogleのTheodore Ts'oが9月にDual_EC_DRBGの脆弱性が明らかになった際「インテルのエンジニア達からの /dev/random がRDRAND命令だけに依存にすべきだという圧力に抵抗したことを誇りに思う」とコメントしているように、実装で脆弱性のある命令のみに依存するよう複数の働きかけがあったようだ。
Microsoft Researchの研究者は2007年にDual_EC_DRBGの脆弱性に気づいて学会で非公式にプレゼンし、Windows Server 2008から対応したもののデフォルト設定にはしなかった。2007年末にWindowsのCryptography APIのページで「Bruce Schneierの分析を読んで欲しい」という指摘に対して「NIST標準だから対応したけどデフォルトでは使ってないよ。個々のプログラマーが自分で分析してオプション機能を使うか決めたらいい」と回答したやりとりが残っている。
NISTはDual_EC_DRBGに限らず様々な暗号アルゴリズムを標準化している。現在主流のブロック暗号AESやハッシュ関数SHA-2もNISTが標準化したものだ。今後、疑惑が更に広がる可能性はあるのだろうか?仮に一連の策謀が9.11を受けたものであれば、それ以前に標準化されたAESやSHA-2にバックドアが仕込まれた可能性は低い。あらゆる暗号システムを危殆化させるために乱数の標準化を標的としたのだとしたら賢い戦略だ。NISTの担当者がDual_EC_DRBGの問題を知った上で国家安全保障を目的に標準化したのか、たまたま審査をすり抜けてしまったかによって再発防止策は変わってくる。
RSAがどういった名目でNSAから資金を受け取ったのか、その時期も気になる。RSA2004年からBSafeでDual_EC_DRBGをデフォルト設定として採用したと発表した。ロイターの記事によると技術者は蚊帳の外で専ら経営陣によってNSAとの契約が進められたと元従業員が証言している。BSafeがNISTによる標準化の前からNSAの開発した擬似乱数生成器をデフォルト設定で採用したことはOpen SSLWindowsLinuxの対応と比べても突出しており、暗号屋のNSAに対する不信感を考えれば極めて不自然だ。RSAは今日になってNSAとの秘密契約を否定しているが、BSafeでDual_EC_DRBGをデフォルト設定した経緯について納得いく説明はまだない。
いずれにしても今後の暗号アルゴリズム評価で、NISTはこれまで以上に高い透明性を求められる。RSAに限らず実装者も暗号周りの仕様変更に関しては丁寧な説明が求められる。2007年には専門家の間でDual_EC_DRBGの脆弱性について指摘されていたことを教訓にすると、プログラマーは暗号ツールキットを扱う際にデフォルト設定に頼らず個々のオプションの安全性について情報収集した方が良い。