解決DRM 部署所面臨的障礙
如果 ROM 啟動加載程序確定用戶啟動加載程序遭到篡改,那么設(shè)備將進入災(zāi)難恢復模式。災(zāi)難恢復模式是 DRM 的重要組成部分。首先,該設(shè)備必須通知用戶設(shè)備將不能再回放內(nèi)容(即沒有損壞設(shè)備,但需要再配置),并解釋如何成功地完成設(shè)備再配置。不能低估這一步驟的重要性,因為用戶一發(fā)現(xiàn)設(shè)備不能回放內(nèi)容就會撥打技術(shù)支持電話并支付昂貴的費用,用戶要是對此不滿,甚至會向經(jīng)銷商退貨。
此外,設(shè)備中存儲的密秘機制還會通過其它方式被破壞。舉例來說,使用的 DRM 標準會提供一定的機制,以使內(nèi)容提供商能夠“撤銷”設(shè)備或者 OEM 廠商,或者通過其它方式禁用用戶使用受損內(nèi)容或硬件的權(quán)限。通過支持災(zāi)難恢復功能,設(shè)備內(nèi)置了用于固件升級的安全機制,這樣 OEM 廠商就能用新的安全機制來替換設(shè)備上未被禁用的機制。當然,設(shè)備必須能夠確保任何替換代碼影像或加密機制更新都具有值得信賴的來源。
請注意,災(zāi)難恢復也許并不是 ROM 啟動加載程序的專屬職責,但除了啟動災(zāi)難恢復之外,ROM 啟動加載程序的作用有限,比方說其不能通過 USB 下載影像。正是由于此原因,也不應(yīng)該修改用戶啟動加載程序,這樣才能確保災(zāi)難恢復代碼不會損壞,從而使設(shè)備能從故障中有效恢復。
將啟動進程分為若干個階段有不同的作用。首先,這能讓開發(fā)人員更方便地對設(shè)備專用和應(yīng)用專用代碼進行分組。不過,更重要的是,將啟動過程分為若干階段能減少設(shè)備啟動過程中用戶所能感知的時延。我們不妨設(shè)想,確認代碼的延遲通常與代碼影像的大小成正比(不過并不僅與影像大小有關(guān)),代碼影像越大,確認所需的時間就越長。應(yīng)用代碼確認時,用戶不得不對著空白的、沒有響應(yīng)的屏幕發(fā)呆,甚至會懷疑是不是電池沒電了。
采用分散式用戶啟動加載程序并分階段載入應(yīng)用使設(shè)備能更快地與用戶互動。比方說,用戶啟動加載程序完成后,就會立即在屏幕上顯示“醒目”頁面,以便讓用戶總體上感覺到設(shè)備的響應(yīng)要快一些,并確信設(shè)備已經(jīng)開啟。甚至應(yīng)用啟動影像本身也可分為不同的階段。用戶界面功能可分階段載入執(zhí)行,比方說先載入用戶界面代碼,再載入數(shù)據(jù)庫,這樣用戶就能訪問列表中可用的內(nèi)容,用戶可以在大部分應(yīng)用啟動加載程序(如現(xiàn)在還不需要的 DRM 功能)不斷確認并進行后臺載入的同時就開始選擇待播放的內(nèi)容。如果必須同時確認整個應(yīng)用代碼,那么在應(yīng)用代碼確認結(jié)束、信息顯示在屏幕上之前可能要花上數(shù)十秒鐘的時間。
硬盤運行
優(yōu)化加密功能可提高性能,不過,如前所述改善啟動時間時延問題的關(guān)鍵在于將啟動功能進行良好的計劃安排,與其它工作同時進行,這樣就能通過后臺啟動。同樣的原理也有助于降低不同操作之間用戶所能感知到的延遲,比方說選歌與聽歌之間的時延就會感到縮短。最小化延遲對改進總體用戶體驗至關(guān)重要。
圖 2a 顯示了播放前一般的 DRM 確認內(nèi)容進程。驗證內(nèi)容與驗證代碼的不同之處在于,許可證、密鑰或散列信息可能沒有與受保護的內(nèi)容存儲在一起,而是存儲在數(shù)據(jù)庫中。比方說,用戶的許可證限制了某首歌曲能被播放的次數(shù),超過這個次數(shù)許可證就會過期。這就會增加一系列驗證工作的額外步驟,因為用戶的播放列表可能很龐大(比方說一個文件夾中的音樂容量就達 20GB),因此我們必須生成支持索引功能的數(shù)據(jù)庫,這樣才能實現(xiàn)快速查找。
播放前的內(nèi)容驗證
圖 2a 顯示了播放之前驗證內(nèi)容的一般 DRM 進程。在本例中,所有 DRM 處理都位于關(guān)鍵路徑中,這就會導致時延最大化。
優(yōu)化數(shù)據(jù)庫搜索要求開發(fā)人員在性能、存儲器占用以及電池使用壽命之間進行平衡取舍?;蛟S,影響上述因素的最重要考慮就是確定某項操作是否需要對硬盤進行存取。硬盤是便攜式媒體播放器最大的耗電因素,甚至比顯示屏的耗電量還大。不是所有 PMP 都具有硬盤,不過不使用硬盤的設(shè)備其存儲空間要小得多,因而其數(shù)據(jù)庫也更小,更易于管理。
節(jié)省電量的最佳策略之一就是最大限度地減少硬盤必須加速轉(zhuǎn)動的次數(shù)。我們可以將硬盤存取集中在一起,而不是播放三首歌曲就要讓硬盤從播放列表中載入三次。系統(tǒng)可以提前預計用戶接下來在播放列表中最可能播放的歌曲,并同時載入三首歌曲。如果預計錯誤(用戶選擇其它歌曲播放),那么預取其它歌曲所用的電量就會被浪費掉。但是,執(zhí)行預取所耗的電量相對于硬盤額外轉(zhuǎn)動所耗電量來說非常小,從長遠來看還是非常省電的。
上述策略也可應(yīng)用于數(shù)據(jù)庫檢索。根據(jù)數(shù)據(jù)庫大小的不同,我們有時可以將數(shù)據(jù)庫整個都存儲在存儲器中,這樣存取數(shù)據(jù)庫就不需要操作硬盤了。在啟動時就將數(shù)據(jù)庫存入存儲器,其所發(fā)生的更改都存入存儲器中,隔一段時間才向硬盤傳輸。通常播放器有 10到 20 MB 的預取緩沖器容量,足夠用于 10 到 40 分鐘的音頻。在緩沖器中存儲數(shù)據(jù)庫會減少內(nèi)容播放所需的存儲容量,但這樣無需執(zhí)行硬盤,從而顯著縮短了檢索時間。請注意,由于存儲器中也載入了許可證數(shù)據(jù)庫,因此系統(tǒng)能在執(zhí)行硬盤前將數(shù)首歌的加密功能進行排序,而不是在硬盤轉(zhuǎn)動時進行加密計算,而讓寫入磁頭處于空閑狀態(tài)。但是,將所有許可證都存于 RAM 中會大幅降低設(shè)備的安全可靠性,因此這種做法應(yīng)當避免。
我們不妨設(shè)想這樣一種情況,當用戶首次啟動播放器時,閃屏立即出現(xiàn),然后出現(xiàn)可用的播放列表。用戶考慮先播放哪首歌曲花的時間通常已足夠該應(yīng)用來完成加載任務(wù)。如果用戶快速選擇了播放的歌曲,那么就載入第一首歌的數(shù)據(jù)及其許可證,并對這些信息進行評估然后開始操作,這樣就能最大限度地縮短用戶欣賞到音樂所需的時間。
這時,由于設(shè)備還沒有機會進行預取,所有 DRM 處理都位于主處理路徑上。不過,在播放第一首歌時,播放器可將許可證數(shù)據(jù)庫下載至存儲器,這樣播放器就能為播放列表中接下來的歌曲預先處理許可證密鑰,并預取適當?shù)那俊_@樣,大多數(shù) DRM 處理任務(wù)都能在后臺得到高效地計劃安排,毫不影響用戶的欣賞體驗,而且還能盡可能減少對硬盤的存取(見圖 2b)。
數(shù)據(jù)庫的可靠性
評論