今さら聞けない2段階認証の話いろいろ
2015年のmixiグループアドベントカレンダー 15日目を担当します。今さら聞けない2段階認証の話いろいろについて書いてみます(初歩的、おさらいといった感じで、あんまり突っ込んだ話はありません)。そのうち気が向いたら実装面での解説を追加するかもしれません。
2段階認証とは(ざっくりと)
ここ数年、2段階認証(2要素認証、Two Factor Authencication)に対応したサービスがどんどん増えてきています。2段階認証は、IDとパスワードだけでなく、ユーザー専用のコード(数値)を入力することでセキュリティを強化するというもの。 ユーザー専用のコードは、音声電話やSMSによって提供されたり、ソフトウェアトークンによって提供されるもの(スマホアプリなど)、ハードウェアトークンによって提供されるもの(例えばYubiKeyなど)があります。 ここで紹介するソフトウェアトークンというものは、スマートフォンアプリとして提供され、サービス側が提供するQRコードをカメラで読み取ることで登録でき、一定時間が経過するごとに新しいコードを生成されます。ユーザーは、サービスへログインするときにその時表示されているコードを入力し、サーバ側がそれを照合することで認証を行います。
2段階認証対応サービス
https://twofactorauth.org/ に2段階認証に対応した様々なサービスが掲載されています(主に海外サービス)。お使いのサービスで対応しているものがあれば設定したほうが良いかもしれません。
国内でも人気のサービス
- Amazon Web Services https://aws.amazon.com
- Box https://app.box.com
- DigitalOcean https://www.digitalocean.com
- Dropbox https://www.dropbox.com
- Evernote https://evernote.com
- Facebook https://facebook.com
- GitHub https://github.com
- Google https://www.google.co.jp
- Heroku https://www.heroku.com
- Microsoft https://www.microsoft.com/japan/club/Home.aspx
- Qiita http://qiita.com
- Slack https://slack.com
他にも多数のサービスが2段階認証に対応しています。
代表的なソフトウェアトークン
Google Authenticator
https://support.google.com/accounts/answer/1066447?hl=ja
Googleが提供。最も使われているソフトウェアトークンかもしれません。 iOS, Android 向けのアプリが提供されています。 アプリをインストールした端末が故障してしまったor紛失してしまい、コードの生成ができなくなってしまったといった事例をよく聞きます。バックアップの手段についてよく検討する必要がありそうです。
1Password
https://agilebits.com/onepassword
2段階認証に限らず、サイトごとのID、パスワードなどを管理するソフトウェア。 マルチデバイス(iOS, Android)、マルチプラットフォーム(Windows, Mac)に対応しています。Mac版はApp Storeでも提供されています(Mac App Store版でないとiCloud同期ができません)。有料ですが人気のあるソフトウェアです。 iCloudやDropboxで同期ができるのでマルチデバイスで同じデータを使えるのが便利。 最近、MacやWindows上でもコードが参照、コピーできるようになり便利になりました。
Authy
2段階認証専用のソフトウェア。こちらもマルチデバイス(iOS, Android)、マルチプラットフォーム(ChromeアプリとしてWindows, Mac, Linux)対応。 スマートフォン以外にChromeアプリでコードを参照、コピーできるので便利。 APIにも対応し、WordPressやSSHのログイン時にAuthyと連携させる機能もあります。
他のソフトウェア
私は使ったことがないのですが、以下のアプリもありました。
IIJ Smart Key
http://www.iij.ad.jp/smartkey/
HDE OTP Generator
iOSのみ対応?
Yahoo! JAPAN ワンタイムパスワード
http://id.yahoo.co.jp/security/otp.html
番外編: U2F (FIDO Universal 2nd Factor)
こちらはソフトウェアではなくハードウェアのトークンですが、U2Fと呼ばれるプロトコルに対応したサービスが徐々に増えてきています。 U2F対応のUSBトークンはAmazonなどで購入することができます(数千円程度)。 パスワードやコードを入力する必要がなく、USBを差し込み、触れるだけで認証が済むといった便利なものです。対応するブラウザは現時点ではChromeのみ(各種OS対応)のようです。
U2F対応のサービス
- GitHub https://github.com/blog/2071-github-supports-universal-2nd-factor-authentication
- Google https://support.google.com/accounts/answer/6103523?hl=ja
- Dropbox https://blogs.dropbox.com/dropbox/2015/08/u2f-security-keys
参考
SSHで2段階認証を使う
Google Authenticator OpenSource https://github.com/google/google-authenticator
Authy https://www.authy.com/integrations/ssh/
U2Fを使う方法 https://developers.yubico.com/pam-u2f/
いずれもPAMモジュールとして提供されます。
2段階認証のアルゴリズム
回数ベースのHOTPと呼ばれるもの(RFC4226) http://tools.ietf.org/html/rfc4226
時刻ベースのTOTPと呼ばれるもの(RFC6238) http://tools.ietf.org/html/rfc6238
の2種類があるようです(他にももしあればお知らせください)。 アルゴリズムの詳細についてここでは詳しく触れません。
参考記事
2要素認証のTOTPとHOTP、どちらがより安全か? http://blog.ohgaki.net/2fa-totp-hotp-which-is-safer
Googleアカウントのセキュリティを最大限に高めるUSBキー「FIDO U2F SECURITY KEY」 http://k-tai.impress.co.jp/docs/column/todays_goods/20141105_674268.html
RFC6238 Time-based One-time Password Algorithm (TOTP)の仕組みのメモ http://qiita.com/shrkw/items/426a7f1a59f42e0bd523
2段階認証はAuthyが便利 http://dev.classmethod.jp/cloud/aws/authy/
次のエントリ
明日は @punchdrunker さんによる「いまから30分以内にAndroidアプリでPUSH通知を実装しろと言われた時に読む記事」となります。よろしくお願いします。