摘要

  • RFC 9997 依据 IANA 私有企业号为合格持有人确定性划出私有 YANG SID 区段,全球边界可以自行计算,无须再等待逐区段审批。
  • SID 中可辨认的 PEN 不是来源证明;它既不认证 YANG 模型,也不认证 .sid 映射、发布者或某个整数的具体含义。
  • 真正可依赖的链条仍需核实发布渠道、固定模型修订与映射哈希、检查设备能力,并以运行系统是否实际接受为终点。

先看一条看似毫无问题的遥测消息。工业网关用 YANG-CBOR 发来一个整数键。控制器计算后发现,这个整数处在设备厂商 PEN 所对应的私有区段;本地 .sid 文件又把它解释为“温度告警”。数据能解码,区段不重叠,模型名称也像厂商产品。工程师很容易就此画上绿色勾号。

现在只改一个条件:这份 .sid 文件不是从厂商受认证的发布渠道取得,而是集成商从一个方便的镜像下载。镜像把同一个整数映射成“恢复出厂设置”。CBOR 语法仍然正确,PEN 算式仍然正确,整数仍处在正确区段。被替换的不是号码,而是号码背后的解释权。

2026 年 7 月作为 IETF 标准轨道文档发布的 RFC 9997,正好把这条边界写进了制度设计。它为 YANG Schema Item Identifier,也就是 SID,分配两段巨大的私有空间,并允许 PEN 持有人通过公式直接算出自己的区段。它消除了防冲突所需的行政往返,却没有把 PEN 变成数字签名。

两段空间,一次协调减法

RFC 7950 定义的 YANG 用模块、容器、列表、叶节点、动作与通知描述网络管理数据。文本名称适合人阅读,在受限设备和紧凑报文里却会占用较多字节。RFC 9254 因此定义 YANG-CBOR:模式项可以用 63 位无符号 SID 表示,也可以使用相对于当前 SID 的差值。

SID 的分配规则来自 RFC 9595。公开 SID 可进入 IANA 记录,私有范围则可交给另一管理者在区段内部自行分配。真正保存“这个整数对应哪个模块项”的,是 .sid 文件。它不是附属说明,而是解码语义的一部分。

RFC 9997 在 IANA YANG SID 注册表 中建立两段 Private mega-range:

  • 3,000,000,000 至 3,999,999,999,共十亿个 SID,可放入无符号 32 位表示;
  • 300,000,000,000 至 399,999,999,999,共一千亿个 SID,需要 64 位表示。

PEN 小于 1,000,000 的持有人,可按十进制公式在第二段取得 100,000 个 SID。PEN 小于 100,000 时,还能在第一段取得 10,000 个 SID。这里没有每家企业单独排队申请、等待专家审查或收取一张新证书。任何两方只要拿到同一个 PEN,都会算出相同的起止位置。

这个方法借用了已有的 IANA 私有企业号注册表。PEN 的申请门槛与操作成本有意保持较低。RFC 写作时已分配约 66,000 个,并预计低于 100,000、可以获得额外 32 位区段的号码可能在 2040 年左右耗尽;64 位方案则留有宽得多的空间。

绝对值很大,不代表每个报文都要为它支付同等字节成本。YANG-CBOR 的差值编码可以用邻近项相对于当前 SID 的小差额传送。因此,64 位区段解决长期容量问题,线上表示仍可保持紧凑。“范围更大,所以每个键必然更重”并不是完整的成本判断。

标准也为文档示例保留安全区段。RFC 5612 指定了文档专用 PEN,RFC 9997 由它派生出的 SID 区段同样被标为文档用途,避免规范、培训材料与真实部署发生碰撞。

公式证明边界,不证明作者

最诱人的错误推断是:某个 SID 落在企业 A 的 PEN 派生区段,所以它一定由企业 A 发布。RFC 9997 的安全章节直接否定这一步。SID 中出现 PEN 并不构成 provenance,也不保证该 SID 或模型出自 PEN 持有人;使用者仍须查明权威来源。

原因并不神秘:公式是公开的。任何人都能计算自己或他人的区段,也能把看似合理的整数写进一份非官方映射。计算规则能阻止两个守规矩的持有人无意选到同一片空间,不能阻止攻击者、已经失效的集成项目、承包商或分叉工具链冒用别人的内部含义。

