コンテンツにスキップ

devnote

Basic 認証 — RFC 7617Basic 認証

RFC 7617。401 チャレンジの往復、値がヘッダになるまでのデータフロー、Base64 をめぐる誤解、Digest / Bearer との比較、使ってよいケースと使ってはいけないケース、 nginx・Apache・Node.js での実装と運用上の落とし穴まで。

Digest 認証 — RFC 7616Digest 認証

RFC 7616。response の作り方を実物のハッシュ値で追い、nonce と nc の役割、 パスワード保存の非対称性、SHA-256 をめぐるブラウザの実装状況、そして 「TLS があるなら Basic + TLS のほうが総合的に安全」という判断まで。

Cookie とセッション — RFC 6265Cookie とセッション

Cookie は運搬手段でセッションが認証状態、という分離から始めて、属性ごとの 効き方、SameSite の 3 モード、__Host- プレフィックス、セッション ID の エントロピー、セッション固定攻撃と CSRF の多層防御まで。

Bearer トークン — RFC 6750Bearer トークン

RFC 6750。持参人トークンという性質、送り方の推奨度、不透明トークンと JWT で 変わる検証の場所、RFC 8725 が挙げる alg 混同や kid 注入などの落とし穴、 そして RFC 9700 が求める sender-constrained への移行まで。

OAuth 2.0 — RFC 6749OAuth 2.0

RFC 6749 の認可コードフローを、フロントチャネルとバックチャネルの分離から追い、 PKCE の code_verifier を実値で計算し、state と iss がそれぞれ防ぐ攻撃を分け、 RFC 9700 が SHOULD NOT / MUST NOT にしたグラントと OIDC との境界まで。

OpenID Connect — OIDC Core 1.0OpenID Connect

OAuth 2.0 の上に載る認証レイヤ。ID トークンを実値で分解し、Core が定める 13 ステップの検証、nonce と PKCE の役割分担、iss + sub を主キーにする理由、 discovery のパスが RFC 8414 と違う罠、3 つのログアウト仕様まで。

TOTP と HOTP — RFC 6238 / RFC 4226TOTP と HOTP

RFC 4226 / 6238。dynamic truncation を実値で追い、共有秘密の長さ要件、 時刻ずれの許容とリプレイ禁止、6 桁 19.93 bit をレート制限で守る構造、 そして NIST が「フィッシング耐性はない」と明記している理由まで。

WebAuthn とパスキー — W3C WebAuthn Level 3WebAuthn とパスキー

W3C WebAuthn Level 3。実際に署名して検証できる値で authenticatorData を分解し、 origin を 1 文字変えると検証が落ちることを確かめ、BE/BS フラグ、signCount、 アテステーションの要否、synced passkey が AAL3 に使えない理由まで。

マジックリンクと SMS OTP — NIST SP 800-63B-4マジックリンクと SMS OTP

帯域外チャネルに使い捨ての秘密を送る 2 方式。NIST が「メールを out-of-band 認証に使ってはならない」と定める理由、SMS の restricted 指定が課す 4 つの義務、 256 bit と 19.93 bit のエントロピーの落差、リンクの先読みまで。