2段階認証(Two Factor Authentication) とはWikipediaによると、「異なる2つのコンポーネントを組み合わせにより、ユーザーの明確な識別を提供する認証」とあります。(以下、2段階認証を2FAと書きます) 会社のVPNにアクセスするためにパスワードと認証用のUSBスティックを使う、というのも2FAになります。 Webサービスの場合はユーザが設定したパスワードに加えて、ワンタイムパスワードを用いる方式が主流となっています。 このワンタイムパスワードの生成にはRFCで仕様が決められているHOTP(HMAC-based One-time Password Algorithm)やTOTP(Time-based One-time Password Algorithm)が用いられます。 よく利用されているのは時間ベースのTOTPなので以下はTOTPにフォーカスしていきたいと