背景 2要素認証を有効にした状態でログインするとき、ワンタイムパスワード(6桁の数字)の入力を求められることがあるかと思います。 これはどうやって実装しているんだろうと気になったので、仕様を読んで実装してみました。 今回実装したのは、 TOTP(Time-Based One-Time Password) と呼ばれるもので、 Google Authenticator などのアプリを入れると、簡単にワンタイムパスワードを生成できます。 コード 本記事のコードはこちらに記載しています。 Docker を起動して、一連の流れを試すこともできます。 仕様 TOTP TOTP は RFC6238 で、以下のように定義されています。 HOTP(HMAC-Based One-Time Password) に関しては後述します。 TOTP = HOTP(K, T) T = (Current Unix tim