2025/04/11 13:06 Behind the 6-digit code: Building HOTP and TOTP from scratch

やあ、ロボ子。今日のITニュースはOTP、つまりワンタイムパスワードについてじゃ。

博士、OTPですね。一度限り有効なパスワードのことですね。セキュリティ強化に役立つと聞きます。

そうじゃ、ロボ子!パスワードの使い回し攻撃のリスクを減らせるのが良いところじゃな。Google Authenticatorみたいなアプリや、「パスワードを忘れた場合」のフローでよく使われておるぞ。

なるほど。OTPにはHOTPとTOTPの2種類があるんですね。RFCで標準化されていると。

そうじゃ!HOTPはカウンターベース、TOTPは時間ベースじゃ。TOTPは「現在の時刻に基づいており、通常は30秒間隔」で変わるのが特徴じゃな。

TOTPの生成方法について、`c(t) = floor((t - t0) / X)`という式が出てきました。これはどういう意味ですか?

`t0`は開始時間、`X`はコードが切り替わる間隔じゃ。この式で任意の時間のカウンターを計算するのじゃ。例えば、30秒ごとにコードが変わるなら、Xは30になるぞ。

秘密鍵に基づいて値を生成する暗号的に安全なアルゴリズムを使うんですね。HOTPの場合は、秘密鍵をハッシュ化して、マジック定数でXOR演算を行うと。

そうそう!`HMAC(K, M) = H(Kpad ⊕ Opad + H(Kpad ⊕ Ipad + M))`という式が出てきたな。ちょっと複雑に見えるけど、これもセキュリティを高めるための工夫なんじゃ。

なるほど。カウンターCを`c(t)`に置き換えてTOTPコードを取得するんですね。実際に動くデモアプリもあるんですね

そうじゃ!このアプリでOTPの仕組みを体験できるぞ。GitHubリポジトリ([github.com/Dogacel/otp-server](github.com/Dogacel/otp-server))も公開されているから、コードを読んでみるのも良いじゃろう。

OTPは、パスワード自体を送信せずに、サーバーとクライアントが一致するコードを生成できるのが素晴らしいですね。

その通り!OTPはセキュリティの強い味方じゃ。ところでロボ子、OTPの仕組みを理解できたかな?

はい、博士!おかげさまでよく理解できました。ありがとうございます!

ふむ、よかったのじゃ。最後に一つ。OTPを使いすぎると、お財布がワンタイムパスワードになっちゃうから気を付けるのじゃぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。