AICENT.COM
← 返回中文博客

"「我们确立过一次」悄悄变成「这已确立」——时间半边是 determination 的属性,不是凭证的属性"

2026-11-07 · RTTP · IQA
本文引证来源 · 本文所读的线程,在案可查:WIMSE 存档,AIMS placement 线程,2026 年 11 月 6 日 · 讨论所锚定的文本:draft-li-rttp-iqa-addressing-02(全文) · 系列页:datatracker · 让这个区分可执行的家庭:iqa.org/conformance/aicent-lease-boundary/(四件套,逐文件 SHA-256) · 一致性枢纽:iqa.org/conformance/ · 另一只时钟的姊妹篇:叶寿限不是裁决年龄 · 本线早前两篇:解释器与时钟 · 120 秒租约 · 姊妹双柱:RTTP(rttp://,CRI 27) · IQA(iqa://,CRI 28)

有些协议缺陷是代码;昂贵的那些是语法。本周,在 WIMSE 列表关于 AIMS 该把跨域边界写在何处的线程里,placement 讨论的一位参与者——Jiahui Miao——点中了委托授权栈里最昂贵的一处语法,而且用的正是这个系列最看重的形式:不是立场,是对一个句子的告诫。她的主题是 issuer trust 的时间半边,她的告诫值得整段引用,因为措辞本身已经在干活:「state the time half as a property of the determination, not of the credential. Credentials already carry their own expiry; what implementers over-read is the determination — 'we established this once' quietly becoming 'this is established.'」

两只时钟 · 凭证的 & determination 的过度读取发生在实现者读错表盘时 — 拿凭证的过期顶替 determination 的时钟 1 · 凭证自带过期 — 写在脸上、在 claim 集里、可审计时钟 2 · determination从某一刻观察到的证据得出 — 除非协议给它一个,否则自己没有时钟过度读取「我们确立过一次」→「这已确立」— 一个没有时态、没有时钟、没有衰减的句子凭证有效 + determination 过期 = 危险象限 — 实现者看得见的每个表盘都说没事失败恰恰因为可见的那只钟是诚实的 — 只是诚实的不是要紧的那只修法是一个成员,不是一纸备忘observation_as_of_ms — 回答所依赖之物的年龄,在每个响应上信任是带时态的动词 — 时态住在 determination 里,不住在触发它的凭证里
图 1:双钟问题。凭证的过期诚实而可见;determination 的年龄默认不可见——过度读取就是拿一个顶替另一个。

为什么过度读取是结构性的,不是粗心

把这叫实现缺陷会让人安心,但过度读取长在多数委托工作出发的对象模型里。凭证是一件你能持有的东西;determination 是验证器内部某一刻发生的事件。东西会留存,事件不会——所以当系统要回答「这个调用能不能放行」,它伸手去拿它持有的东西,也就是凭证,并让凭证的时钟代 determination 的班。代班永远不精确:周一依据周一夜里就过期的证据做出的 determination,到了周二不会因为是周一做的就仍然新鲜,无论手里的凭证看起来多有效。凭证里没有任何东西记录验证器得出了什么结论、何时得出——于是结论凭继承获得了凭证的寿命,说得直白些,凭意外。安全决策上的意外寿命正是系统出事的方式:安静地,在所有可见表盘都读「正常」的象限里。

她提出的那句话,以及为什么我们带着她的名字采纳

线程的 placement 问题——限定句放 gap text 还是 §10.4——被两位参与者独立收敛到同一个分法上落定,对任何措辞这都是好兆头。但本文想带走的是 Miao 的时间半边那句话,而她是以标明属于自己的候选形式给出的:"a determination made from observed evidence holds at the time of observation; it does not by itself hold after that evidence expires." 我们正把这句话采进寻址草稿下一版的工作笔记,署名在这里以明文陈述而非埋进致谢区——因为一句带名字和日期的规范句是可核查的主张,一条无名的规则只是语法好点的民间传说。这个系列记录过的每一次借用,其力量都来自同一种缺席:没名字、没日期、没记录谁在何时说了什么。署名是对策,成本一行。

两句限定句 · 两种失败模式 · 一句 gap statement两个半边的失败方式不同 — 所以是两句而不是一句句 1 · issuer trust 决定不了什么接受另一域的 issuer ≠ 本动作的授权 — 在初次接触时失败句 2 · determination 何时停止决定在观察时刻成立 — 证据过期后不因自身继续成立失败模式 1issuer trust 顶替了域自己的评估 — 词汇表被压扁的缺陷失败模式 2过期的 determination 冒充现行 — 缺时钟的缺陷线上锚点:authority_not_determined ≠ operation_not_permitted(§8.1) · observation_as_of_ms 过期即 null(§8.2)一人一句 — gap statement 付得起两行;失败付不起
图 2:线程落定的两个半边。一句限定 issuer trust 决定什么;一句限定 determination 活多久——分开成句,因为失败模式各异。

线上已经拿时态做了什么

她要的语法不是假设;寻址草稿已经实现了它,而且实现恰好是对她那份告诫的成题作答。每个响应携带的 grant reference 包含一个名叫 observation_as_of_ms 的成员,草稿给它一条带牙的规则:"observation_as_of_ms is null whenever the observation the answer relied on is absent or not fresh, even if a later, successful observation is available at answer time. A diagnostic or opportunistic read performed after the relied-on evidence expired does not backfill the member: diagnostic reads do not participate in authorisation and do not renew evidence. The member states the age of what the answer actually relied on, not the freshness of the freshest thing the implementation happened to see." 拿这段对着双钟问题读,设计意图严丝合缝:凭证留着自己的钟;determination 拿到自己的;响应被禁止拿一个冒充另一个。可执行形态在 aicent-lease-boundary 上跑——租约各节十五个用例,checker 15/15,突变体 17/17,每条期望锚定到发布文本的引用句——已并入 Agent-Authority-Conformance 实验室主线,可从咱们的一致性枢纽带逐文件摘要下载。

深层那一层

剥掉协议词汇,剩下的是一句关于信任本身形状的话:信任是带时态的动词。「我们确立过」是过去时;「这已确立」是一个虚假的现在时;诚实的形式需要把观察时刻带上,否则它会悄悄把自己变位成假的那一个。这正是时间半边属于 determination 而不属于凭证的原因——凭证是关于世界的证据,determination 是系统对证据的信念,而信念恰恰是不会站着不动就保持为真的东西。给每个 determination 在每个响应上写明年龄的协议不是在添官僚手续;它是在拒绝让过去时借穿现在时的衣服。

一行收束:时间半边是 determination 的属性,不是凭证的属性——从观察到的证据得出的 determination 在观察时刻成立,且不因自身在证据过期后继续成立,所以线上欠每个回答一个写明的年龄,而这句话现在有了名字。

已封印 rttp://f183ff0f.blog.aicent · iqa://f183ff0f840b6b40bce566f84785defc.forge.iqa · 密封记录