HDMI HDCP加密认证与链路故障调试 - 第2节
2. HDCP核心架构:发送端(TX)与接收端(RX)角色定义
好,咱们直接切入正题。HDCP这套协议,说白了就是一套「谁可以看,谁不可以看」的认证机制。整个体系里只有两种角色:发送端(TX)和接收端(RX)。
我刚开始接触HDCP时,以为TX就是播放器,RX就是显示器。后来踩了坑才发现——没那么简单。你想想看,一个机顶盒既能输出画面给电视(此时它是TX),又能接收手机投屏(此时它又是RX)。同一个设备,角色可以切换。
2.1 发送端(TX)的核心职责
TX的任务很明确:保护内容,直到它安全到达合法的RX手里。
- 发起认证:TX主动向RX发送认证请求,验证对方是否持有合法密钥
- 加密内容:使用会话密钥对音视频流进行AES-128加密
- 管理密钥:维护全局密钥、设备密钥,并在每次会话中生成唯一的会话密钥
- 检测篡改:周期性检查RX的回应,防止中间人攻击
重要:TX必须实现「永不发送未加密内容」的硬逻辑。我在项目中见过一个bug——TX在认证失败后,竟然回退到了明文传输。这直接违反了HDCP规范,流片回来才发现,改都没法改。
2.2 接收端(RX)的核心职责
RX相对被动,但绝不是「躺平」的角色。它需要证明自己是合法的。
- 响应认证:收到TX的挑战后,用设备密钥计算并返回回应值
- 解密内容:使用协商好的会话密钥解密数据流
- 报告状态:向TX反馈链路完整性信息
- 限制输出:如果RX本身也是中继设备,它必须保证下游设备同样合法
个人经验:RX的密钥存储是个大坑。我曾经遇到一款芯片,设备密钥竟然存储在可读的Flash区域。攻击者只要用逻辑分析仪就能把密钥dump出来。嗯,后来我们改成了OTP(一次性可编程)存储,才算安心。
3. HDCP系统拓扑结构(树形级联)
单个TX对单个RX,那是理想情况。现实中,一个播放器可能连着一个功放,功放再连电视——这就是级联。
HDCP支持最多7级级联,且总设备数不能超过127个。为什么是7级?我记得当初看规范时,他们给出的理由是「延迟和密钥管理复杂度的平衡」。说白了,级联太深,认证延迟会大到影响用户体验。
3.1 树形拓扑的特点
- 根节点:最上游的TX,通常是播放器或PC显卡
- 中间节点:既是RX又是TX的设备,比如功放、HDMI切换器
- 叶子节点:最终的显示设备,只做RX
每个中间节点都要维护两张表:一张是上游的父设备信息,一张是下游的子设备列表。我见过一个实现,中间节点在子设备热插拔时没有及时更新密钥表,导致整个链路认证失败。排查了三天,最后发现是链表操作漏了个free()。
避坑指南:我曾经在级联超过5层时遇到过「认证超时」的问题。原因是每个节点都要做完整的AKSV交换和密钥派生,累积延迟超过了HDCP规定的100ms上限。解决方案是优化密钥派生算法,把软件计算改成硬件加速。
4. 密钥体系概览(全局密钥/设备密钥/会话密钥)
HDCP的密钥体系,我习惯把它比作「三层门禁」:
- 全局密钥:整栋大楼的万能钥匙,所有合法设备都知道
- 设备密钥:每个房间的独立门禁卡,设备出厂时烧录
- 会话密钥:每次开门时生成的临时密码,用完即弃
4.1 全局密钥(Global Key)
全局密钥由HDCP LLC(授权机构)保管,所有合法设备都预置了同一份。它主要用于加密传输设备密钥。
| 密钥名称 | 长度 | 用途 |
|---|---|---|
| 全局常量(ksv) | 40位 | 设备身份标识 |
| 全局私钥 | 56位 | 加密设备密钥 |
注意:全局密钥一旦泄露,整个HDCP体系就废了。2010年就发生过一次大规模泄露,HDCP 1.x的全局密钥被公开,导致大量设备需要升级到2.x。嗯,这就是为什么现在HDCP 2.2改用公钥体系了。
4.2 设备密钥(Device Key)
每个设备出厂时,会从HDCP LLC申请一组唯一的设备密钥。这组密钥包含:
- 设备私钥:40位,存储在安全区域,不可读取
- 设备证书:包含公钥和数字签名,用于认证
我在项目中遇到过最头疼的问题——设备密钥的备份。有些客户要求支持「密钥恢复」功能,但HDCP规范明确禁止导出设备私钥。最后我们只能设计了一个硬件安全模块(HSM),在芯片内部做密钥备份和恢复,外部完全不可见。
4.3 会话密钥(Session Key)
每次建立HDCP连接时,TX和RX会协商出一个临时会话密钥。这个密钥只对当前会话有效,断开连接后立即销毁。
会话密钥的生成过程:
// 伪代码:会话密钥派生
session_key = AES_128(device_private_key, random_nonce)
// 其中random_nonce由TX生成,每次会话不同
个人建议:会话密钥的随机数生成器一定要用硬件真随机数发生器(TRNG)。我见过用软件伪随机数发生器的实现,结果每次上电后生成的nonce序列都一样——攻击者只要录一次就能重放攻击。你说这多危险?
知识体系总览
下面这张图,是我自己整理的核心架构关系。你看一眼就能明白TX、RX、密钥体系是怎么串起来的:
这张图里,你从左往右看:TX发起认证,经过中继节点转发,最终到达RX。而密钥体系贯穿始终——全局密钥负责「你是谁」,设备密钥负责「你从哪里来」,会话密钥负责「这次会话安全吗」。
嗯,核心架构就这些。下一节我们会深入AKSV交换的具体流程,到时候我会拿一个实际抓包的数据来演示。
可可精品资料库