基于DisplayPort接口的HDCP軟件實現(xiàn)及應(yīng)用
DisplayPort接口標(biāo)準(zhǔn)是由視頻電子標(biāo)準(zhǔn)協(xié)會(VESA)批準(zhǔn)的,一個開放的、可擴展的標(biāo)準(zhǔn)。其為降低PC平臺和元件的成本及推動通用數(shù)字接口而開發(fā)。DisplayPort實現(xiàn)了顯示設(shè)備用一條電纜與數(shù)字視頻信號連通的高清數(shù)字音頻,并實現(xiàn)真正即插即用的強大的互操作性,這些使現(xiàn)有的數(shù)字顯示互連非常具有成本效益。為了提高其與現(xiàn)有數(shù)字接口的互通性,DisplayPort的1.1版本增加了兼容支持高帶寬數(shù)字內(nèi)容保護(HDCP)來支持HDMI和DVI采用的HDCP技術(shù)。
本文引用地址:http://www.ex-cimer.com/article/90107.htm
圖1 DisplayPort數(shù)據(jù)傳輸通道
DisplayPort
1 DisplayPort接口
DisplayPort體積小,傳輸結(jié)構(gòu)利用了類似PCI Express的電氣層,采用“Micro-Packet Architecture(微封包架構(gòu))”傳輸架構(gòu),使視頻內(nèi)容以封包方式傳送。傳輸數(shù)據(jù)最高可支持10.8Gb/s的傳輸帶寬。
2 DisplayPort鏈路
DisplayPort鏈路由一個主鏈路、一個輔助通道(AUX CH)、一個熱插拔檢測(HPD)信號線組成。如圖1所示,主鏈路是一條單向、高帶寬并且低延時的通道,用于傳輸未經(jīng)壓縮的視頻和音頻等同步數(shù)據(jù)流。輔助通道是一條用于鏈路管理和設(shè)備控制的、半雙工的雙向通道。HPD信號用作終端設(shè)備的中斷請求信號。
HDCP技術(shù)由好萊塢與Intel合作開發(fā),保護未經(jīng)壓縮的數(shù)字音視頻內(nèi)容,適用于高速的數(shù)字視頻接口(DisplayPort、HDMI、DVI),其最新版本HDCP 1.3已經(jīng)支持DisplayPort接口采用源設(shè)備和顯示設(shè)備間直接認(rèn)證,內(nèi)容加擾實現(xiàn)保護。HDCP設(shè)計為內(nèi)容消費鏈中的最后一個環(huán)節(jié),從內(nèi)容源設(shè)備到顯示設(shè)備,HDCP不允許完全內(nèi)容拷貝行為,即拷貝控制信息CCI 只有禁止拷貝狀態(tài)。在系統(tǒng)更新方面,HDCP采用吊銷列表來屏蔽已經(jīng)被竊取的設(shè)備私鑰。
HDCP與DisplayPort
1 HDCP在DisplayPort上應(yīng)用機制
HDCP應(yīng)用于DisplayPort接口的保護機制包括以下三個元素。
?、貶DCP發(fā)送器,能立即識別下游接收器的拓?fù)溥B接結(jié)構(gòu),認(rèn)證協(xié)議會確保HDCP發(fā)送器發(fā)出的信號是HDCP接收器所授權(quán)接受的。
②DCP LLC會撤銷授權(quán)無效的HDCP接收器的授權(quán)。
?、墼谟蠬DCP保護的信號下發(fā)送與接收的同時,不斷對加密視頻傳輸?shù)耐暾赃M(jìn)行驗證。
2 HDCP結(jié)構(gòu)以及算法實現(xiàn)
①HDCP結(jié)構(gòu)
HDCP在DisplayPort接口內(nèi)容保護中采用了樹狀的拓?fù)浣Y(jié)構(gòu),為了使得完成認(rèn)證的時間在容許范圍之內(nèi),HDCP規(guī)定了一個拓?fù)浣Y(jié)構(gòu)最多允許有7層結(jié)點、128個接收設(shè)備。圖2顯示了一個設(shè)備深度為2、設(shè)備數(shù)為4的拓?fù)浣Y(jié)構(gòu)。
圖2 HDCP拓?fù)浣Y(jié)構(gòu)圖
②結(jié)合硬件采用軟件實現(xiàn)HDCP
軟件實現(xiàn)HDCP過程中,需要芯片內(nèi)部硬件加密系統(tǒng)的支持,如偽隨機數(shù)的產(chǎn)生等。硬件加密系統(tǒng)結(jié)構(gòu)如圖3所示。
圖3 硬件加密系統(tǒng)結(jié)構(gòu)
● BKSV檢驗
HDCP由發(fā)送端(Tx)發(fā)起,Tx系統(tǒng)初始化時內(nèi)部首先產(chǎn)生偽隨機數(shù)An,并將其與自身的KSV一并發(fā)給接收端(Rx),同時Tx讀取Rx的BKSV,BKSV存儲在接收端的DPCD(DisplayPort Configuration Data)地址0x68000~0x68004內(nèi),共40比特。HDCP采用了嚴(yán)密的校驗方式,每一步都有必要的驗證協(xié)議。當(dāng)讀取到BKSV后,先對BKSV進(jìn)行完整性驗證和黑名單檢測。
HDCP的“撤銷密鑰”機制用來應(yīng)對密鑰泄漏。每個設(shè)備的密鑰集KSV值都是唯一的,HDCP系統(tǒng)會在收到KSV值后在撤銷列表中進(jìn)行比較和查找,出現(xiàn)在列表中的KSV將被認(rèn)做非法,導(dǎo)致認(rèn)證過程的失敗。這里的撤銷密鑰列表將包含在HDCP對應(yīng)的多媒體數(shù)據(jù)中并將自動更新。
● 協(xié)議第一步:R0(R0’)驗證
當(dāng)KSV檢測和驗證成功后,系統(tǒng)將進(jìn)入算法認(rèn)證的第一步。其認(rèn)證協(xié)議結(jié)構(gòu)如圖4所示。
圖4 密鑰交換認(rèn)證協(xié)議圖
其中Km=∑Akeys over Bksv和Km’=∑Bkeys over Aksv 是一種密鑰選擇機制。接收端的KSV被認(rèn)為合法后,發(fā)送端和接收端都會通過自己的私鑰和相應(yīng)的KSV計算出一個56比特的公鑰Km,這里把接收端計算出的公鑰記為Km’。制造商從HDCP認(rèn)證組織Digital Content Protection LLC獲得私鑰和相應(yīng)的KSV后,會在每一個支持該功能設(shè)備中存儲這些數(shù)據(jù),Km(Km’)的計算就是通過對這些數(shù)據(jù)進(jìn)行處理后得到的。
Km(Km’)是給后續(xù)計算的準(zhǔn)備,在Km和Km’計算完成后,HDCP的加密系統(tǒng)就會根據(jù)產(chǎn)生的Km(Km’)和An以及REPEATER位來計算KS(KS’)、M0(M0’)和R0(R0’)。KS(KS’)是一個56比特的HDCP私鑰,M0(M0’)是64比特的私鑰,在HDCP認(rèn)證協(xié)議的第二步的初始化中需要該參數(shù),R0則是作為HDCP認(rèn)證協(xié)議的計算結(jié)果,發(fā)送端通過讀取接收端計算出的R0’并且與本地計算的R0比較,如果相同則意味著第一步認(rèn)證協(xié)議的成功。
● 協(xié)議第二步:中繼器認(rèn)證
在第一部分的認(rèn)證過程中,發(fā)送器在讀取接收器的BKSV同時,也讀取了DPCD中的一個REPEATER位,HDCP的第二部分是否執(zhí)行取決于該位。這一位標(biāo)志著該接收端是否為中繼器。如果接收端沒有中繼功能,HDCP會跳過該驗證部分,直接執(zhí)行認(rèn)證的第三部分鏈路完整性檢測。第二部分的認(rèn)證協(xié)議框圖如圖5所示。
圖5 中繼器認(rèn)證協(xié)議圖
當(dāng)發(fā)送端檢測到下游是中繼器設(shè)備時,立即設(shè)立起5s的超時定時器。源端設(shè)備可以通過抽樣或者等待中斷的方式來獲取中繼器的狀態(tài),而在這5s之內(nèi),中繼器就會建立自己的設(shè)備KSV列表并且計算V’(哈希算法)。如果5s之內(nèi)沒有完成這些操作,上游設(shè)備會認(rèn)為該次認(rèn)證失敗。
在中繼器內(nèi)部計算V’可以通過兩種方式來完成,由設(shè)計在芯片內(nèi)部的邏輯電路或者驅(qū)動部分軟件計算來完成。硬件計算優(yōu)點在于速度快,驅(qū)動程序設(shè)計簡單。但是犧牲了一定的硬件電路空間和芯片功耗,不同的客戶對此需求不同,所以芯片的驅(qū)動內(nèi)也需要采用軟件計算哈希算法。
安全哈希算法(Secure Hash Algorithm)是主要應(yīng)用于數(shù)字簽名標(biāo)準(zhǔn)領(lǐng)域定義的數(shù)字簽名算法。SHA1有如下特性:不能從消息摘要中復(fù)原信息;兩個不同的消息不會產(chǎn)生同樣的消息摘要。HDCP協(xié)議中V(V’)計算如下:V(V’)=SHA1(ksv_list||binfo||M0(M0’))。
KSV list存儲于中繼器DPCD地址0x6802C~0x6803A的FIFO中,F(xiàn)IFO中有15字節(jié),每個設(shè)備的KSV是40比特,也就是5字節(jié),所以FIFO中每次讀取出來的是3個設(shè)備KSV。DisplayPort的中繼器最多支持下游有127個設(shè)備,也就是說FIFO最多需要讀取127/3次。每次讀取完后硬件會自動清掉被讀走的數(shù)據(jù),同時用下一組KSV填滿。Binfo是存儲下游設(shè)備拓?fù)浣Y(jié)構(gòu)的16比特數(shù)據(jù),包括拓?fù)渖疃鹊取0(M0’)是64比特的私鑰。也就是說計算V(V’)時,系統(tǒng)傳輸給SHA1的消息長度最大為127×40+16+64=5160(0x1428H)比特,對于長度小于2^64(0x40000000000000H)位的消息,SHA1會產(chǎn)生一個160位的消息摘要。當(dāng)接收到消息的時候,這個消息摘要可以用來驗證數(shù)據(jù)的完整性。在傳輸?shù)倪^程中,數(shù)據(jù)很可能會發(fā)生變化,這時候就會產(chǎn)生不同的消息摘要。 SHA1算法只接受位輸入。字符串“KSV list||Binf||M0”消息摘要需轉(zhuǎn)換成位字符串如下:01100001 01100010 01100011……010011010(5160位),SHA1根據(jù)這個消息來計算MD5。
(a)補位
SHA1對輸入的消息必須進(jìn)行補位以使其長度在對512取模以后的余數(shù)是448。如果長度已經(jīng)滿足對512取模后余數(shù)是448,同樣需要補位。先補一個1,然后再補0,直到長度滿足對512取模后余數(shù)是448。至少補一位,最多補512位。
(b) 補長度
將原始數(shù)據(jù)的長度補到已經(jīng)進(jìn)行了補位操作的消息后面,用一個64位的數(shù)據(jù)來表示原始消息的長度。由于HDCP中的消息程度最大可達(dá)到5160位,所以需要對過長的消息進(jìn)行分塊,SHA1算法中將長度超過512位的原始消息補成512的倍數(shù)。然后將整個消息分成一個一個512位的數(shù)據(jù)塊,分別處理每一個數(shù)據(jù)塊,從而得到消息摘要。
(c)常量定義
計算中需要定義一系列的常量字M0, M1, ... , M79,如果以十六進(jìn)制給出,定義如下。
(d)函數(shù)定義
在SHA1中需要一系列的函數(shù)。每個函數(shù)ft(0≤t≤79)都操作32位字B,C,D(B,C,D為32位的函數(shù)形參)并且產(chǎn)生32位字作為輸出。ft(B,C,D)定義如下。
(e) 計算消息摘要
SHA1使用補位和補長度后的消息來計算消息摘要。計算需要兩個緩沖區(qū),每個都由5個32位的字組成,還需要一個80個32位字的緩沖區(qū)。第一個5個字的緩沖區(qū)被標(biāo)識為A,B,C,D,E。第一個5個字的緩沖區(qū)被標(biāo)記為H0, H1, H2, H3, H4。80個字的緩沖區(qū)被標(biāo)記為W0,W1,..., W79,另外還需要一個字的TEMP緩沖區(qū)。
為了產(chǎn)生消息摘要,首先處理前面定義的16個字的數(shù)據(jù)塊M1, M2,..., Mn,處理每個數(shù)據(jù)塊Mi包含80個步驟。在處理每個數(shù)據(jù)塊之前,緩沖區(qū)被初始化為下面的值(十六進(jìn)制):
處理Mi包括以下步驟:
(I)將 Mi分成16個字W0,W1,…, W15,W0是最左邊的字。
(II)對于t=16~79令
。
(III)令A(yù)=H0, B=H1, C=H2, D =H3, E=H4。
(IV)對于t=0~79,執(zhí)行下面的循環(huán)
;
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’發(fā)送給發(fā)送端,發(fā)送端通過比較本地計算的V與接收到的V’是否相等來判斷認(rèn)證結(jié)果。
● 協(xié)議第三步:加密完整性檢測
在解密過程中,HDCP在HDMI與DisplayPort中的應(yīng)用所不同。在HDMI的解密過程中,HDCP系統(tǒng)會每2s中進(jìn)行一次連接確認(rèn),同時每128幀畫面進(jìn)行一次發(fā)送端和接受端同步識別碼,確保連接的同步,所有這些都是由發(fā)送端發(fā)起。而在DisplayPort的解密過程中, DisplayPort的Link Layer負(fù)責(zé)確認(rèn)兩臺設(shè)備之間的連結(jié)效能與正確的溝通,以其參數(shù)值(0=完整、1=不完整)作為溝通的語言,該參數(shù)是發(fā)送端通過輔助通道讀取接收端的DPCD的某一位的值來獲取,也就是說,解密的完整性驗證完全是由接收端來執(zhí)行的。
DisplayPort實現(xiàn)軟件HDCP的實例
ANX9805是硅谷數(shù)模半導(dǎo)體公司設(shè)計的DisplayPort發(fā)送芯片,其完全符合DisplayPort 1.1a標(biāo)準(zhǔn),支持HDCP1.3標(biāo)準(zhǔn)和NVIDIA Upstream Protocol。
接收端使用目前市場上唯一的一款帶有DisplayPort接口的Dell顯示器3008WFP,其DP接口支持HDCP。支持HDCP的源端設(shè)備ANX9805可以通過黑屏、藍(lán)屏或者低畫質(zhì)圖像的方式使不支持HDCP或者HDCP不合法的設(shè)備無法播放音視頻數(shù)據(jù),這里采用完全藍(lán)屏的方式,如圖6、圖7所示。
圖6 軟件HDCP認(rèn)證成功的圖像
圖7 軟件HDCP認(rèn)證失敗圖像
實際測試證明通過軟件實現(xiàn)的HDCP占用時間與硬件HDCP在相鄰的數(shù)量級,在HDCP規(guī)范中規(guī)定所有認(rèn)證時間容許范圍內(nèi),所以其對硬件時序無任何影響。
結(jié)論
軟件實現(xiàn)認(rèn)證的優(yōu)勢在于其節(jié)省芯片內(nèi)部資源,從而使芯片有更高的集成度?,F(xiàn)今對IC設(shè)計集成度的要求越來越高,所以多數(shù)廠商都希望芯片提供商能給出軟件代替硬件認(rèn)證的方案。本文在充分利用硬件加密系統(tǒng)的基礎(chǔ)上實現(xiàn)了軟件對數(shù)字內(nèi)容的加密協(xié)議,使HDCP在實際應(yīng)用中有更高的靈活性和選擇性,可以根據(jù)不同要求來規(guī)劃芯片驅(qū)動結(jié)構(gòu)。實際測試表明其易于實現(xiàn),可代替部分硬件認(rèn)證模塊,整個軟件認(rèn)證過程對芯片工作流程無時序影響,具有較高的實際應(yīng)用價值。
芯片內(nèi)部的硬件認(rèn)證速度高于外部MCU通過控制寄存器來認(rèn)證的速度,所以需要通過提高M(jìn)CU與芯片之間的I2C總線速度和MCU的工作頻率來減少其時序差別,這也是有待于進(jìn)一步研究的工作。
評論