bugfix(#24 #25):PBKDF2 600k→100k(CF runtime 上限,真雲 bootstrap 500)+http_request 補 1042 flag

- portal-auth.ts PBKDF2_ITERATIONS 600_000→100_000:CF Workers 正式 runtime 的
  PBKDF2 上限 100k,crypto.subtle.deriveBits 超過直接拒絕 → /portal/admin/bootstrap
  真雲 500(2026-07-14 uncle6 T6-cloud 實撞,證據 arcrun-rag docs/manual/
  uncle6-deploy-record.md);miniflare 無此限制=本機全綠假象。儲存格式自帶迭代數,
  平台放寬可無痛升。
- 補測試「驗 600k 舊 hash 仍通」(verify 從儲存值解析 iterations;誠實邊界:真雲
  deriveBits 同樣封頂,但真雲 bootstrap 從未成功→零存量 hash 無遷移面)。
- .component-builds/http_request/wrangler.toml 補 global_fetch_strictly_public
  (self-hosted 同帳號 fetch 1042 正解,Arcrun#33 同族;官方跨 zone 行為不變,
  原理同 cypher 前例 rules/03 1042 段)。
- SDD:design D-5 修訂註+tasks Bugfix 記錄;wiki status 更新。
- 驗證:cypher tsc 0;169/170(唯一失敗 pre-existing);portal 三套 56/56;
  http_request wrangler --dry-run 過。不 merge 待總管審。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
uncle6me-web
2026-07-14 20:43:41 +08:00
parent 52dbd31dea
commit e566495df9
6 changed files with 70 additions and 11 deletions
@@ -102,6 +102,12 @@ kbdb-graph-plugin 的 `/graph/neighbors/:name` 只吃節點名,**無 owner/庫
| argon2id | 記憶體硬化更強,但 Workers 無原生,要引 WASM 模組(新依賴+冷啟成本);Workers 128MB 記憶體下參數也開不大 |
| bcrypt | 純 JS 實作燒 CPUWorkers CPU limit),無原生 |
- 格式 `pbkdf2-sha256$600000$<salt_b64>$<hash_b64>``password_hash` slot(見 D-6);驗證用常數時間比對(同 PR#15 慣例)。
- **【修訂 2026-07-14T6-cloud 真雲實撞】迭代數 600k → 100k**CF Workers **正式 runtime**
PBKDF2 上限是 100,000`crypto.subtle.deriveBits` 超過直接拒絕)→ `/portal/admin/bootstrap`
真雲 500;miniflare 無此限制=本機全綠假象(證據:arcrun-rag `docs/manual/uncle6-deploy-record.md`)。
OWASP 建議 600k 但平台封頂——儲存格式自帶迭代數(verify 從儲存值解析),未來平台放寬可無痛升。
誠實記:600k 舊 hash 的「漸進遷移」只在 miniflare/放寬後成立,真雲 deriveBits 同樣封頂;
所幸真雲 bootstrap 從未成功,雲端不存在 600k hash,無實際遷移面。
- 順帶:**不動 console-auth 既有 3 輪 SHA-256**Admin Console 現狀不動鐵律);portal 是新面、直接用對的。
### 4.2 決策 D-6:雜湊放 slotKBDB),不放 CF Secrets【建議=定案傾向強】
@@ -130,6 +130,19 @@
---
## BugfixP1-P4 交付後)
- [x] **PBKDF2 600k → 100kT6-cloud 部署抓到的框架蟲,2026-07-14,分支 `fix-pbkdf2-cf-limit`**
CF Workers 正式 runtime PBKDF2 上限 100,000 iterations600k 時 `crypto.subtle.deriveBits`
直接拒絕 → `/portal/admin/bootstrap` 真雲 500uncle6 實撞,證據 arcrun-rag
`docs/manual/uncle6-deploy-record.md`);miniflare 無此限制=本機測試全綠假象。
修:`portal-auth.ts` `PBKDF2_ITERATIONS` 100_000+註明平台封頂;design D-5 已加修訂註。
verify 相容性:迭代數從儲存值解析,補測試「600k 舊 hash 仍通」(miniflare 造);誠實邊界
=真雲 deriveBits 同樣封頂、600k hash 真雲仍拒,但真雲 bootstrap 從未成功過 → 無存量 hash、
無遷移面。同 PR 順手:`.component-builds/http_request/wrangler.toml`
`global_fetch_strictly_public` flagself-hosted 同帳號 fetch 1042 正解,Arcrun#33 同族,
官方行為不變原理同 cypher 前例 rules/03 1042 段)。
## 第二波(不在本 SDD 動工範圍,掛號)
- MCP token 綁庫集合(design §9PR#15 擴充,只動 `mcp/`