[PR] あなたが Kindle で読みたいその本、Kindle に対応したら Twitter でお知らせします。

2 要素認証に 1Password を使うのはよく考えてから

Posted on

1Password

いつも愛読している Developers.IO に 2 要素認証についての記事がアップされていました。

パスワード管理アプリの 1Password で 2 要素認証も一緒に管理する方法が紹介されています。ですが、便利だからといって何も考えずに 1Password に 2 要素認証を任せてしまうのは危険です。

日本では 2 段階認証 (Two-step authentication) と呼ばれることも多いですが、仕組みを理解すれば 2 要素認証 (Two-factor authentication) との違いもハッキリします。

なお、この記事は 1Password を批判するものではなく、2 要素認証を安全に使うことを伝える意図で書いています。 1Password は自分も好きなアプリケーションです :-)

2 要素とは何か?

いま広く普及しているのは TOTP という 2 要素認証です。 2 要素認証にはいくつか仕様がありますが、一定間隔で数字が切り替わるものは TOTP です。 TOTP については以前書いた「2 段階認証は本当に安全なのか調べてみた」をご覧ください。

この 2 要素とは、1 つ目が本人しか知らないパスワード、2 つ目が SMS やアプリから取得するワンタイムパスワード(6 桁の数字)です。パスワードが漏えいしたとしてもワンタイムパスワードが必要なので、万一のときの保険になるわけです。

近年だとフリー Wi-Fi を装って通信をキャプチャしパスワードを盗む手口もあるので、パスワードの漏えいは身近なものと考えるべきでしょう。

ここで重要なのはワンタイムパスワードがどのように生成されているかです。

認証のたびにアプリとサーバが通信しているわけではなく、初回設定時 QR コードを読み取る際に共通の秘密鍵をやり取りしています。この秘密鍵と UNIX タイムをシードに計算しワンタイムパスワードを生成しています(一度設定すれば時刻が合っている限り通信がオフでも動きます)。

QR コードをデコードすれば、このような URI スキーマになっているのがわかります。秘密鍵は secret= 以降の部分です。

otpauth://totp/user?secret=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

TOTP に対応したアプリはこの秘密鍵を内部に保存しているのです。

2 つの要素は同時に保存しない

2 要素認証は 2 つの要素が同時に漏えいする確率は極めて低い という前提に成り立っています。

たとえば iPhone アプリの Authy でワンタイムパスワードを生成している場合、パスワードと iPhone が同時に悪意のある人に渡ることは想定されていないのです。 2 要素認証にスマートフォンや SMS が使われているのは本人だけが持っているという前提があるからです。

1Password にどちらも預けるというのはこの前提が崩れる可能性が高いです。なぜなら、コンピュータを盗まれたり(もしくは第三者に操作されたり)、1Password に脆弱性があって攻撃を受けると 2 つの要素が同時に漏えいしてしまうからです。

1Password の公式ブログ「TOTP for 1Password users」にも注意が書かれています。

If you would like to turn a site’s offering of TOTP into true two-factor security, you should not store your TOTP secret in 1Password (or in anything that will synchronize across systems). Furthermore, you should not use the regular password for the site on the same device that holds your TOTP secret.

これは 1Password の 1 要素を使って 2 回の認証を通るので、2 要素認証ではなく 1 要素の 2 段階認証(あえて段階と書いています)と言えるでしょう。 iPhone の Safari で Web ページにログインするときに、その端末でワンタイムパスワードを生成しているような場合も当てはまります。

おすすめは 3 要素目を追加すること

最後に自分はどうしているかご紹介します。

1 要素目は当然パスワードです。 2 要素目は iPhone の Authy を使っています。 TOTP に対応したアプリはいろいろあるので、好みで選べばいいと思います。ただし、先ほど説明したように 2 つの要素を同時に保存するアプリは個人的にはおすすめできません。

さらに 3 要素目として、iPhone の Touch ID を利用してバイオメトリクス認証を追加しています。こうすることで iPhone が悪意のある人に渡っても 2 要素目を取得できません。

まとめ

セキュリティはリスクと利便性のトレードオフで安全側に倒すのがセオリーです。迷ったときは悪意のある立場になって考えれば自ずと答えは見つかるでしょう。

技術全般に言えることですが、特にセキュリティ分野は仕組みを正しく理解した上で利用したいですね。