(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的工作频率来减少其时序差别,这也是有待于进一步研究的工作。