2026-08-02 のレビューで挙がった設計上の緊張。判断が要る。
論点
TypedCode は「匿名・個人同定はしない」と明言している (system-spec §1 スコープ外、§8.3、試験モードは「ローカル完結・サーバ非依存・匿名」)。
その一方で fingerprint は canvas / WebGL / フォント一覧 という、ブラウザ環境で最も同定力の高い信号を集めている (packages/shared/src/Fingerprint.ts)。
ADR-0024 で Tier F 限定 (content-free な Tier A には含めない) としたのは正しい手当てだが、「収集はするが配らない」であって「収集しない」ではない。
fingerprint の実際の用途
- チェーン root の構成要素 (
SHA256(fingerprintHash + nonce ...))
- 別 proof からのイベント流用の検出
- session start token の端末束縛 (
token.fingerprintHash === proof.fingerprint.hash)
これらの目的に対して、canvas / WebGL / フォントまでの同定力が必要かは自明でない。1 と 2 は nonce + serverNonce で相当部分が達成でき、3 は「同一端末であること」が言えれば足りる。
やること (案)
- 各 fingerprint コンポーネントについて「どの目的に効いているか」を洗い出す
- 目的に対して過剰なコンポーネント (canvas / WebGL / フォント) を落とせるか検討する。落とせるなら、匿名性の主張がより強固になる
- 落とせない場合は「なぜ必要か」を ADR に残す (現状、収集範囲の根拠を書いた ADR が無い)
試験モードは大学の実試験で使われるため、「何を収集しているか」を学生に説明できる状態にしておく価値も高い。
2026-08-02 のレビューで挙がった設計上の緊張。判断が要る。
論点
TypedCode は「匿名・個人同定はしない」と明言している (system-spec §1 スコープ外、§8.3、試験モードは「ローカル完結・サーバ非依存・匿名」)。
その一方で fingerprint は canvas / WebGL / フォント一覧 という、ブラウザ環境で最も同定力の高い信号を集めている (
packages/shared/src/Fingerprint.ts)。ADR-0024 で Tier F 限定 (content-free な Tier A には含めない) としたのは正しい手当てだが、「収集はするが配らない」であって「収集しない」ではない。
fingerprint の実際の用途
SHA256(fingerprintHash + nonce ...))token.fingerprintHash === proof.fingerprint.hash)これらの目的に対して、canvas / WebGL / フォントまでの同定力が必要かは自明でない。1 と 2 は nonce + serverNonce で相当部分が達成でき、3 は「同一端末であること」が言えれば足りる。
やること (案)
試験モードは大学の実試験で使われるため、「何を収集しているか」を学生に説明できる状態にしておく価値も高い。