RFC 8126 对注册政策的讨论提供了更一般的解释。注册表政策决定数值如何协调、需要怎样的审查;记录一个值本身,不能替后来使用该值的每份文件担保。在 RFC 9997 的设计里,IANA 维护 PEN 和两段 mega-range,持有人维护区段内部。两种记录都不会自动认证接收者手里的文件。

可以把它理解成地址,而不是公证。街道地址使两处房产不至于重叠,却不能证明放在门口的一份合同由屋主签署。SID 区段负责隔开空间;发布与验证链负责说明谁有权赋予空间内部的数字以意义。

.sid 文件其实在执行语义

把 .sid 视为构建元数据,会低估它的控制力。RFC 9595 特别警告:这份映射把语义概念连接到整数。如果不可信的一方控制映射,接收者会把语法完全有效的报文解释成错误的叶节点、动作或通知。

风险并不只来自恶意替换。构建流水线可能导入旧版本;软件包仓库可能替换文件却未保留模块修订;设备在 YANG Library 中声明一个修订,控制器却使用另一个修订的 SID;企业并购后,仓库、商标、PEN 与产品团队可能分别转移;私有扩展的原团队解散后,后续团队可能重复分配旧号码。

因此,安全的核验对象不是“厂商的区段”,而是一组不可拆开的事实:权威发布者、YANG 模块名称与修订、.sid 的精确内容、完整性证据、取得渠道,以及准备使用它的设备能力声明。其中任何一项变化,都应触发新的依赖决定。

RFC 9595 建议开发者只从权威来源导入 .sid 文件;资源较宽裕的管理系统,也应让映射来源与 YANG 模型来源具备同等级别的可信度。签名版本、固定的仓库提交或已验证软件包能够提供这种证据。高位数字的外观不能。

标识符也不应悄悄变成自动联网指令。RFC 9595 警告,可解引用的标识符可能触发远程访问,带来安全与隐私后果。自动发现会暴露运营者正在使用哪些模型,让解析服务追踪查询,也可能让在线端点在两次构建之间改变答案。可复现性要求保存精确字节与当时的来源判断,而不是只保存一个曾经有效的网址。

找得到,仍然不等于信得过

RFC 9997 明确没有为私有 SID 背后的 YANG 模型建立发现基础设施。持有人可以公开仓库;设备可以通过 RFC 8525 定义的 YANG Library 报告模块、修订、feature 与 deviation;行业目录也可以给两者建立索引。

这些工具回答的问题不同。目录回答“可能去哪里找”;YANG Library 回答“设备自报实现了什么”;发布渠道回答“某个发布者交付了什么”;经过验证的 .sid 回答“该修订把哪些整数绑定到哪些模式项”。便利的系统不能替相邻系统继承权限。

私有模型有时本来就不公开,只向客户交付或嵌入封闭产品。它的 SID 区段仍然能被所有人计算。网上找不到模型,不证明使用有问题;网上找到一个副本,也不证明副本有权威性。

最后一票属于运行系统

即使模型与映射来源完全可信,互操作性仍未成立。设备可能实现不同修订,关闭可选 feature,声明 deviation,在本地策略下拒绝动作,或只允许特定 datastore。YANG Library 提供能力证据,不承诺每项理论上合法的操作都会成功。

完整控制链至少有五层记录:IANA 协调 PEN 与 mega-range;持有人在自己的区段内分配;发布者交付模型与映射;使用者验证并解析;运行设备依照实际实现和当前状态接受或拒绝。把五层压缩成“SID 合法”,会同时丢掉来源、语义和执行事实。

Heng Lu 关于最小初始规范的主张,准确描述了这项设计:共同层只容纳必须共同的部分。RFC 9997 只集中足以避免碰撞的算式,把内部建模留在本地。这种克制是优点,前提是任何一方都不把薄薄的共同层升级成万能权威。

运行代码优先则给出了链条终点。记录与映射都重要,但只有实现真正接受兼容输入时,互操作才获得运行力量。控制器解出了 SID,而设备拒绝操作,注册证据再整齐也没有完成互操作。

现实层次提醒我们不要把相邻事实折叠成一个事实:PEN 记录、计算出的区段、发布的映射、设备能力声明与现场执行结果彼此有关,却不是同一件事。好的治理会保存它们之间的连接,也保存它们之间的距离。