@kyanny's blog

My thoughts, my life. Views/opinions are my own.

二要素認証(TOTP)のトークンをどこに保存するか問題

TOTP のトークンを 1Password に保存するのはセキュリティ強度を弱めるので良くない、という話は知ってたので避けてたのだけど、ちょっとよくわからなくなってきた。

Windows(具体的には社有のSurface Pro)上の1passwordとiPhone上の1passwordの両方でMFAの二段階目をクリアできたということは、もうこの2段階目は特定のデバイスを持っていることに依存しないということだ。僕のIDで他のデバイスに1passwordをインストールすることができれば、さらにそのデバイスでも2段階目をクリアできる。「AWSのパスワード」と「特定のスマホ(デバイス)」ではなく、「AWSのパスワード」と「1passwordのマスターパスワード」でAWSにログインできてしまう。

MFA(多要素認証)で求められるのは「多段階」ということではない。知識、所有物、生体情報のうち2種類以上の要素を組合わせて使うことだ。「AWSのパスワード」と「1passwordのマスターパスワード」では、どちらも「知識」だから1種類の要素しか使っていない。これは多段階認証ではあっても多要素認証ではない。僕が複数のデバイスで使えるワンタイムパスワード生成アプリを選んでしまったから、そうなっちゃったのだ。求められているのがワンタイムパスワードだけなら1passwordを活用すべきだけど、MFAなら1passwordを組み合わせちゃいけなかった。

1Password に「パスワード」と「ワンタイムパスワード」の両方が保存されていると、1Password アカウントにアクセスできる端末が一個あれば二要素認証を突破されてしまうからだめ、と理解していたけど、↑を読むとどうやらこの理解は間違っているように思える。そもそも「パスワードとワンタイムパスワードを一箇所に保存すること」以前の問題である、と読める。

「特定のデバイスを持っていること」=「それ以外のデバイスで代用できないこと」が重要なのであれば、1Password だけでなく Authy もクラウド同期で他の端末にインストールできるのでだめ、ということになりそう。デバイスを追加する際の認証方法にどんなものがあるかちゃんと調べてないけど、Authy にはバックアップパスワードというものがあるので「特定の端末を持っていなくても Authy アカウント情報とバックアップパスワードという『知識』があれば任意の端末に Authy アカウントを復元してワンタイムパスワードを入手できる」ように思える。

要するに、特定の端末でしかワンタイムパスワードにアクセスできない TOTP アプリケーション、たとえば Google Authenticator を使うべき、という話になる。が、これは端末の紛失や初期化、機種変更などで利用できなくなり手間と不安さが馬鹿にならないのでクラウド同期できる便利なサービスを使っているわけで、この不便さを受け入れられないなら = 便利さのためにセキュリティ強度低下を受け入れられるなら、いっそ 1Password に保存してもセキュリティ強度は変わらない、ということになる?

これはなんか直感に反している気がして、パスワード@1Password(PC、スマホ)+ ワンタイムパスワード@Authy(スマホ)の組み合わせ vs パスワード&ワンタイムパスワード@1Password(PC、スマホ)の組み合わせなら後者の方がアクセスしやすいので危険、に思える。が、実は単に「そういう気がする」だけで、実際には同程度の強さ・弱さなんだろうか。この辺がどうもよくわからない。

いますぐ 1Password に全部移す、とはならないけど、たとえば AWS の IAM アカウントを用途別に複数作ってそれぞれに二要素認証を設定する、みたいな場合だと明らかに TOTP アプリを使うのは煩雑になる(見分けつきづらい、そもそも数個程度のアカウントを管理する想定の UI のものが多い気がする)。ハードウェアキーはそれはそれで失くしたらどうしようという不安が大きすぎる。

そもそも論として、2FA にはリカバリーコードがつきもので、リカバリーコードを 1Password に保存してたら(回数制限はあれど)不変のワンタイムパスワードをパスワードと一緒に保存しているわけなので、TOTP トークンどころの話ではない、ような気もしてきた。心配すべきポイントを間違えていて、すでにセキュリティ強度は低いのだから同じ強度を維持できる限りにおいて利便性を追求すればいいような気がする。