摘要

  • RFC 5105 明确说,有效签名只是有效验证令牌的必要条件,不是充分条件。登记局还须核对被签元素、变换和算法、证书与 VE 资质、注册商、号码范围、方法、日期及防重放政策。
  • 验证令牌记录的是一次验证声明。它不是登记局的委派决定,也不是 EPP 成功、权威 DNS 发布、递归解析可见或通信完成的凭据。

运营面板只显示一个绿色字段:signature valid。在它背后,至少还有八个尚未回答的问题。

签的是整个令牌,还是某个可选子元素?算法是否仍获准?证书链在决定当时是否受信?签名者是否仍是获认可的验证实体?令牌写的注册商是否就是当前申请方?E.164 号码或号码段是否一致?验证方法是否满足当时政策?执行日、到期日与允许提交窗口是否都合规?同一令牌此前是否已经使用?

这正是 RFC 5105 的制度价值。它没有把这些问题压缩成一个密码学布尔值。

ENUM 把 E.164 电话号码与域名体系联系起来。普通域名可以按注册流程分配,而 ENUM 域名必须与号码受让人保持一致。RFC 4725 因此区分号码 Assignee、ENUM Registrant、Validation Entity、Registrar、Registry、DNS 服务方和应用服务方。

各角色可能由同一组织兼任,但职责不会因此消失。VE 验证申请人与号码权利之间的关系;Registrar 代表申请人向 Registry 提交;Registry 维护主委派数据库及相应权威区;DNS 服务方发布区域;应用后来才消费解析结果。

RFC 5105 的令牌是 VE 向 Registry 携带验证结果的标准对象。它之所以要签名,是因为令牌可能由并无号码使用权证明权限的 Registrar 转交。签名防止中间方悄悄更改号码、方法、日期或注册商身份,却不把中间方变成决策者。

必填 validation 元素包括:在某一 VE 内唯一的序列号、一个 E.164 号码、可选的同长度号码段终点、VE 标识、Registrar 标识、验证方法标识、执行日期,以及可选到期日期。另一个可选区可带组织、公司登记号、姓名、地址、电话、传真和电子邮件。

这些字段各自有命名空间。序列号只在某一 VE 内唯一。只存 000001 会丢掉构成其身份的 VE。即使保留“VE+序列号”,若没有精确令牌哈希、号码范围、Registrar、方法和日期,也不足以判断重放或授权。

号码段也不能凭习惯扩张。首个 E164Number 与可选 lastE164Number 定义闭区间,两者必须同长度。导入器若去掉结构、改写规范化规则或扩展范围,就改变了原声明。签名只能保护被签表示,无法代替 Registry 把它与实际 ENUM 委派申请比对。

RFC 采用 enveloped XML-DSIG,并要求 exclusive XML canonicalization。令牌常嵌在另一个 XML 协议内;排他规范化避免外层继承来的命名空间声明破坏签名。这解决的是稳定摘要输入,不是业务授权。

签名引用范围尤其关键。Reference URI="#TOKEN" 应指向令牌元素上的 Id="TOKEN"。RFC 警告,如果把该 ID 移到可选 tokendata,签名对本用途就会失去价值。通用库仍可能正确验证那个联系信息子树的数学签名,而号码、方法与日期没有被覆盖。

因此“XML-DSIG 成功”不是结论。Registry 还必须确认变换与密码算法获准,引用目标确为完整 token 元素,并且签名密钥属于获认可的 VE。RFC 的示例直接写明:有效签名是有效令牌的必要条件,但不是充分条件;证书和 XML Schema 也要检查。

证书本身不会授予 VE 资格。RFC 允许 Registry 自己作为认证机构、接受公共 CA,或只接受预登记密钥。嵌入式 X.509 证书只是验证材料。它不选择信任锚,也不证明主体在做出决定的那个时点仍有 VE 资质。

审计系统因此需要保存“信任快照”和“资质时期”。证书编码有效期可能尚未结束,VE 的制度性认可却已经撤回。今天的信任库也可能与当年不同。后来的政策变化可以改变当前可接受性,但不应静默改写历史系统当时究竟看到了什么。

