evernoteのテキストをevernote社の管理者にも見えないように暗号化する

このエントリでは、evernoteクライアントを使って、evernote社にも復号できない状態でテキストを暗号化する方法について紹介します。
昨日、EvernoteのXSS問題に関連して、「Evernoteの開発者も徳丸本読んでいたらよかったのにね」などとつぶやいていたら、「EvernoteのCEOが徳丸さんに会いたがっている」という連絡をもらいました。こういうのは異例のことでちょっと悩みましたが、行くっきゃないだろうということで、Evernote社の日本法人でmalaさんと一緒にCEOにお会いしました。
XSSやポリシーについては非常に誠実な対応をお約束いただいたのでよいミーティングだったと思います。僕が指摘した脆弱性についても、当日の夜のうちに直っていたようです。米国時間では深夜から早朝という時間帯で、迅速な対応だったと思いますが、本題はこれからです。
その場で、malaさんが「Evernote社は暗号化ポリシーについて公表するべきだ。通信路のSSLだけでなく、ストレージ内でも暗号化されているのか、できればEvernote社の管理者にも復号できない暗号化が望ましい」という意味のことをCEOに告げたところ、CEO曰く「Evernote社にも復号できない暗号化の機能は既にあるよ」ということで、その方法を教えてもらいました。以下に紹介します。

まず、保護したいテキストを選択状態にします。

つぎに、コンテキストメニュー(マウス右クリック)で、「選択したテキストを暗号化する」を選びます。

「警告:Evernoteでは暗号化の際に使用したパスフレーズのコピーを保存していません。このパスフレーズを忘れた場合、Evernoteでは暗号化されたコンテンツを復元できません。」という警告が表示されるのでよく読んで理解します。
パスフレーズを入力してOKボタンをクリックします。

選択部分が暗号化され、マスク状態の画像の表示に変わります。これで暗号化は完了です。

次に、暗号化された部分を表示したい場合は、マスクの画像を選択した状態でコンテキストメニューから「暗号化したテキストを表示する」を選択します。パスフレーズの入力ダイアログが表示されるのでパスフレーズを入力します。

以下のように、マスク表示されていたテキストが表示されます。

ここで紹介した機能により、使わない場合に比べて安全性が向上することは間違いないと思いますが、どの程度安全になるか(他サービスのパスワードの保管に使っても大丈夫か、など)は分かりません。本当にパスフレーズがサーバーに送られていないのかを私は確かめていないし、暗号のアルゴリズムについても公表されていないからです。
今後、これらの内容についても情報公開が進むといいですね。この暗号化機能をどの程度信頼するかは利用者の自己判断でお願いいたします。

追記(2011/4/20 13:45)

twitter@AoVAさんから指摘を頂戴しました。

@ockeghem この方法は、最初に書いた秘密の文字列を暗号化する前に同期されてしまう恐れがあります。対策としては、先にどうでもいい文字列を暗号化して、それを修正すれば平文で送られることはなさそうです。

http://twitter.com/aova/status/60555687691960320

たしかにそうですね。平文がサーバーに送られないようにするには、同期を避ける必要があります。しかし、「先にどうでもいい文字列を暗号化」という方法はバッドノウハウっぽくて私は好きではありません。私なら、evernoteクライアントの「自動的に同期する」を無効にしてから暗号化します。この設定は、ツール|オプションメニューから、同期タブを選択すると有効・無効を選べます。