サービスで2段階認証をサポートする際に考慮すべきことまとめ

Photo via VisualHunt.com

ヌーラボアカウントは、ヌーラボサービス内でのシングルサインオンの仕組みを提供しています。

現在、サービス全体のセキュリティを向上させるため、2段階認証をサポートする作業を進めています。
その準備として、他のメジャーなサービスでの対応状況や、検討しなければいけない事を簡単にまとめてみました。

2段階認証とは

Web サービスのセキュリティを強化するための仕組みです。アカウントにログインする際、ID とパスワード以外の認証情報をユーザーに要求します。

アカウントにログインするにはスマートフォンなどの自分しか持っていないデバイスが必要になるので、万が一パスワードが漏洩しても、第三者がアカウントを利用する事はできません。

認証の方法は?

追加の認証情報には様々な種類がありますが、よく使われているものは以下のような方法があります。

  1. モバイルの認証アプリでコードを発行する
    Google Authenticator など
  2. SMSでトークンを受信する
    SMS以外には、音声通話、 予備のメールアドレスなど
  3. バックアップコードを事前にダウンロードする
    複数のコードを事前に発行し、ダウンロードして保管する
  4. ハードウェアキーを利用する

モバイルアプリでの認証は、実装が簡単なので多くのサービスがサポートしています。
しかし、慣れていないユーザーにとってはハードルが高いので、SMSや予備のアドレスの利用も検討するのが良いでしょう。

ハードウェアキーには、Yubikey のようなものがあります。
ユーザーがデバイスを購入しないといけないので、サポートしているサービスはまだ少ないようです。

有名なサービスでの対応は?

参考に他のサービスがどのような対応をしているか比較してみました。

  メイン バックアップ
GitHub モバイル認証アプリ
SMS
ハードウェアキー
バックアップコード
SMS
Dropbox モバイル認証アプリ
SMS
バックアップコード
SMS
Heroku モバイル認証アプリ バックアップコード
SMS
Qiita モバイル認証アプリ バックアップコード

認証アプリとバックアップコードは、導入が簡単な事もあり全てのサービスで実装されています。 SMS の利用は送信ごとに料金がかかるので、サービスごとによって対応に差があります。

認証アプリをサポートするには?

認証アプリで発行されるトークンは TOTP:Time-based One Time Password RFC 6238 という仕様があります。

QRコード等で交換した秘密鍵と、現在時間を元にコードを生成します。オープンソースのライブラリが多くあるので、まずはそのライブラリが利用できるか検討してみましょう。

バックアップも必ず用意しよう

スマートフォン紛失や機種変更でサービスにログインできなくなるのを防ぐため、必ずバックアップの方法を用意し、ユーザーをガイドしましょう。 バックアップコードの発行や、予備のアドレスを利用します。

SMS 送信のコストを試算する

SMS の送信には ASP を利用できます。

ASP で有名なものは TwilioPlivo がありますが、どちらもサイト上で料金を公開しています。 どちらのサービスも、SMSの送信だけであれば大きな違いはありませんが、Plivo の方が料金が安めになっていました。 Twilio は、日本語音声の読み上げもサポートしています。

一通あたりの料金から、サービスのアクティブユーザー数と、SMSの利用回数を予想して試算します。

どのくらいのユーザーが2段階認証を利用するかの見積もりは難しいですが、NTT コムリサーチが2段階認証の利用率に関する調査を公開しているので参考になります。

Webブラウザ以外でのログインは必要?

サービスによっては Web ブラウザだけでなく、専用アプリからのログインも2段階認証をサポートする必要があるでしょう。自社で専用アプリを開発しているのであれば、Web と同じ認証をそのまま利用できます。

例として、Github のクライアントアプリは、Web と同じ認証コードが利用できます。

githubapp

しかし、2段階認証の利用が難しいような場合もあります。

例えば

  • Git のリポジトリへの HTTPS 接続をサポートする
  • メールクライアントからの SMTP プロトコルをサポートする
  • ファイル共有などで、WebDAV の接続をサポートする

このような接続に対して、Google では「アプリパスワード」という代替トークンを提供しています。

代替トークンの利用は、セキュリティの強度自体はパスワードと変わりません。しかし、アクセスできる権限が、「リポジトリへのアクセスのみ」、「メールの送受信のみ」と限定されています。そのため、このトークンが漏洩してもアカウントを乗っ取る事まではできません。また、パスワードとは切り離されているので、不測の事態にはトークンのみ個別にリセットすることもできます。

わかりやすいUIにする

最後になりますが、2段階認証は複数のデバイスを使用するために、ユーザーの操作は複雑になります。

スマートフォン上での操作もガイドする必要があります。

Heroku での設定画面では、対応アプリのダウンロードリンクなども用意されていました。

heroku

できるだけユーザーの負担にならないようにセキュリティを強化したいですね。


ヌーラボではセキュリティに興味が有る! というエンジニアを募集しています

より良いチームワークを生み出す

チームの創造力を高めるコラボレーションツール

製品をみる