devnote
収録トピック
Section titled “収録トピック”HTTP 認証方式
Section titled “HTTP 認証方式”
Basic 認証RFC 7617。401 チャレンジの往復、値がヘッダになるまでのデータフロー、Base64 をめぐる誤解、Digest / Bearer との比較、使ってよいケースと使ってはいけないケース、 nginx・Apache・Node.js での実装と運用上の落とし穴まで。
Digest 認証RFC 7616。response の作り方を実物のハッシュ値で追い、nonce と nc の役割、 パスワード保存の非対称性、SHA-256 をめぐるブラウザの実装状況、そして 「TLS があるなら Basic + TLS のほうが総合的に安全」という判断まで。
セッションによる状態管理
Section titled “セッションによる状態管理”
Cookie とセッションCookie は運搬手段でセッションが認証状態、という分離から始めて、属性ごとの 効き方、SameSite の 3 モード、__Host- プレフィックス、セッション ID の エントロピー、セッション固定攻撃と CSRF の多層防御まで。
トークンベースの認証・認可
Section titled “トークンベースの認証・認可”
Bearer トークンRFC 6750。持参人トークンという性質、送り方の推奨度、不透明トークンと JWT で 変わる検証の場所、RFC 8725 が挙げる alg 混同や kid 注入などの落とし穴、 そして RFC 9700 が求める sender-constrained への移行まで。
OAuth 2.0RFC 6749 の認可コードフローを、フロントチャネルとバックチャネルの分離から追い、 PKCE の code_verifier を実値で計算し、state と iss がそれぞれ防ぐ攻撃を分け、 RFC 9700 が SHOULD NOT / MUST NOT にしたグラントと OIDC との境界まで。
OpenID ConnectOAuth 2.0 の上に載る認証レイヤ。ID トークンを実値で分解し、Core が定める 13 ステップの検証、nonce と PKCE の役割分担、iss + sub を主キーにする理由、 discovery のパスが RFC 8414 と違う罠、3 つのログアウト仕様まで。
本人確認と多要素認証
Section titled “本人確認と多要素認証”
TOTP と HOTPRFC 4226 / 6238。dynamic truncation を実値で追い、共有秘密の長さ要件、 時刻ずれの許容とリプレイ禁止、6 桁 19.93 bit をレート制限で守る構造、 そして NIST が「フィッシング耐性はない」と明記している理由まで。
WebAuthn とパスキーW3C WebAuthn Level 3。実際に署名して検証できる値で authenticatorData を分解し、 origin を 1 文字変えると検証が落ちることを確かめ、BE/BS フラグ、signCount、 アテステーションの要否、synced passkey が AAL3 に使えない理由まで。
マジックリンクと SMS OTP帯域外チャネルに使い捨ての秘密を送る 2 方式。NIST が「メールを out-of-band 認証に使ってはならない」と定める理由、SMS の restricted 指定が課す 4 つの義務、 256 bit と 19.93 bit のエントロピーの落差、リンクの先読みまで。