摘要

  • 冻结的 2026 年 8 月 28 日版 LACNIC 委派统计文件,在版本行和三条汇总行中均声明共有 49,894 个记录行;依照同一份格式规范排除版本行和汇总行后,实际只有 48,214 行。1,680 行的差额全部来自 ASN 汇总。
  • latest 与日期版文件在抓取时逐字节相同,两份 MD5 伴随文件也都与独立计算一致。这足以排除本次抓取中的普通传输差异,却不能让错误的行数变正确,更不能证明每条资源记录的语义都正确。
  • 持久 latest 别名没有对应的 .asc;日期版签名在数学上验签成功,但它是 2026 年新生成的 SHA-1 签名,使用 2002 年创建的 DSA-1024 密钥。现代 OpenPGP 规范明确要求实现不要生成或接受这种新签名。

先别谈密码学,先数行

文件第一行是:2|lacnic|20260828|49894|19870101|20260828|-0300。按照公开的 RIR Statistics Exchange Format,第四个字段 records 不是地址数量,不是 ASN 数量,也不是资源价值,而是文件里的记录行数。计算时应剔除空行、注释、版本行和各类型汇总行。

紧随其后的三条汇总看上去完全自洽:IPv4 为 20,375,IPv6 为 13,519,ASN 为 16,000。三者相加正好是 49,894,与版本行完全一致。如果校验程序只比较版本行与汇总行,它会得到一个漂亮的“通过”。

但规范还说,汇总值应当是该资源类型的记录行数。真正遍历文件后,结果变了。这份文件共有 48,218 个物理行,其中一行是版本行,三行是汇总,剩余 48,214 行才是资源记录。IPv4 实际也是 20,375 行,IPv6 实际也是 13,519 行,两项都能闭合。ASN 只有 14,320 行,不是汇总所写的 16,000。总差额 1,680 恰好全部落在 ASN 一项。

这里最重要的编辑纪律,是不把“记录行”偷换成“资源”。格式规范特意说明,汇总数量不等于该类型所包含的资源总量。一个 ASN 记录如何表达、它对应何种资源范围,与“这一行是否存在”是不同问题。因此,本次复核不能推出有 1,680 个 ASN 消失,不能推出有成员丢失资源,也不能推出某条委派错误,更不能推出路由受到影响。

能够成立的结论只有一个:接收方如果严格依照发布者自己的格式定义核对记录行,就无法重现发布者写在头部的数量。这个结论很窄,但不是小事,因为该文件本来就是给自动化系统使用的。

LACNIC 的 README 把这里的文件描述为 IPv4、IPv6 和自治系统号码分配与指派情况的每日摘要。格式规范又要求把最新一版放在 delegated-<registry>-latest 这个持久名称下,目的就是让系统任务、浏览器书签和其他长期保存的地址自动取得最新数据。对于这种接口,records 不是装饰性文字,而是发布者主动提供的验证不变量。

应当先替 LACNIC 说完的有利事实

批评必须建立在完整证据上。就这次抓取而言,LACNIC 提供了相当多的公开材料,而且若干检查确实通过。

首先,delegated-lacnic-latest 与 delegated-lacnic-20260828 完全相同。两个对象都是 2,311,991 字节,SHA-256 都是 95d59beaa4deb0ed5f40ae33a37210e11b4bce5b518613cfd4097fe442e7abf4。HTTP 响应里的 ETag 和最后修改时间也一致。也就是说,在冻结时点,持久别名没有指向另一个内容不同的版本。

其次,两份 MD5 文件都公布了 30f2fac07e846d1706c1fa8c7bb0ebd6,对两份数据文件独立计算也得到同一个值。至少在发现截断、偶发传输错误或抓取到不同字节这类有限用途上,遗留校验正常工作。本次证据不能支持“文件在途中被篡改”的说法。

第三,日期版的分离签名确实对应这份文件。独立复核没有借助外部 OpenPGP 库,而是解析版本 4 数据包,重建 SHA-1 摘要,再用 LACNIC 发布的公钥计算 DSA 验证方程。方程成立。把这枚签名写成伪造,或者暗示数据已被攻击者替换,都会违背证据。

第四,旧版 RIR 交换格式要求公布同名 MD5,却只说还“可以”公布 PGP 或其他密码学签名。签名条款是可选的。因此,latest.asc 不存在并不自动构成违反那份旧规范。本文要问的是:在今天的自动化和密码学环境里,这套旧合同能否给出一个接收方可统一接受的现代发布证明。

这些有利事实不是客套。它们把问题从“数据是否遭破坏”收窄到“证据如何组合”。越能证明字节相同,越能看清签名、结构和版本关系并非同一个检查。

四种经常被混在一起的“完整性”

第一种是传输一致性:我收到的字节,是否与发布者公布校验值时看到的字节一致?两份 MD5 在本次抓取中给出了肯定答案。不过 RFC 6151 已说明,在需要抗碰撞性时,MD5 不再可接受。它仍可发现一些普通传输错误,却不能充当现代的发布者身份凭证。

第二种是发布者认证:这些字节是否由持有可信密钥的人授权,而且所用算法是否属于接收软件可以接受的范围?日期版签名提供了数学关系,持久别名却没有同名签名入口。

