pub fn redact_key_id(raw: &str) -> StringExpand description
v1.4.106 codex 0542 F1 [P2 SECURITY]: redact key_id label 为 8-hex 短 SHA256.
输入 key id 明文 (如 “bot_a” / “trader-prod-1”) → 输出 kh_<8hex>
(如 kh_3a4f5b6c). dashboard 看到 kh_3a4f5b6c 仍能区分 (counter 维度
差异化), 但不暴露 key id 明文 — 反查需要离线 dictionary 攻击 (尝试
SHA256 大量候选 id 直到 hash prefix 匹配).
三个 sentinel 不 hash, 直接透传 — 这些是 audit 内部 sentinel, 无 key id 可泄漏:
<none>(no api key configured / legacy mode)<missing>(key 缺失)<invalid>(key verify 失败 / unknown bearer)
opt-out: 设 FUTU_METRICS_PUBLIC=1 env 时回退 v1.4.105 行为 (明文
key_id) — 老用户 dashboard 依赖 key_id 明文时用. 默认 secure (redact).
8 hex (32 bit) 在 ~10 keys 量级内 collision 极低 (<10^-7), dashboard 维度 差异化够用. 若 keys.json 上 100+ keys 仍想 redact 时单 metric 多个 hash 是可接受 cardinality (类似 user-agent label 多 variant).