日期也有两层。executionDate 说明验证何时执行;expirationDate 说明令牌表示的验证何时结束。若省略到期日,格式把它解释为无限有效。但 RFC 同时要求 Registry 检查这种省略是否符合本地政策,并要求政策规定执行后多久仍可用该令牌授权委派。

所以“未到期”并不等于“可授权”。令牌的到期日在未来,提交窗口却可能已关闭;令牌可以省略到期日,而 Registry 不允许无限期验证;所有日期都可通过,Registrar 却不匹配。每个判断都需要政策版本和自己的时钟。

Registrar 绑定提供了一个清晰反例。若第二家 Registrar 窃听到为第一家签发的令牌,原签名仍然有效。Registry 必须把令牌内容与请求匹配,签名里的 registrarID 会证明第二个请求不是被验证的那个请求。完整性没有失败,授权检查正确地失败了。

methodID 同样只是标识,不是执行证明。RFC 4725 说明,验证方法可能因当事方、数据源、号码受让人选择和监管要求而变化,具体方法不在该文档范围内。Registry 需要判断某方法在该政策时期是否满足这个号码类别的最低要求。

委派生命周期也不会停在首次签名。RFC 4725 要求 ENUM 委派持续跟踪 E.164 号码状态。重新验证成功,委派可以继续;重新验证失败,委派必须通过明确操作或到期自动暂停,本地政策还可能给宽限期。旧令牌的签名仍可验证,不会因此推翻后来的失败事件。

防重放需要完整账本。一个令牌首次被接受后,仍可能在表面有效期内再次出现。仅靠序列号不能知道它是否已消费、被拒绝后重试,或用于另一请求。应联合记录 VE、序列、精确哈希、Registrar、号码范围、首次出现时间、决定和允许窗口。

可选联系信息也不能取代核心验证。组织名或电子邮件可帮助后续核验,却不证明当前号码分配。令牌内容不加密;若本地政策要求保密,必须另用机制。签名、传输加密、字段最小化和授权是四种不同控制。

算法选择带有时代边界。RFC 5105 当时要求支持 RSA-SHA1 与 RSA-SHA256,同时已经指出 SHA-1 的密码分析疑虑,并把实际接受算法及密钥长度留给 Registry 政策。库能识别某 URI、能完成历史算法验签、Registry 现在愿意接受,是三个不同事实。

令牌通过政策检查后,仍只到委派链条中段。RFC 5076 定义 EPP 扩展,可增加、更改、删除或查询 ENUM 验证信息。EPP 成功响应只证明那次协议事务成功;它不自动证明权威区已经发布。

数据库可以提交,而区域生成失败。权威服务器可以更新,而递归缓存仍保留旧视图。RFC 3761 的 ENUM 查询可以返回 NAPTR,URI 却仍可能错误或终端不可达。终端可达,也不保证目标通信完成。VE 的签名对这些下游系统没有追溯性权力。

可辩护的证据链应分段保存。密码学收据记录原始字节与哈希、解析器和 Schema、解析出的 ID、引用节点、变换链、规范化输入、摘要与签名算法、证书路径、信任锚及结果。它只陈述被覆盖对象是否验证通过。

政策收据再记录 VE 身份与资质、方法许可、Registrar 匹配、E.164 范围、执行与到期日期、提交窗口、政策版本及重放历史。Registry 单独签发接受或拒绝决定。EPP 事务、委派记录、权威发布、解析观察和应用结果分别产生自己的收据。

这种结构让故障可定位。错误可能来自 VE 签错号码、引用范围错误、另一 Registrar 重放、信任库变化、旧方法仍被接受、EPP 未提交、区域未发布或应用不可达。若全部叫“已验证”,组织只能看到结果颜色,无法看到权力和失败发生在哪里。

这与 Heng Lu 的现实分层原则一致。签名是一项强而窄的表示与来源事实。它只有在自己的层内才可靠。一旦让它替政策、登记操作或运行服务发言,清晰的数学事实就会成为扩张权力的符号。

运行代码优先并非贬低文档,而是要求每个系统证明自己执行的那一步:验证器证明具体对象;Registry 证明决定;EPP 证明事务;DNS 证明发布;解析器证明观察;应用证明结果。任何一层都不应借用上一层的绿色状态。

来源