第三种是结构一致性:文件是否满足自己声明的行数、类型和格式条件?记录总数在这里不通过。正确签署一份内部不一致的文件,只能证明大家拿到同一份不一致文件,不能消除不一致。

第四种是语义正确性:每一行是否准确反映注册管理状态?本文没有对此作出判定。委派统计规范自己就把文件定义为某个时点的快照,不包含事务和历史细节。它不是实时 BGP 路由表,不是所有权登记簿,也不是资源当前地理位置或实际使用情况的充分证据。

这四个问题需要分开,因为改进方案只能对发布者真正控制的事实负责。让签名承担无法承担的语义真相,会制造新的集权幻觉;完全不管结构和版本关系,又会把最基础的公共协调责任推给每个下游自行承担。

latest 的新鲜度,没有跟上日期版的签名

目录设计把“取到当前版本”和“取到签名版本”拆开了。delegated-lacnic-latest.asc 在抓取时返回 HTTP 404。日期版 delegated-lacnic-20260828.asc 则返回 200,公钥 delegated-lacnic-key 也可取得。

认真做事的消费者并非毫无办法。它可以先抓 latest,从头部读出 20260828,再拼出日期文件名;比较两份字节;随后下载日期版签名和公钥。这个流程能够在消费者一侧建立关系,却不是 LACNIC 自己签署的一句话:“这个时点的 latest 就是这个日期对象。”

当别名不断移动时,这一区别尤其重要。今天发现两份字节相同,并不能证明昨天某个抓取时刻的映射,也不能说明明天发生纠正后旧版怎样被新版本取代。接收方可以记录自己的观察,但公共发布层没有提供一个可长期保存的、带签名的别名到版本映射。

数学验签成功,现代协议仍要求拒绝

LACNIC 公布的主密钥指纹是 BED3BE6115A8AF036D271F9D3B8DD165F3FB5533,密钥 ID 为 3B8DD165F3FB5533。它采用 DSA,主参数长度 1,024 位,创建于 2002 年 12 月 12 日,用户标识为 Auto Zone Generator。在检查到的自签名中没有主密钥到期时间。

日期版签名创建于 2026 年 8 月 29 日,采用 DSA 与 SHA-1,签发密钥 ID 与上述公钥一致,数学验签为真。

RFC 9580 对这种“数学上能算、协议上不应接受”的情形给出了明确界线。OpenPGP 实现不得生成 MD5、SHA-1 或 RIPEMD-160 签名,不得验证依赖这些算法的近期签名,也不得用 DSA 密钥进行签名或验证。2026 年新生成的 DSA/SHA-1 签名正落在这条界线内。

为了查明历史对象到底如何生成而重建 DSA 方程,是取证式事实核对;它不等于建议生产系统豁免现代协议。一个符合 RFC 9580 的实现拒绝这枚签名,并不是声称数学方程错误,而是在执行算法接受政策。

NIST 计划在 2030 年底前让所有密码保护应用退出 SHA-1,并鼓励相关方提前准备。这个时间表提供迁移背景,但不应被夸张成“NIST 已在 2026 年单独判定这份文件无效”。对这份 OpenPGP 签名更直接的约束已经来自 RFC 9580。

缺少的不是新平台,而是一张发布回执

最小修复并不复杂。每次生成每日文件时,同时生成一份体积很小、采用现代密钥和 SHA-256 的签名发布回执。

这张回执至少应绑定:格式版本、RIR 与数据集名称、序列号和本地生产日期、日期文件名与 latest 别名、字节长度和 SHA-256、声明总行数与实际总行数、各资源类型的声明值与实测值、截止日与时区、签名密钥指纹和有效期,以及纠正或取代关系。

放在 latest 旁边的回执,应明确写出它对应哪个日期版。日期版回执保持不变。如果生成器再次产出头部 49,894、正文 48,214,发布流程就必须作出可见选择:阻止发布、附带明确的例外说明,或者发布后用一张带关联关系的新回执纠正旧版。

旧系统无需立刻被切断。现有文件名与 MD5 可以保留,现代回执作为增量层加入。密钥轮换也不应只是悄悄替换文件,而应通过新旧密钥之间的连续性声明让接收方验证过渡。镜像站即使不长期保存全部大型快照,也可以低成本保留小型回执。

更重要的是,回执只证明 LACNIC 有权证明的事:它发布了哪些字节、用了哪些公开名称、声明与实测的行数是什么、哪枚密钥授权了发布、哪次纠正取代哪一版。它不决定运营商如何选路,不把快照升级成资源产权裁判,也不给注册管理机构增加对本地网络的控制权。

这正是一层薄而可靠的公共协调机制。公共层把共同事实说清楚;使用这些事实的决策继续留在网络边缘。

证据没有告诉我们的事

现有材料不能证明攻击、密钥泄露、文件伪造、资源丢失、路由事故或用户损失。它没有解释 ASN 汇总为何多出 1,680,也没有审计 LACNIC 内部生成器和私有审批流程。它更没有证明某个下游程序真的依赖错误数字并因此失败。

但它已经证明一个足够明确的公共问题:文件不满足自己的记录行定义;自动入口没有同名签名;日期入口的签名虽能做数学复核,却不符合现代 OpenPGP 接受条件。合比例的回应是闭合发布证据,而不是编造更大的灾难。

来源