2013年09月07日

オンラインストレージの提供する暗号化はユーザーにとってセキュアではない

データを暗号化して保存している、と謳うオンラインストレージサービスは多い。 ウェブサイトでは直接ファイルを閲覧できず、ユーザーのPCやスマートフォンの内部で暗号化してからサーバーに送るので安全性が高い、と主張している場合もある。

しかし、オンラインストレージの多くはウェブサイトのログインにパスワードを要求したり、ログインするだけでファイルにアクセスできたり、パスワードを忘れた時のためのリセット機能があったりする。こういったサービスでは、サービスを提供する側が、ユーザーの保存したファイルを秘密裏に閲覧することができ、ユーザーにプライバシーはない。強制力を持つ政府機関が命令すれば、サービス提供者はデータを復号して提供せざるをえないだろう。

だれかに見られても困らないデータを置くには便利なサービスだが、多数の個人情報や企業秘密のように、第三者への漏洩その自体が重大なデータを保存する場所としては不適切だ。


多くのオンラインストレージサービスが提供するストレージの”暗号化”では、ユーザーだけでなく、サービス側も暗号鍵を持っている

オンラインストレージサービスのクライアントソフトに入力するのは、基本的にユーザーID(あるいはメールアドレス等)とパスワードだけなので、ファイルの暗号化に利用できる暗号鍵(正確にはファイル暗号化用の暗号鍵をさらに暗号化するための鍵)はこれらを組み合わせたものしか使えない。それ以外の情報は全てサーバー側に置かれている。
なお、DropboxやSkydribeなどではワンタイムパスワードを利用できるが、これは第三者の攻撃を制限するためのものであって、データの暗号化には全く貢献しない。

ユーザーIDやメールアドレスはユーザーへの通知のために平文のまま保存しておく必要があるだろうし、秘密にすることがあまり強く求められているわけではない。従って、暗号鍵となりうる秘密は基本的にパスワードしかない

多くのサービスでは、クライアントソフトはパスワードを直接サーバーに送って、暗号化されたデータと暗号鍵を一緒にダウンロードしている。パスワード付きZIPファイルをパスワードと一緒にメールするようなものだ。

ならば、パスワードをサーバーに全く漏らさないクライアントアプリを使い、かつパスワードに暗号鍵として十分に長くランダムな文字列を入力すれば安全だろうか?

もし、サービス提供者が、「パスワードを忘れたなら、二度とファイル内容を復元することはできません」と明示しているなら、それは例外的に安全かもしれない。暗号鍵を失ったら二度と復元できないのは、脆弱でない暗号の性質としては当たり前だからだ。

実際に、パスワードをサーバー側に全く送信せず、クライアント側で暗号化を完結させている(とされている)ものとしては
SpiderOak https://spideroak.com/engineering_matters
がある。ただしこれも、モバイル向けクライアントアプリは暗号化機能を載せておらず、サーバーにパスワードを渡して復号してもらっているようだ。


パスワードを忘れても、リセットする方法があるならば、パスワードはただの合言葉で、ファイルの暗号鍵ではないことが分かる。ただし、反論としては次のような”安全な”パスワードリセット手法が考えられる。
「パスワード(あるいはファイル保存用の暗号鍵)を、パスワードリセットのために必要なメールアドレスや予備の質問などから生成した鍵で暗号化し、別に保存しておく」
こうすることで、パスワード(か必要な暗号鍵)を復元できる。
公開鍵暗号を使っている人なら、同じ秘密鍵を複数のPINコードで別の場所に保存しておけば、ひとつ忘れても他のPINコードを覚えていればそれが使える、といえば分かるだろう。

だが現実のサービスで、パスワードリセットのための秘密の質問とその答えは、どこで入力しただろうか? オンラインストレージサービスのウェブサイトで入力したのでは、それがログに残るのでやはりサービス側が暗号鍵を得てしまう。(SpiderOakではPWのヒントを表示できるるだけで、秘密の質問とその答えのような仕組み自体が存在しない)


結論として、
・ダウンロードしたクライアントが認証のためにパスワードをサーバーに送るサービス
・パスワードをウェブサイトに入力することがあるサービス
・サービスのウェブサイトでパスワード変更やリセットが可能なサービス
は、サービス提供側と司法当局などによってファイルの内容が盗み見られることがありえる。

著名なところと思われる、Dropbox、SugarSync、Google Drive、SkyDrive、Bitcasa、Copy.comは上記のいずれかに該当する。

ユーザーのデータをサービス側が見ることの出来ないシステムを作るのは面倒だしコストがかかる。
なぜなら安全に暗号化されたデータは原理的に圧縮・重複除去することができない(=乱数列と見分けが付かない)ため、安全でない手法のようにストレージやネットワーク帯域を節約することが出来ない。
また、ファイル内容をサービス事業者側が全く管理できないので、違法なファイルをアップロードしたユーザーがいることが発覚して、FBIにサーバーを全て差し押さえられるような法的リスクも上がる。

使い切れないほどのスペースと根拠なく「暗号化されているので安全」という謳い文句のオンラインストレージサービスを聞いたなら、本当に秘密にすべきデータをアップロードする前に、その仕組を疑ってかかるべきだ。
いまのところ、オンラインストレージ側の暗号化に頼らずに、TrueCryptのようなクライアント側だけで暗号化が完結することを検証可能な暗号化ソフトで正しく暗号化した上でオンラインストレージにおくのが、秘密にしたい大きなデータ同期への現実解になるだろう。 実際、Dropboxのクライアントソフトは、大きな暗号化ファイルの変更部分だけをアップロードしてくれる。(複数人で編集したりすると大変だけれど)


なお、サービス側が暗号鍵を持っていても、ストレージの暗号化は別の面でユーザーのセキュリティに寄与する。
大きなサービスになればなるほど、管理するハードウェアの数も、データに直接触れることが出来る人間も増える。数が増えれば、そのどれか一つを紛失したり悪人が紛れたりする確率は増えていく。暗号化プロセスや、暗号鍵の管理を限られたサーバーとオペレータだけで行うことで、セキュリティ上のリスクは大幅に低減できる。
ただし、これはサービスを第三者から守るセキュリティであって、秘密のデータをサービス自身や政府機関などの覗き見から守るセキュリティではないことに注意する。
posted by ko-zu at 16:48| Comment(0) | TrackBack(0) | セキュリティ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック