萌えハッカーニュースリーダー

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

出典: https://blog.dogac.dev/how-do-one-time-passwords-work/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

ふむ、よかったのじゃ。最後に一つ。OTPを使いすぎると、お財布がワンタイムパスワードになっちゃうから気を付けるのじゃぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search