二段階認証 HOTP と TOTP

最近のウェブサービスでは二段階認証というログイン方法が設けられていることが多くなってきた。
GoogleAwsGitHub など。

二段階認証とは

通常、なんらかのウェブサービスにログインする際にはユーザ名とパスワードを入力する。二段階認証の場合はこれに加えてワンタイムパスワードというパスワードの入力も行う。ワンタイムパスワードも認証されて初めてログインが成立するという流れ。

ワンタイムパスワードとは

ワンタイム、つまり一度しか使えない6桁のパスワードのこと。
ワンタイムパスワードはハードウェアトークンと呼ばれる端末に表示される。Aws の場合はこういうやつ。ボタンをぽちっと押すとパスワードが表示されるからそれをログイン画面に入力する。

他にもアプリを利用してワンタイムパスワードを生成することも出来る。ハードウェアは購入とか故障時の対応とか面倒が多いし主流はこっちだろう。
有名どころはこちら。

Google Authenticator

Google Authenticator

  • Google LLC
  • ユーティリティ
  • 無料
‎「Google Authenticator」をApp Storeで


Authy | Two-factor Authentication (2FA) App & Guides

二段階認証の仕組み

HOTP と TOTP というワンタイムパスワードの生成方法がある。HOTP は RFC4226 として正式に仕様が定められている。TOTP はまだ 草案 状態。

まず、基本としてどちらの生成方法でもウェブサービスとアプリ(あるいはハードウェアトークン)に秘密鍵と呼ばれる秘密の暗号をお互い同じものを所持していなければならない。これはウェブサービスで二段階認証を有効化した際に表示される QR コードがそれ。周りの人に横取りされないようにスキャンして読み取ればいい。

そして HOTP と TOTP
HOTP は今までのパスワード生成回数と秘密鍵を元に次のワンタイムパスワードを生成する。だが回数がウェブサービス側とずれることもあり不安な要素が多い。
そのために新しい TOTP という方式がある。これは現在の時刻をもとにワンタイムパスワードを生成する。そのためスマホやパソコンの時刻がずれているといつまでもログイン出来ない。まあそんな人はそうそういないと思うが。

まとめ

二段階認証は少々めんどくさいけどセキュリティ向上としてたいへん効果がある。やってない人はやったほうがいい。
手始めに Google アカウントからやってみるとよろしい。

Google 2 段階認証プロセス