iqa:// · 128-byte attestation envelope · IETF 审核中 · 姊妹柱:rttp://(IANA CRI 27)
上一篇讲了地址怎么来(派生,不是分配)。地址解决了"你是谁、怎么找到你",但 Agent 世界还欠一个答案:你做过的那件事,怎么向第三方证明?
日志不行——日志存在运营方自己的系统里,可以被事后修改。截图不行——截图连哈希都沾不上。需要的是一种新载体:事件发生时同步签发的密码学凭证,任何人可离线复核。我们把它做成了固定 128 字节的信封,这就是 IQA 的核心。
一、为什么是"信封",而且偏偏是 128 字节
证据载体常见的做法是 JSON:几百字节,还需要一个 JSON 解析器去逐字段走。CBOR 紧凑些,但仍要 TLV 解码逻辑。
IQA 的取舍相反:固定布局,零解析器。128 字节、字段偏移固定,任何能读字节的语言——Python、Rust、嵌入式 C——用切片和哈希原语就能处理。解析器需求:无。这一条写在公开的规范里,也写在一致性测试向量里:固定输入、固定输出,逐字节可复现。
128 字节同时是"足够装下证明要素"与"足够小到塞进任何日志行、任何报文头"的平衡点。

二、逐字段走一遍
信封的固定布局(按序):魔数 → 版本/算法/标志 → 租约 → 主体分片 → 证明 → 机构 → 随机数 → 地位 → 保留 → 扩展。
挑四个最值得驻足的:
- 主体分片(16 字节):上一篇派生出的那个 shard,原样嵌在信封里——证据落地时自证归属,不需要任何登记处告诉验证方"这证据是谁的";
- 租约:证明的有效窗口。过期即失效,窗口语义由签发方声明;
- 随机数:防重放。同一事件签两次,两个信封互不相同;
- 地位:单字节,却是整个信封的灵魂——下一节专门讲它。
三、地位四态,以及"撤销也是证明"
地位是一个字节,取值来自封闭四态集合:Ghost(无证据可报:未验证 / 过期 / 撤回 / 不可达)/ Probation(曾证明 · 现观察)/ Radiant(当前合规 · 证据可达的最高态,租约制,永不永久)/ Genesis(纪元锚)。
前三者构成证据轴——从"没有证据"到"被证据托举"。Genesis 不在这条轴上:它是纪元的构成态(era anchor),不走应用路径,不是"更高级的合规"。四态不构成等级阶梯,一态一断言。
有意思的是撤销的做法:撤销不是"把记录删掉",而是签发一个新信封,把地位写成 Ghost。于是旧信封依然成立——它证明的是"签发那一刻的事实";新信封同样成立——它证明的是"后来发生了什么"。两个信封并排,就是一条完整的、双方都无法抵赖的时间线。
审计的最高境界不是管理日志,而是让日志自己带上数学。

四、fail-closed:REJECT 是结果,不是错误
验证是常时时间(constant-time)的全帧 HMAC-SHA256:覆盖整帧 128 字节,验证时证明字段清零后重算。任何一字节被改动——哪怕翻一个 bit——MAC 即破,输出 REJECT。
两条纪律值得单独说:常时时间意味着验证不泄漏"哪里被改了"(不给攻击者喂定位信息);fail-closed意味着任何格式异常、任何字段不合规,一律 REJECT——畸形输入永远不会被"好心"地当成部分有效来处理。
REJECT 不是异常,是这套系统的正常输出之一。它和 PASS 一样,都是可以被复核的结论。
五、诚实的边界
信封证明的是签发时刻的事实,不预测未来;它不替代任何网关的实时风控——检测是检测的事,证据是证据的事;委托链语义当前版本明确不规定(正在征求社区意见);机构密钥的分发属于部署层的信任决策,规范不越权代答。
我们不声称解决了"信任"——我们只是把其中可以变成数学的那一部分,变成了 128 个字节。
iqa:// scheme 与 AE-128 信封定义于草案 draft-li-rttp-iqa-addressing(IETF 独立提交通道审核中);一致性测试向量(AE128-VECTOR-1)公开可复现;参考实现三语言上架(PyPI / npm / crates.io)。
仓库:github.com/Aicent-Stack · 规范与证据链:iqa.org · 寻址柱官网:rttp.com
一句话:制度说"相信我",信封说"你自己算"。