暗号とは何者か
テキストをでたらめな文字列に置き換え、元に戻す。それが暗号の仕事である。暗号はどのように機能しているのだろうか?そしてアメリカ政府は本当に暗号の無力化に成功しているのか?
私たちは、サイバー攻撃やサイト侵入のニュースに対してすっかり慣れっこになってしまった。しかしエドワード・スノーデンによる告発は、今までのニュースとは桁違いなほど、私たちがオンライン上のプライバシーや安全性に対して抱いていた信頼を根底から揺るがした。
現在ロシアに亡命中だと言われている元アメリカ国家安全保障局(NSA)局員のスノーデンは、驚愕するような内容の文書をメディアに公表した。その文書によれば、アメリカ及びイギリスの情報機関が意図的・組織的に、一般市民や企業がデータ保護に使っている最も基本的な安全装置を無力化していたというのだ。
これらの安全装置は「暗号」と呼ばれており、スノーデン自身もこれがオンライン・セキュリティーの鍵だと言っている。以下に示すのは、なぜ暗号が重要なのか、なぜ暗号は未だかつてないほどの脅威に晒されているのか、それに対して私たちは何ができるか、という考察である。
演算速度は安全性と無関係である
スノーデンが世界中のメディアを通じて少しずつ公開している文書を見る限り、NSAは、データやテキストを難読化するためのツールである暗号を完全に無力化することに成功したように思える。
しかし、たとえNSAが暗号技術の一部を脅かしたとしても、適切な条件さえ満たしていれば暗号はまだその役目を果たせるのである。
暗号がどのように機能しているのか理解するために、実際に暗号化されたテキストがどんな風になるのか見てみよう。以下のテキストは、Text Mechanic(Tiny Encryption AlgorithmとBase 64を使うウェブベースのツール。Base 64は、文字と数字の解読に使われるスキーム)を使って暗号化したものである。意味不明な文字列だが、この記事の最後の方に記されているパスワードを使えばText Mechanicのサイトで英語の文章に戻すことができる。
8WAtp8nUEOrzSu67t9tGITEzIdgr6huIpXqofo0rv2w9y3DzSu67t9tGITEzIdgr6huIpXqoTzARKuumMLuyHlGrWvGXy8acawjyliExMCHCfRU9VzlAipW4HFMVN3XZixDAw4EcmBHnnJozJYoPgheWYx3P1S11TEADaLlKVO5bXyBhEPQu6Z4jdUAdnHUkRuKBuHoCcU0hMTIhTzyYriExMCEI84A=
このテキストは一見デタラメに見えるだろうが、十分な時間とコンピュータースキルさえあればこの暗号を破ることも不可能ではない(最も簡単な方法は私からパスワードを聞きだすことだが)。
この例では「対称鍵暗号」という暗号方式が使われている。対称鍵暗号では、同一の暗号化鍵(もしくはパスワード)が暗号化と解読の両プロセスに対して使われる。
対称鍵暗号を使った場合、Text Mechanicで使われているような暗号化プログラムを介してデータ(テキストメッセージやデータファイル全体)が暗号化される。自分自身でパスワードを提供することもできるし、暗号化プログラムにパスワードや鍵を提供させることもできる。場合によっては、一つの鍵が複数のデータファイルに分割されることもある。
暗号化されたファイルが受信者に届いたら、受信者はパスワードを使って暗号化されたドキュメントのロックを解除したり、プレーンテキストや読み取り可能なファイルに戻すことができる。しかし、この方法にはセキュリティー上の欠陥がある。暗号化ファイルと一緒にパスワード自体も送信しなければならないという点だ。そうしなければ暗号化されたデータは永久に暗号のままなのである。プレーンテキストとして送信されたパスワードは危険を伴う。もしこれが傍受されれば、暗号化されたコミュニケーションはハッカーたちの格好の餌食となってしまうからだ。
パスワードを別のパスワードでさらに暗号化したものを送信することもできるが、そうすると今度はその別のパスワードがリスクになってしまう。
公然の秘密にする、という考え方
このセキュリティーホールを埋めるために、安全なオンライン取引は大抵「非対称暗号」(または「公開鍵暗号」)というものを使用している。非対称暗号は、データのロックと解除に2つの鍵を使用する。誰とでも共有できる公開鍵と、暗号化データの送信者にしか分からない秘密鍵だ。
非対称暗号の仕組みを説明するために、暗号学の分野では有名人であるアリスとボブに協力して頂こう。アリスとボブは、1978年に公開鍵が導入されて以来、安全なコミュニケーションの仕組みを説明する際に使われるキャラクターの名前である。(注:このお騒がせなカップルと共に、盗み聞きが大好きなイブや、検証役のヴィクトルなどが登場する)
アリスはボブに、電子メールで公開鍵を送ってくれるように頼む。暗号学の世界では電子メールでのやり取りは危険だと考えられている。傍受されて読み取られる可能性があるからだ。しかしボブは公開鍵を送るだけなので、電子メールを使っても特に差し支えはない。ボブは秘密鍵の方は誰にも教えず、厳重に隠してある。
ボブの公開鍵をもらったアリスはその鍵を使ってファイルを暗号化し、ボブに送る。ボブは自分の秘密鍵を使ってそのファイルを解読し、内容を読み取るのだ。
もしこのやり取りが逆だとしたら、ボブはファイルやメッセージを暗号化してアリスに送るために、アリスの公開鍵をもらう必要がある。
公開鍵の利点は明らかだ。アリスもボブも、自分の大事な秘密鍵を他人に教えることはない。不特定多数の人の目に晒されるのは、データを暗号化するための公開鍵だけである。たとえ公開鍵を分析しても、秘密鍵を見つけ出すことはできない。
盗み聞き大好きなイブがメッセージを傍受したとしても、それを解読することは不可能だ。何故ならイブは、アリスの秘密鍵もボブの秘密鍵も持っていないからである。
万が一ボブの秘密鍵がイブに知れてしまったら、イブはアリスのメッセージを読み、ボブにデータを送れるようになってしまう。これがよくない結果を引き起こすのは火を見るより明らかである。しかしイブは会話の片側しか見ることができない。ボブがアリスに送ったメッセージを読むためには、アリスの秘密鍵も必要だからである。
ネットにおける買い物の安全性
ネットで買い物をする時や金融系のウェブサイトでお金の取り引きをする際、暗号無しで済ませることはできない。少なくとも、暗号無しで済ませるべきではないだろう。
サイトが安全な暗号化コミュニケーションを使っているかどうかはブラウザ上で確認できる。典型的な確認方法は、URLバー内に表示される南京錠のアイコンと、「https://」で始まるウェブサイト・アドレスである。「s」はsecure(安全)を表しているので、これから金融取引を始めようと思っているウェブサイトにsの字が見当たらなかったら、悪いことは言わないから取引は中止した方がいい。そうしなければ、銀行やクレジットカードを含むお金に関する情報を傍受される恐れがある。
かつて暗号化がブラウザベースのやり取りで使われていた頃には、SSL(Secure Sockets Layer)プロトコルが使用されていた。最近では、より安全だと言われるTLSがそれに取って代わっている。
TLSはSSLと同様に、電子商取引において非対称暗号と対称鍵暗号の手法を組み合わせて使用する。アリスがウェブサイト(「Danube」という架空のサイトがあるとしよう)でボブに何かプレゼントを買おうと思った時、アリスはサイトを訪れ、買いたい物を見つけ、取引を始める。アリスのブラウザはDanubeのウェブサーバーに安全なページを要求する。そのページが安全かどうかは、ウェブアドレスの「htttps://」という表記によって確認が可能だ。
Danubeのサーバーはアリスのブラウザに公開鍵と証明書を送る。証明書は、認証局と呼ばれる信頼性の高いベンダーから発行される。証明書が必要な理由は、現在見ているサイトと金融取引をしたいと思っているサイトが同一であるか確かめるためである。証明書があれば、アリスは今訪問しているサイトがそれらしく見せかけた偽サイトではなく、本物のDanubeのオンラインストアだという確信が持てるというわけだ。
サイトの信頼性を確認したら、アリスのブラウザはDanubeの公開鍵を使って自分自身の鍵を暗号化する。これは古いタイプの対称鍵であり傍受される可能性が高いが、非対称の公開鍵に守られている。この鍵は、同じく対称鍵を使って暗号化された他のデータと共にDanubeのサーバーに送られる。
Danubeのサーバーはブラウザから情報を受け取った後、秘密鍵を使って暗号化された対称鍵を解読する。解読された対称鍵は、ブラウザから送られてきた他のデータを解読する際に使われる。
この時点で、アリスのブラウザもDanubeのサーバーも、アリスのブラウザが作った対称鍵のコピーを持っていることになる。これ以降はその鍵がアリスとDanubeの間でやり取りされるデータを解読するのに使われ、それが取引完了まで続く。
暗号化の仕組み
対称鍵暗号も非対称暗号もデータの暗号化・解読に鍵を使うが、鍵の生成方法は異なっている。鍵の生成はとても重要だ。コンピューターが数学的に鍵を推測できないようにするために、鍵は絶対にランダムである必要があるからだ。
対称鍵暗号は、ブロック暗号化と呼ばれる手法を使ってデータを小さなブロックに分解する。まずデータ内の文字を入れ替え、各ブロック内の情報を数字に変換し、データの縮小と拡大を行い、鍵を含む数式を使ってそれらの数字を置き換えるのだ。
非対称暗号化のアルゴリズムは、データの暗号化にハッシュ値を利用する方法を取っている。データは一つの大きな数字として扱われ、別の大きな数字によって倍加される。そのデータをさらに別の大きな数字で割って余りを求め、その余りがテキストに変換される。
暗号化されたデータを復元するのはほぼ不可能だ。数式の因数(倍化される前の数字、乗数、分母など)を1つも知ることなくアルゴリズムを解き明かす可能性は、事実上ゼロに等しいからである。これらは決して小さい数字ではない。最近のハッシュ値は128ビットもあるので、3.4×1兆×10億×10億×10億個もの組み合わせが可能なのだ。更に安全なハッシュ・アルゴリズムというものもあり、それらは192または256ものビット値を持つ。
強い暗号、弱い暗号
NSAが暗号を無力化する方法を発見したというニュースは、NSAがあらゆる暗号アルゴリズムをも見破るほど強力なコンピューターを作ったのかと思わせるだろう。
それは全くの勘違いである。
NSAは暗号アルゴリズムを攻略する代わりに、暗号化する意味自体を無くしてしまったのだ。例えばある諜報機関がネットサービスのプロバイダーとそのユーザーが使っている秘密鍵を手に入れたとしたら、彼らは容易くユーザーデータを取得することができるだろう。
また最近の暴露内容によると、NSAは民間のセキュリティソフトウェア販売会社と手を組んで、後々自分に都合が良くなるよう既存の暗号化アルゴリズムを弱体化した可能性すらあるという。NSAが作り出した脆弱性を悪い輩に発見されて利用されてしまう恐れもあるのだから、実に危険なやり方である。この危険性は、NSAを厳しい批判の矢面に立たせることとなった。
その上、世間にはまだNSA(あるいは十分な時間とコンピューターさえあれば個人でも)が容赦なく攻め立てれば解読が可能なほど脆弱な暗号アルゴリズムもまだまだ出回っているのだ。
オープンソースの暗号化ソフトウェアは、より安全性が高いと考えられている。何故なら、ハッシュ値を生成し暗号化するコードに怪しい部分やバックドアが無いか、徹底的に精査されるからである。
そろそろ結論を出そう
結局のところ、立法機関や諜報機関は欲しい物なら何でも手に入れられるのだ。暗号化する前の段階でコンピューターがハッキングされ、ハード・ドライブやクラウド・ストレージ内のデータやメッセージが傍受されるのであれば、暗号というものに存在価値は無い。実際、システムやデータに進入する簡単な方法などいくらでもある。単純すぎるパスワードの解析、ソーシャル・エンジニアリング、マルウェアのダウンロードなどは、ややこしい暗号と格闘するよりもはるかに楽だろう。
これが、セキュリティー専門家が警告する「エンドポイントにおけるセキュリティの欠陥」だ。エンドポイントとはセキュリティ用語であり、実際に使うデバイス(コンピューターやスマートフォン、データセンターのサーバー等)を意味する。
おっと、言い忘れるところだった。もしあなたが心行くまでデータを暗号化したとしても、パスワードが(はい、注目!)ReadWriteHackのように単純なものだったら、すぐにハッカーのターゲットにされて痛い目に遭うかもしれない。
最後にちょっとだけ明るい話をしよう。暗号そのものは、十分に強ければきちんと機能する。NSAを外堀で押し止めることも不可能ではないだろう。しかしそうなると、もっと難しい問題に悩まされることになるのだ。全てのマシンを安全にネットに繋ぐにはどうすればいいのか、という問題に。
Brian Proffitt
[原文]