金鑰和金鑰識別碼 (KID)

PlayReady 保護的每個媒體檔案都有 PlayReady 物件 (PRO) ,其中包含 PlayReady 所需的數項資訊。 這位於檔案 的內容標頭 中,例如,也可能包含視訊和音訊播放軌的中繼資料。

在每個 PRO 中都是 PlayReady 標頭,可讓用戶端找到或取得儲存內容片段所需的資訊。 PlayReady 標頭看起來像這樣:


<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.2.0.0">
  <DATA>
    <PROTECTINFO>
      <KIDS>
        <KID ALGID="AESCTR" CHECKSUM="xNvWVxoWk04=" VALUE="0IbHou/5s0yzM80yOkKEpQ=="></KID>
        <KID ALGID="AESCTR" CHECKSUM="GnKaQIRacPU=" VALUE="/qgG2xbs4k2SKCxx6bhWqw=="></KID>
      </KIDS>
    </PROTECTINFO>
  <LA_URL>https://test.playready.microsoft.com/service/rightsmanager.asmx</LA_URL>
  </DATA>
</WRMHEADER>

感興趣的部分是包含一或多個 <KID> 元素的 <KIDS> 元素。 KID (金鑰識別碼) 包含全域唯一識別碼, (GUID) 用戶端用來要求伺服器取得對應的金鑰,然後使用 ALGID 來解密檔案。 KID 是公用的,因為它包含在 PRO 中,但金鑰本身是服務的秘密,而且金鑰與 KID 之間的關聯性只有服務才知道。

產生金鑰並加密內容

PlayReady 系統中的內容加密金鑰是 AES-128 CTR 和 AES-128 CBC 金鑰。 加密內容的服務會產生新的 KID 和新內容金鑰。 KID 會插入 PRO,而內容的視訊和音訊畫面會使用內容金鑰加密。 下圖顯示如何產生金鑰,然後用來加密內容。

 

PlayReady content encryption flow

 

有兩種方式可以產生 KID 和金鑰,包括:

  • 使用金鑰管理系統 (KMS) ,其中服務會隨機產生每個 KID 和金鑰值並加以儲存,而且可以直接查閱對應至用戶端所提供之 KID 的索引鍵值。
  • 使用 PlayReady 金鑰種子 機制。 透過這項機制,服務會決定稱為金鑰種子的常數值, (30 位元組隨機值) ,而且針對需要金鑰的每個內容片段,會產生隨機的KID。 使用伺服器 SDK,您可以藉由提供 128 位的金鑰,或金鑰種子和KID 來產生金鑰。 金鑰將由 此處指定的 PlayReady 演算法推斷。

無論您如何產生金鑰,都必須能夠確認它對應到正確的 KID,然後加密內容。

傳遞內容的授權

當用戶端提出授權要求時,會將內容的 PlayReady 標頭傳送給授權簽發者。 授權簽發者會使用上述其中一種方法來擷取 KID 並判斷對應的金鑰值,如果它使用金鑰種子機制,它只會根據 KID 和金鑰種子重新產生金鑰。 然後,它會產生包含此金鑰的授權,它會在 授權回應中傳回給用戶端。

例如,假設您有影片檔案。 此內容的套件工具會產生隨機的 KID 123 ,它會插入檔案的 PlayReady 標頭中。 封裝程式也會產生隨機索引鍵值 ABC ,以對應至 KID 123 ,並將兩者儲存在KMS中。 封裝程式會要求KMS正確的金鑰來加密檔案,並使用 金鑰 ABC 加密檔案。 當客戶嘗試播放檔案時,用戶端會要求授權簽發者取得對應至 KID 123 的授權。 授權簽發者會在KMS中查閱 KID,並使用包含金鑰 ABC 的授權回應,這可讓用戶端解除鎖定檔案,以及客戶監看檔案。

注意

授權簽發者在範例中傳送給用戶端的授權 (,包含金鑰 ABC) 的授權會加密;攻擊者無法攔截金鑰值。

用來保護媒體檔案和授權中金鑰的金鑰相同;因此,內容封裝器和授權簽發者必須能夠擷取或產生指定媒體檔案的完全相同金鑰。 若要達成此目的,如果您使用金鑰種子來產生金鑰,則必須在內容封裝工具與授權簽發者之間共用金鑰。

在檔案或追蹤之間共用金鑰

就像真實金鑰可以解除鎖定多個門一樣,技術上可以使用一個 PlayReady 金鑰來解除鎖定一個檔案中的多個曲目,甚至是資產集合中的多個檔案。 在封裝程式期間,內容封裝工具可以針對多個播放軌或多個媒體檔案指定相同的金鑰識別碼,而且相同的金鑰全都用於它們。

例如,使用具有 4K、HD 和 SD 視訊軌的多重品質視訊資產和數個音訊曲目,加密器可以彈性地為每個曲目定義一個金鑰,或為所有曲目定義一個金鑰。

用戶端需要其有權解密之每個金鑰的授權。 請注意,在單一授權回應中,授權伺服器可以完成傳遞多個授權。

在具有多個追蹤的單一資產中,所有追蹤的一個索引鍵或每個追蹤的索引鍵之間的決策是由服務管理內容,並根據下列準則來完成:

  • 更多金鑰會帶來更複雜的功能,但可讓您在授權傳遞時間指定追蹤服務想要允許特定用戶端解密的內容。
  • 較少的金鑰較複雜,但不允許在授權傳遞時間指定追蹤服務想要允許特定用戶端解密的專案。
  • 某些用戶端可能會有一些限制,因為它們不支援單一資產的多個金鑰。

注意

雖然 PlayReady 金鑰可以解除鎖定一個以上的數位媒體檔案,但 Microsoft 對此強式。 在所有檔案中使用唯一金鑰可提供比使用相同的金鑰保護檔案更高的安全性。

在授權回應中堆疊授權

單一授權回應也可以包含多個授權,因此多個金鑰可在一筆交易中解除鎖定多個檔案或追蹤。 這比為多個授權建立多個回應更有效率,因為它只牽涉到一筆交易。 這適用于不同的案例:

  • 使用多個金鑰來加密一個媒體檔案。 例如,視訊播放軌是使用 Key1 加密,而音訊播放軌則是使用 Key2 加密。 當用戶端要求為 KID1 授權時,授權伺服器會發出授權回應,包括 KID1 和KID2 的授權,因此用戶端具有解密檔案視訊和音訊播放軌的所有金鑰。
  • 相簿上的每一首歌曲都會使用不同的金鑰加密,但客戶已取得所有歌曲的許可權。 當客戶開始播放第一首歌曲時,授權伺服器會發出授權回應,包括相簿上每個歌曲的一個授權,因此用戶端有順暢播放整個相簿所需的所有金鑰。
  • 即時電視上的頻道金鑰應該每隔 24 小時變更一次。 當播放開始時,伺服器會傳送授權回應,包括目前金鑰的授權,但也傳送具有下一個金鑰的授權,因此當金鑰變更時,用戶端就會擁有下一個金鑰,而且變更會順暢地進行。

另請參閱

PlayReady 標頭規格

封裝內容