「パスワードを保存する」ということ

Chrome のパスワード管理で、平文のパスワードが見えると大騒ぎになっているようです。

Chromeでは自動保存のパスワードが丸見え。サーッと血の気が引いたわ | ギズモード・ジャパン

これ、2つの論点が混ざっていて、

  • 平文のパスワードが表示できる。
  • 平文のパスワードが表示できることに、なんら警告がない。

という話になります。

で、前者は原理的には驚くことはなにもありません。パスワードをユーザの代わりに送信しようとするソフトウェアは、平文のパスワードを知らないと「ユーザの代わり」はできません。私はKeePass というオープンソースのソフトを使っていますが、これでも表示することはできます*1

ただ、その平文のパスワードをどうやって保存するか、という事に関しては千差万別です。

最も、ユーザの手を煩わさない方法は、ソフトウェアが他の秘密情報無しに復元できる形で保存する方法で、一番単純なのは、そのままの形でファイルに保存する方法で、ちょっと気を利かせるなら暗号化もどきをした上で保存します。ここで大切なのは、しょせんもどきなことです。

暗号化もどきは、プログラムにハードコーディングされているアルゴリズム、情報さえ分かってしまえば、誰でも複合化できます。これが問題になった典型的なケースは Gumblar というマルウェアで、FFFTP で保存したパスワードが抜き取られた事件です。

Gumblar - Wikipedia

当時の FFFTP では「簡易的な暗号化」と呼ばれる処理で、一見、元のパスワードが分からないように処理してから保存していたのですが、FFFTP が行っている処理をそっくりまねれば、元のパスワードは誰でも復元できます。Gumblar は FFFTP が保存している「簡易的な暗号化」したパスワードを見つけると、それを復号化する仕組みをもっていたため、ここから FTP 用のアカウント情報を収集し、Web サイトの書き換えを行いました。

FFFTP はその後、マスターパスワードを使うように修正されました。

ウイルス感染したPCにおける保存パスワードの窃取問題へ対策した「FFFTP」v1.97 - 窓の杜

スターパスワードを使って、AES で暗号化する、といった対策が取られましたが、これだと、マルウェア等が自動的にパスワードを復元する事は不可能になります。これは、AES で暗号化したからではなく、マスターパスワードを鍵として*2暗号化しているからです。

今時の暗号化の大前提は、暗号化処理のアルゴリズム自体は既知であり、その暗号化処理の鍵を秘密にする、というものです*3FFFTP が行った対策は、AES という既知のアルゴリズムで暗号化しているのですが、鍵をマスターパスワードという形でユーザに入力させることで、自動的には復号化できないようにしました。

逆に、マスターパスワードに該当する入力を必要としない場合には、マルウェア等が自動的にパスワードを復元できる可能性があります。

例えば、暗号化処理に AES を使っていたとしても、その鍵が、レジストリのどこかに保存されている、ということであれば、ユーザはマスターパスワードのような物を入力する必要はありませんが、同時に、その鍵のありかさえ分かれば、自動的にパスワードを復元できることになります。

元記事に戻ると、そもそも Safari から Chrome にパスワードを引き継げた、という事は、Safari で保存していたパスワードも自動的に復元できる、ということですから、その点では SafariChrome も同じです*4

Google 側の言い分としては、Chrome を実行しているアカウントが第三者に盗られた時点でアウトなんだから、しょうがないだろう、というものです。

これはこれで「アリ」だとは思います。Windows Vista 以降であれば、管理者権限を持ったアカウントであっても、UAC が有効であれば、プログラムがアクセス、コントロールできる範囲は狭くなっているので、マルウェアが好き勝手できない状態にはなります。ただ、アカウント情報を盗もうとするのであれば、特に管理者権限も必要なく、通常のユーザの権限で動くマルウェアで十分です。

という事を考えると、最初の方に書いた論点の後者「平文のパスワードが表示できることに、なんら警告がない」という点に関しては不満が残ります。また、マスターパスワードの設定のような、保存されたパスワードを保護するための機能が無い、という点では、Firefox よりも劣っていることにはなります。

どうも元記事を読んでると、「パスワードが見えた!」という事に反応してしまって、本来、取り上げるべき

  • ユーザに対する警告が無い。
  • スターパスワードのような保護機構が用意されていない。

という点に焦点があまり当たっていない感じがします。それは、

UPDATE:FireFoxも見れますね…ご指摘ありがとうございます。「Are you sure you wish to show your passwords?(本当に表示していいですか?)」の警告は出ますけど、そこでYESを押すと一括表示です。

というところに現れています。Firefox は警告もしているし、マスターパスワードも設定できます。

個人的には、マスターパスワードに該当するものがないパスワードの保存、というのは、基本的にあまり信用してません。マルウェアに感染したら抜かれる情報だ、という認識でいます。抜かれてもクリティカルではなく、利便性が向上するならかまわないと思いますが、「パスワードの保存」というのはそれに該当することはないでしょう。

*1:KeePass の場合は、ブラウザに限らない汎用にパスワード管理ソフトで、パスワードを確認して手入力することも想定しているので、表示できないと困ります。

*2:通常、パスワードの文字列は鍵そのものではなく、その文字列から一方向関数などで鍵を生成させて使います。

*3:もちろん、そのアルゴリズムに弱点がないことを、世界中の数学者がよってたかって研究して、大丈夫であることが確認されている、という事も重要です。

*4:Safari のパスワード保存でマスターパスワードが設定できるのであれば、Chrome よりもマシですが、設定していなければ同じです。