基于DisplayPort接口的HDCP软件实现及应用
扫描二维码
随时随地手机看文章
DisplayPort接口标准是由视频电子标准协会(VESA)批准的,一个开放的、可扩展的标准。其为降低PC平台和元件的成本及推动通用数字接口而开发。DisplayPort实现了显示设备用一条电缆与数字视频信号连通的高清数字音频,并实现真正即插即用的强大的互操作性,这些使现有的数字显示互连非常具有成本效益。为了提高其与现有数字接口的互通性,DisplayPort的1.1版本增加了兼容支持高带宽数字内容保护(HDCP)来支持HDMI和DVI采用的HDCP技术。
图1 DisplayPort数据传输通道
DisplayPort
1 DisplayPort接口
DisplayPort体积小,传输结构利用了类似PCI Express的电气层,采用“Micro-Packet Architecture(微封包架构)”传输架构,使视频内容以封包方式传送。传输数据最高可支持10.8Gb/s的传输带宽。
2 DisplayPort链路
DisplayPort链路由一个主链路、一个辅助通道(AUX CH)、一个热插拔检测(HPD)信号线组成。如图1所示,主链路是一条单向、高带宽并且低延时的通道,用于传输未经压缩的视频和音频等同步数据流。辅助通道是一条用于链路管理和设备控制的、半双工的双向通道。HPD信号用作终端设备的中断请求信号。
HDCP
HDCP技术由好莱坞与Intel合作开发,保护未经压缩的数字音视频内容,适用于高速的数字视频接口(DisplayPort、HDMI、DVI),其最新版本HDCP 1.3已经支持DisplayPort接口采用源设备和显示设备间直接认证,内容加扰实现保护。HDCP设计为内容消费链中的最后一个环节,从内容源设备到显示设备,HDCP不允许完全内容拷贝行为,即拷贝控制信息CCI 只有禁止拷贝状态。在系统更新方面,HDCP采用吊销列表来屏蔽已经被窃取的设备私钥。
HDCP与DisplayPort
1 HDCP在DisplayPort上应用机制
HDCP应用于DisplayPort接口的保护机制包括以下三个元素。
①HDCP发送器,能立即识别下游接收器的拓扑连接结构,认证协议会确保HDCP发送器发出的信号是HDCP接收器所授权接受的。
②DCP LLC会撤销授权无效的HDCP接收器的授权。
③在有HDCP保护的信号下发送与接收的同时,不断对加密视频传输的完整性进行验证。
2 HDCP结构以及算法实现
①HDCP结构
HDCP在DisplayPort接口内容保护中采用了树状的拓扑结构,为了使得完成认证的时间在容许范围之内,HDCP规定了一个拓扑结构最多允许有7层结点、128个接收设备。图2显示了一个设备深度为2、设备数为4的拓扑结构。
图2 HDCP拓扑结构图
②结合硬件采用软件实现HDCP
软件实现HDCP过程中,需要芯片内部硬件加密系统的支持,如伪随机数的产生等。硬件加密系统结构如图3所示。
图3 硬件加密系统结构
● BKSV检验
HDCP由发送端(Tx)发起,Tx系统初始化时内部首先产生伪随机数An,并将其与自身的KSV一并发给接收端(Rx),同时Tx读取Rx的BKSV,BKSV存储在接收端的DPCD(DisplayPort Configuration Data)地址0x68000~0x68004内,共40比特。HDCP采用了严密的校验方式,每一步都有必要的验证协议。当读取到BKSV后,先对BKSV进行完整性验证和黑名单检测。
HDCP的“撤销密钥”机制用来应对密钥泄漏。每个设备的密钥集KSV值都是唯一的,HDCP系统会在收到KSV值后在撤销列表中进行比较和查找,出现在列表中的KSV将被认做非法,导致认证过程的失败。这里的撤销密钥列表将包含在HDCP对应的多媒体数据中并将自动更新。
● 协议第一步:R0(R0’)验证
当KSV检测和验证成功后,系统将进入算法认证的第一步。其认证协议结构如图4所示。
图4 密钥交换认证协议图
其中Km=∑Akeys over Bksv和Km’=∑Bkeys over Aksv 是一种密钥选择机制。接收端的KSV被认为合法后,发送端和接收端都会通过自己的私钥和相应的KSV计算出一个56比特的公钥Km,这里把接收端计算出的公钥记为Km’。制造商从HDCP认证组织Digital Content Protection LLC获得私钥和相应的KSV后,会在每一个支持该功能设备中存储这些数据,Km(Km’)的计算就是通过对这些数据进行处理后得到的。
Km(Km’)是给后续计算的准备,在Km和Km’计算完成后,HDCP的加密系统就会根据产生的Km(Km’)和An以及REPEATER位来计算KS(KS’)、M0(M0’)和R0(R0’)。KS(KS’)是一个56比特的HDCP私钥,M0(M0’)是64比特的私钥,在HDCP认证协议的第二步的初始化中需要该参数,R0则是作为HDCP认证协议的计算结果,发送端通过读取接收端计算出的R0’并且与本地计算的R0比较,如果相同则意味着第一步认证协议的成功。
● 协议第二步:中继器认证
在第一部分的认证过程中,发送器在读取接收器的BKSV同时,也读取了DPCD中的一个REPEATER位,HDCP的第二部分是否执行取决于该位。这一位标志着该接收端是否为中继器。如果接收端没有中继功能,HDCP会跳过该验证部分,直接执行认证的第三部分链路完整性检测。第二部分的认证协议框图如图5所示。
图5 中继器认证协议图
当发送端检测到下游是中继器设备时,立即设立起5s的超时定时器。源端设备可以通过抽样或者等待中断的方式来获取中继器的状态,而在这5s之内,中继器就会建立自己的设备KSV列表并且计算V’(哈希算法)。如果5s之内没有完成这些操作,上游设备会认为该次认证失败。
在中继器内部计算V’可以通过两种方式来完成,由设计在芯片内部的逻辑电路或者驱动部分软件计算来完成。硬件计算优点在于速度快,驱动程序设计简单。但是牺牲了一定的硬件电路空间和芯片功耗,不同的客户对此需求不同,所以芯片的驱动内也需要采用软件计算哈希算法。
安全哈希算法(Secure Hash Algorithm)是主要应用于数字签名标准领域定义的数字签名算法。SHA1有如下特性:不能从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要。HDCP协议中V(V’)计算如下:V(V’)=SHA1(ksv_list||binfo||M0(M0’))。
KSV list存储于中继器DPCD地址0x6802C~0x6803A的FIFO中,FIFO中有15字节,每个设备的KSV是40比特,也就是5字节,所以FIFO中每次读取出来的是3个设备KSV。DisplayPort的中继器最多支持下游有127个设备,也就是说FIFO最多需要读取127/3次。每次读取完后硬件会自动清掉被读走的数据,同时用下一组KSV填满。Binfo是存储下游设备拓扑结构的16比特数据,包括拓扑深度等。M0(M0’)是64比特的私钥。也就是说计算V(V’)时,系统传输给SHA1的消息长度最大为127×40+16+64=5160(0x1428H)比特,对于长度小于2^64(0x40000000000000H)位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,这时候就会产生不同的消息摘要。 SHA1算法只接受位输入。字符串“KSV list||Binf||M0”消息摘要需转换成位字符串如下:01100001 01100010 01100011……010011010(5160位),SHA1根据这个消息来计算MD5。
(a)补位
SHA1对输入的消息必须进行补位以使其长度在对512取模以后的余数是448。如果长度已经满足对512取模后余数是448,同样需要补位。先补一个1,然后再补0,直到长度满足对512取模后余数是448。至少补一位,最多补512位。
(b) 补长度
将原始数据的长度补到已经进行了补位操作的消息后面,用一个64位的数据来表示原始消息的长度。由于HDCP中的消息程度最大可达到5160位,所以需要对过长的消息进行分块,SHA1算法中将长度超过512位的原始消息补成512的倍数。然后将整个消息分成一个一个512位的数据块,分别处理每一个数据块,从而得到消息摘要。
(c)常量定义
计算中需要定义一系列的常量字M0, M1, ... , M79,如果以十六进制给出,定义如下。
(d)函数定义
在SHA1中需要一系列的函数。每个函数ft(0≤t≤79)都操作32位字B,C,D(B,C,D为32位的函数形参)并且产生32位字作为输出。ft(B,C,D)定义如下。
(e) 计算消息摘要
SHA1使用补位和补长度后的消息来计算消息摘要。计算需要两个缓冲区,每个都由5个32位的字组成,还需要一个80个32位字的缓冲区。第一个5个字的缓冲区被标识为A,B,C,D,E。第一个5个字的缓冲区被标记为H0, H1, H2, H3, H4。80个字的缓冲区被标记为W0,W1,..., W79,另外还需要一个字的TEMP缓冲区。
为了产生消息摘要,首先处理前面定义的16个字的数据块M1, M2,..., Mn,处理每个数据块Mi包含80个步骤。在处理每个数据块之前,缓冲区被初始化为下面的值(十六进制):
处理Mi包括以下步骤:
(I)将 Mi分成16个字W0,W1,…, W15,W0是最左边的字。
(II)对于t=16~79令
。
(III)令A=H0, B=H1, C=H2, D =H3, E=H4。
(IV)对于t=0~79,执行下面的循环
;
E=D; D=C; C=S30(B); B=A; A=TEMP;
(V)令H0=H0+A,H1=H1+B, H2=H2+C, H3=H3+D, H4=H4+E
在处理完所有的Mn后,得到一个160位的字符串,也就是最后得到的V(V’)。中继器会将V’发送给发送端,发送端通过比较本地计算的V与接收到的V’是否相等来判断认证结果。
● 协议第三步:加密完整性检测
在解密过程中,HDCP在HDMI与DisplayPort中的应用所不同。在HDMI的解密过程中,HDCP系统会每2s中进行一次连接确认,同时每128帧画面进行一次发送端和接受端同步识别码,确保连接的同步,所有这些都是由发送端发起。而在DisplayPort的解密过程中, DisplayPort的Link Layer负责确认两台设备之间的连结效能与正确的沟通,以其参数值(0=完整、1=不完整)作为沟通的语言,该参数是发送端通过辅助通道读取接收端的DPCD的某一位的值来获取,也就是说,解密的完整性验证完全是由接收端来执行的。
DisplayPort实现软件HDCP的实例
ANX9805是硅谷数模半导体公司设计的DisplayPort发送芯片,其完全符合DisplayPort 1.1a标准,支持HDCP1.3标准和NVIDIA Upstream Protocol。
接收端使用目前市场上唯一的一款带有DisplayPort接口的Dell显示器3008WFP,其DP接口支持HDCP。支持HDCP的源端设备ANX9805可以通过黑屏、蓝屏或者低画质图像的方式使不支持HDCP或者HDCP不合法的设备无法播放音视频数据,这里采用完全蓝屏的方式,如图6、图7所示。
图6 软件HDCP认证成功的图像
图7 软件HDCP认证失败图像
实际测试证明通过软件实现的HDCP占用时间与硬件HDCP在相邻的数量级,在HDCP规范中规定所有认证时间容许范围内,所以其对硬件时序无任何影响。
结论
软件实现认证的优势在于其节省芯片内部资源,从而使芯片有更高的集成度。现今对IC设计集成度的要求越来越高,所以多数厂商都希望芯片提供商能给出软件代替硬件认证的方案。本文在充分利用硬件加密系统的基础上实现了软件对数字内容的加密协议,使HDCP在实际应用中有更高的灵活性和选择性,可以根据不同要求来规划芯片驱动结构。实际测试表明其易于实现,可代替部分硬件认证模块,整个软件认证过程对芯片工作流程无时序影响,具有较高的实际应用价值。
芯片内部的硬件认证速度高于外部MCU通过控制寄存器来认证的速度,所以需要通过提高MCU与芯片之间的I2C总线速度和MCU的工作频率来减少其时序差别,这也是有待于进一步研究的工作。