代官山動物園
おごちゃん
例によって単なる思いつきの吐き出しです。
新しくパソコンを用意したので、そこで今まで使っていたサイトにアクセスしようとすると、ブラウザのパスワード共有機能が動作します。 これはなかなか便利なのですが、結局のところ「どこかにパスワードが保存されている」わけです。 当然、保存やそことの通信に関しては暗号化されているとは言え、「どこかに保存されている」というのは間違いありません。
同じような機能はスマホにもありますし、わざわざ別途に「パスワードマネージャ」を入れて使うこともあります。
この分野は素人なので、これがどう安全でどう危険であるか、厳密な説明はできないのですが、少なくとも
暗号化されているであろうことには違いはないが、
復元可能な状態でパスワードがどこかに保存されている
というのは事実です。
この辺について考えてみました。
背景
パスワードを要求するサービスは多数あります。
あまりに多数ですから、
- 一々パスワードを作るのが面倒臭い
- パスワードを忘れる
- それらが面倒になってパスワードを使い回す
ということが日常的に起きます。
それゆえ、どこかのサイトがパスワードを漏洩されて、しかもそこがハッシュ等を使わずに生パスワードを保存していたりすると、実質的に他のサイトのパスワードまで知られるということが起きてしまいます。
これを避けるために、「パスワードを使い回しても漏洩に強い方法」が提案されていたりします。
たとえば、
- パスワードを小まめに変更する(漏洩したパスワードが使われる頃にはパスワードが変わっている)
- パスワードを使い回す時に小細工をする(連番をつけるとか)
- 使い回すパスワードを複数持つ
などの手法があります。
しかし現代では、「パスワードマネージャ」を使うことが増えて来ました。
パスワードマネージャは
- 認証の入口毎に強めのパスワードを自動生成
- 入口とパスワードを管理
- パスワードの入力を求められたら自動入力
という機能があり、パスワードにありがちの問題を(ほぼ)全て解決してくれます。
さらに最近だと、
- 異なるデバイスや場所でもクラウド経由で使えるようにしてくれる
ということもできています。
「そんなソフト入れた覚えがないよ」という人も多数でしょうが、意識して入れてなくてもスマホやパソコンのブラウザは自動で装備していることが多いですし、Windowsも標準機能(?)のような形で使えます。 iPhoneなんかもそうですね。 多分AndroidやMacもそうだと思うんですが、持ってないのでわかりません。
それはそれで嬉しいことなのですが、これには以下の問題があります。
- 多分暗号化されているとは言え、どこかに復元可能なパスワードが保存されているのは気持ち悪い
- パスワードマネージャが常に使えるとは限らない
- 「胴元」が存在しているのは気持ち悪い
これらについて、もうちょっと詳しく説明します。
多分暗号化されているとは言え、どこかに復元可能なパスワードが保存されているのは気持ち悪い
これには複数の問題があります。
まず、「どこかに保存されている」ということは、その「どこか」を攻撃すると、「復元可能なパスワード」を取得することが可能だということです。
無論、正気な実装であれば暗号化はされているはずですし、正気な実装であればそれはend to endの暗号化であり、正気の実装であればそれは利用者のみが復元可能のはずです。
とは言え、この世界には「間違い」というものは常に存在していますから、理屈通りに行くとは限りません。 正攻法であれば復元不可能な暗号であっても、何らかの「穴」が存在する可能性を完全に否定することは困難です。
また、「どこかに保存されている」ということは、「どこか」に対して通信が可能でなければ使えません。
基本的にパスワードを入力しなければならない状況というのは、何らかの形でネット(インターネット)につながっているであろうことは妥当な判断とは言え、「どこか」が常にオンラインであると考えるのは必ずしも妥当とは言えません。
- メンテ等でオフラインになっているかも知れない
- DoSアタック等を受けてサービス不能になっているかも知れない
- 経路上の問題で接続不可能かも知れない
等々の問題が起こり得ます。
無論、「ローカルにキャッシュを持って」というような実装上の対策は可能ではありますが(と言うかローカル専用だと最初から運用にネットはいらない)、悪い時に悪いことは重なるものです。ね?
パスワードマネージャが常に使えるとは限らない
「ネットが」という話は既にした通りですが、「常に使えるとは限らない」事象は他にもあります。
たとえば、普段自分の使わない機器でログインしようとした時。すぐにはパスワードマネージャが機能してくれません。
おそらくは、パスワードマネージャを機能するようにし(何ならインストールが必要かも知れない)、「ここにいるのは俺だ」という手続きをする必要があります。
パスワードマネージャを機能させるとしても、「そもそもその環境で普段使っているパスワードマネージャが動いているか」という問題があります。
また動かすにしても、それが「借り物」の環境だったらどうなるか? とか考えると厄介ですね。
「ここにいるのは俺だ」という手続きも実は結構厄介です。
これらについては一々私がここで書くまでもないしょう。 「新しい環境」からログインすると、いろいろ面倒な事象が発生するのはパスワードマネージャだけじゃないありません。 普通のサイトのログインであっても、近頃は追加の認証が必要になったります。
さらに「技術者」であれば、ログインの対象がいつもウェブの画面とは限らないこともわかっているでしょう。
普段ウェブ画面から操作するものであっても、ssh
でログインする必要があったりします。
実はこれは「技術者」に限らず起こり得ます。
ありがちなのは、「スマホアプリ」ですね。 ブラウザから会員になって、パスワードマネージャの言いなりで複雑なパスワードを設定して、途中からアプリを使いたくなった。 私は雑な解決をしてしまうのですが、それが「正当」な手段なのかどうなのか。いまだによくわかっていません。
まぁこのように事情は様々ですが、いつも必要な時にパスワードマネージャが使えるわけではありません。
「胴元」が存在しているのは気持ち悪い
パスワードマネージャには「胴元」がいます。
これは本質ではなくて、「胴元」なしでも技術的には可能ですし、自前でそういった設備(サーバ等)を持つことは可能です。 ローカル運用前提であれば、そういったもの自体が不要です。 とは言え、現実には「胴元」と言うか「運営者」が存在しています。
それは果して信頼できるものでしょうか?
今のところ、比較的安心して使える事業者が運営していますが、以下のことは常に注意する必要があります。
- 「心変わり」するかも知れない
- どこかに買収等されるかも知れない
- こちらがbanされるかも知れない
「心変わり」は具体的にはポリシー等の変更です。
まぁ多少のポリシー変更であれば、甘受しておけばいいとは思いますが、ひょっとしたら甘受できないようなポリシーになるかも知れません。
事業者はビジネスでやっているわけですから、商売になるかどうかは常に考えているはずです。 仮にタダで使えるサービスであれば、どこかでマネタイズさせる必要があります。 有料のものであれば、いつまでも今の料金であるか、海外の事業者であれば為替はどうか、そういったことを考えなければなりません。 その過程で甘受できないようなポリシー変更が「ない」という保証はありません。
このような事業であれば、どこかに買収されるかも知れません。 そうした時にポリシー変更はどうか、運用のアーキテクチャは同じままか… 様々なことが起きるのは、他のサービスと同じです。
何ならライバル社が「サービスを殺す」ことを目的で買収するというようなことも、コの業界にはよくあることですね。 「サ終」したらどうなるか。それも考えておかなければなりません。
また、現在は比較的安定している企業が運用していますが、そういった会社が突然こちらが知らないうちにbanして来ることはあります。
巨大IT企業のサービスで突然banされてあわてる… という事象はしばしばありますね。 パスワードマネージャもその例外になるとは考えにくいです。 Googleからbanされたら、Chromeで使っているパスワード管理はどうなるんでしょうかね? 規約とか見たことないんでよくわかりませんけど。
こちらがbanされなくても、サイトがbanされるかも知れません。
近頃しばしばあるのは、クレジットカードの決済が止められてしまうサイトがあることです。
主にはアダルト系のサイトやオタク系のサイトで、要するに「アメリカで当該サービスは不健全だと言う声の高いもの」です。 アダルト系は割とわかりやすいので「用心する」ことも難しくないのですが、趣味関係のものとなると文化も絡んで来るので用心するのもよくわかりません。 そして、そういったことは「契約自由の原則」を盾に、恣意的にある日突然やって来ます。
私は「カード決済」の次はここが狙われるんじゃないかと心配しています。 「胴元」がいる限り、それは技術的には可能であり、契約自由の原則により合法となります。
要求されるもの
心配事をたくさん並べましたが、実際にどうすれば良いのでしょうか? もちろん「パスワードマネージャを使わない」という選択はなしですw
私が挙げた問題の範囲であれば、
- パスワードの「保存」がない
- パスワードマネージャそのものの可搬性が高い
- 胴元(運用主体)が存在しない
ということではないでしょうか?
もっと単純化すれば、パスワードマネージャの最大の問題は「パスワードを保存する」ということにあるのではないかと言えます。 パスワードを保存するがゆえに、「高度な暗号化」が必要となりますし、それゆえに「胴元」が必要となります。 それゆえに、通信路の問題やソフトウェアの問題が起きる… と言えます。
提案する方法
ここで提案する方法の基本的な考え方はとても単純です。
パスワードマネージャが必要になるのは、パスワードによる認証を強化する必要があるからです。 そのために、
- サイト毎に
- 「強いパスワード」を生成し
- いつでも使えるようにする
ようにしているわけです。 そして、それは
- 外部に漏れてはいけない
これが実現できれば良いわけです。
そこで、
- サイトの情報を元に
- 「適当なキー」を使って
- 「強いパスワード」を一意に生成する
ということです。
たとえば、サイトのURLか何かと、「適当なキー」とでハッシュ演算のようなことをして、ランダムに見えるパスワードを生成します。 こういった文字列は、少なくとも人間が頑張って作った「強そうなパスワード」よりは強くなる可能性は大です。
これであれば、どこかに記録しなくても、「強いパスワード」を一意に毎回生成することができますから、パスワードを保存する必要がなくなります。 既知の「わかっている」ものを入れて計算するだけです。
「適当なキー」は何でも構いません。と言うか、これが何であるかはここのアイディアの本質ではありません。
たとえば、漏れないという前提であれば、「自分で作るお約束の弱いパスワードみたいなもの」でも良いかも知れません。
それでもエントロピーが低いということであれば、「どこかにある適当な何かと組み合わせる」ということをしてみても良いかも知れません。 「どこかにある適当な何か」は何でも良いでしょう。 いつでも見えて半永久的に不変であればいいです。 「好きなアイドルの公称バストサイズ」とかでもいいですね。不変ですからw あるいは定期変更を強いるようなサイトであれば、日付的なものを混ぜてもいいでしょう。
専用のソフトウェアを作るのも必要ですが、演算そのものは単純にしておいてshell script程度でも簡単に生成できるものであれば、どこででも生成できますね。
まとめ
単純なアイディアに過ぎませんから、既に誰かが発明して特許化しているかも知れません。
あるいは、ナイーブな実装だと脆弱性盛り盛りかも知れません。 「適当なキー」の部分をよく考えて実装しないと、脆弱性の元になるでしょうし、頑張り過ぎると使いにくいものになるかも知れません。
そういったことはあるかも知れませんが、とりあえずこうやってネットに放流しておけば、「少なくとも今からは公知」ということになりますで、ここに記録しておきます。
例によって「公知」となっていますから、私及び弊社は何の権利も主張しませんので、もし本当に有用であれば自由に使って下さい。 この手法をより「強く」する方法があれば、それも同じように公知にして下さると嬉しいですし、特許化されたら「基本アイディアは公知だ」と言いに行くかも知れませんw