摘要

  • RFC 5159 是 2008 年 3 月发布的资料性 RFC,为 OMA BCAST 登记四个 SDP 属性。
  • bcastversion 声明广播系统版本,能够影响终端选择哪一套处理规则。
  • 未受完整性保护的版本值可能被篡改,从而让终端发生能力降级。
  • stkmstream 把受保护媒体指向应处理的短期密钥消息流。
  • 指向正确的流并不等于收到密钥,更不证明授权、状态安装、解密与播放。
  • 媒体级 stkmstream 会覆盖会话级列表,因此作用域解析本身就是控制状态。
  • 流编号只需在当前 SDP 会话内唯一,脱离会话便不是持久身份。
  • SRTPAuthentication 选择 RCCm1、RCCm2 或 RCCm3,但字段本身不认证任何分组。
  • SRTPROCTxRate 声明 ROC 发送频率,缺省值为一。
  • 声明频率不证明接收端及时、经认证地收到 ROC,也不证明双方保持同步。
  • IETF/IANA 负责名称登记,而属性解释的变更控制仍属于 OMA。
  • 审计必须分别保存信令意图、实际接收、授权、安装状态、认证结果、解密与播放回执。

不含秘密的字段也能支配安全结果

安全审查常把注意力集中在密钥、令牌和加密载荷上,版本字段则容易被归入普通元数据。bcastversion 说明 BCAST 版本,表面上没有秘密,也没有直接执行密码运算。但终端读取它之后,会决定采用哪一种能力集合和处理路径。这使一个字符串获得了选择权。

RFC 5159 的安全注意事项直接指出:如果该属性没有得到保护,攻击者可以改写版本,促使系统使用旧版本。这不是“显示错误版本号”那么简单。真正的影响是接收端可能启用与发布端意图不同的协议行为,甚至选择保护更弱的路径。

因此,证明服务器生成过正确 SDP 不足以证明终端使用了正确规则。证据链至少要包括服务器原文、传输后的接收副本、完整性验证、解析结果、最终选中的能力以及随后发生的密码学结果。只保存第一项,会把发布意图错当成执行事实。

这里的治理原则适用于许多系统:凡是能够改变算法、输入、权限或回退路径的“元数据”,都应按控制输入保护。内容是否敏感,不决定它是否有权力;下游是否自动执行它,才决定风险。

密钥流映射只是路线图

广播终端面对的复用流可能很多。为了节省无线接收、耗电和处理成本,终端需要知道哪些短期密钥消息流与当前媒体有关。stkmstream 正是为此提供映射。它允许一个媒体关联一个或多个流,让终端集中处理所需控制信息。

地图不是交付回执。属性可以准确指出流 5,而流 5 的分组仍可能丢失、延迟、损坏或无法通过验证。终端可以收到消息,却没有解包密钥的权利。它可以得到密钥,却装入错误的上下文。上下文也可能已经安装,但媒体认证或解密仍然失败。

多条 stkmstream 还可能表示备选路径,或表示必须共同处理的多个流。仅仅看到多条引用,无法判断终端应任选其一还是必须收齐。操作记录需要保存选择规则和每一分支的结果,而不能把“存在引用”折算成“密钥可用”。

对于未加密媒体,该属性可以省略。由此可见,缺失也不能单独判定为故障。审计必须先判断媒体的保护状态,再解释属性是否应当存在。

覆盖规则会让同一份会话出现不同真相

stkmstream 可以出现在会话级,也可以出现在具体媒体段。媒体级值不是简单追加,而是覆盖会话级列表。这条语义决定终端最终监听什么。

假设全局声明指向流 3,而视频段改为流 8。只采集会话级字段的监控会报告流 3;把全部数字合并的工具会报告 3 和 8;遵守覆盖规则的终端则只对视频采用 8。三份记录都可能来自同一文本,只有最后一份反映有效控制状态。

更新会进一步放大差异。服务器发布新 SDP 后,终端可能仍持有缓存版本,可能收到但未应用,也可能在解析时丢失媒体作用域。服务器端的配置成功并不是端到端变更成功。必须让终端报告它实际接收的版本、解析后的有效列表以及订阅动作。

流编号本身也只在一个 SDP 会话内唯一。把 stkmstream=8 单独送入数据仓库,会丢掉编号的命名空间。另一会话可以合法地把 8 用于完全不同的流。可靠关联键应同时包含会话身份、描述版本或哈希、媒体段、作用域与时间。

算法选择不是分组认证结果

SRTPAuthentication 用数值选择 RCCm1、RCCm2 或 RCCm3。它让双方知道应使用哪一种认证方式,却没有对任何具体分组作出结论。只有接收端使用正确密钥、状态和算法处理分组后,才会产生通过或失败的回执。

SRTPROCTxRate 则规定发送端多久传输一次 rollover counter,允许 1 到 65535,属性缺失时按一处理。ROC 用于扩展较短的序列号空间。如果发送端与接收端对高位状态理解不同,即便静态配置完全一致,接收端仍可能无法正确解释后续分组。

声明“每次都发送”不证明接收端每次都收到;收到也不证明通过完整性检查;通过检查还不证明状态在需要之前完成切换。应分别记录声明值、实际控制分组、接收判决、安装后的计数器和受该状态影响的媒体认证结果。

配置符合语法,只能证明配置符合语法。它不能越过网络、授权、状态机和密码运算替下游作证。

登记名称与掌管含义是两种权力

RFC 5159 不是 IETF 标准轨文档,而是资料性文档。原因之一是相关技术来自 Open Mobile Alliance。IETF 和 IANA 为 SDP 属性提供稳定名称,避免不同实现使用冲突标记;OMA 仍保留这些属性语义的变更控制。

这是一种分层协作。登记机构可以证明某个名称被分配、格式如何记录,却不因此拥有全部技术含义,也不因此认证某个厂商实现。若要解释历史抓包,除了查看今天的 IANA 表格,还需要知道当时适用的 OMA 版本、实现配置和终端行为。

后来的 SDP 多路复用分类把 bcastversion 与 stkmstream 标为 NORMAL,而两个 SRTP 属性的类别尚未确定。该分类回答属性在捆绑媒体描述中如何处理,不是安全等级,也不是部署证明。把登记状态解读成成熟度,会再次让一个有限回执承担它没有承诺的事实。

RFC 当年提到预期用于 3GPP MBMS、3GPP2 BCMCS 和 DVB-H。那是 2008 年的设计语境,不证明某个运营商实际部署,更不证明某台终端完成过受保护播放。部署需要运行证据,播放需要终端结果。

来源

  1. RFC 5159 HTML
  2. RFC 5159 文本
  3. RFC Editor 条目
  4. IETF Datatracker 条目
  5. RFC 5159 历史
  6. RFC 5159 参考资料
  7. RFC 5159 勘误
  8. RFC 4566
  9. RFC 8866
  10. RFC 4771
  11. RFC 3711
  12. RFC 8859
  13. RFC 5761
  14. RFC 7201
  15. RFC 5764
  16. RFC 8126
  17. IANA SDP 参数表
  18. IPR 披露 2092
  19. RFC 2119
  20. RFC 8174
  21. RFC 3264
  22. 最小初始规范
  23. 论现实层
  24. 运行代码优先