PlayReady 4.5 版的新功能
此頁面包含 PlayReady 4.4 版與 PlayReady 4.5 版之間最重要的變更概觀。
PlayReady 4.5 版的一般變更
使用 PlayReady 伺服器部署憑證進行挑戰加密
在舊版 PlayReady 中,授權取得和其他用戶端挑戰一律會以固定公開金鑰加密。 從 PlayReady 4.5 開始,程式碼只與支援伺服器通訊的用戶端,可能會改用由 Microsoft 核發給伺服器授權的 PlayReady Server 部署憑證隱私權加密挑戰。 PlayReady Server SDK 接著會使用對應的私密金鑰解密挑戰,並由 PlayReady Server SDK 應用程式傳遞給它,而不是固定的私密金鑰。
授權伺服器時間
在舊版 PlayReady 中,使用 Secure Time 功能通常需要用戶端應用程式與個別安全時間伺服器通訊,以取得用來設定其本機時鐘的時間。 從 PlayReady 4.5 開始,程式碼只與支援伺服器通訊的用戶端,可能會改用 PlayReady Server SDK 在取得授權期間提供的時間。 如需詳細資訊,請參閱 PlayReady 信任時鐘。
金鑰交換
使用授權取得通訊協定,PlayReady 用戶端和伺服器現在可以交換任意金鑰,以用來加密、解密、簽署及驗證使用 PlayReady 保護金鑰本身的任意應用程式提供資料。 當用戶端為 SL3000 時,金鑰本身會受到信任的執行環境保護。 如需詳細資訊,請參閱PlayReady 金鑰Exchange。
浮水印原則
已新增功能,以簡化 PlayReady 合規性規則所定義的浮水印訊號明確數位視訊輸出限制的使用。
PlayReady Server SDK 4.5 版中的變更
一般伺服器變更
金鑰Exchange授權可用來在取得授權期間提供任意金鑰給用戶端。
如果由用戶端提供,則支援的浮水印技術會公開給 PlayReady Server SDK 應用程式。 這可簡化使用 PlayReady 合規性規則所定義的浮水印 Signalling Explicit Digital Video 輸出限制。
伺服器 API 檔變更
已建立併發布 PlayReady Server SDK .NET Standard版本的新伺服器 API 檔。 Microsoft 建議移轉至 .NET Standard SDK。
PlayReady 檔套件中包含的 PlayReady.chm 檔案中的伺服器 API 檔僅適用于 PlayReady Server SDK 的舊版.NET Framework版本。 此檔現在被視為已被取代,自 PlayReady 4.0 起尚未更新,且不會收到未來的更新。
兩個 SDK 中的大部分 API 都相同,因此 .NET Standard 檔應該足以供大部分用途使用。 不過,有一些顯著的差異,其中類別、介面和方法不同。
以下是兩個 SDK 之間的一般差異。
.NET Standard SDK 會在許多位置使用介面,其中.NET Framework SDK 會使用類別。
應用程式所實作的 .NET Standard SDK 處理常式介面會使用非同步方法,其中.NET Framework SDK 使用同步方法。 因此,.Net Standard SDK 處理常式介面 API 名稱以 「Async」 這個字結尾,並傳回 Task < 類別 > ,而不是只傳回類別 (其中類別是處理常式介面方法特定的類別) 。
.NET Standard SDK 與傳輸無關。 因此,不會直接將 HTTP 內容提供給應用程式。 使用 ASP.NET Core時,請參閱 ASP.NET Core檔,特別是IHttpCoNtextAccessor 介面。
.NET Standard SDK 不支援封裝內容通訊協定 (例如 IPackagingDataAcquisitionHandler 不存在) 。 此功能將會在 PlayReady 4.6 中還原。
以下是 PlayReady 4.5 中特定差異的完整清單。 此清單不包含只存在於 .NET Standard SDK 中的功能,也不會列出將還原的所有封裝類別。
.NET Framework類別或介面 | .NET Standard 對等專案 | 差異 |
---|---|---|
ProtocolChallengeCoNtext 類別 | IProtocolChallengeCoNtext 介面 | HttpRequest Request 屬性只存在於上述.NET Framework SDK 中。 |
ProtocolChallenge 類別 | IProtocolChallenge 介面 | 無。 |
IDeleteLicenseHandler 介面 | 相同 | ProcessDeleteLicenseDataAsync 在上述.NET Framework SDK 中是同步的。 |
DeleteLicenseDataChallenge 類別 | IDeleteLicenseDataChallenge 介面 | 無。 |
IDomainHandler 介面 | 相同 | HandleJoinDomainAsync 和 HandleLeaveDomainAsync 在上述.NET Framework SDK 中是同步的。 |
JoinDomainChallenge 類別 | IDomainChallenge 和 IJoinDomainChallenge 介面 | 靜態 JoinDomainChallenge.GenerateDomainKeyPair 方法不存在於 .NET Standard SDK 中。 這項功能的遺失是 PlayReady 4.6 中將它新增為 DomainCertificateBuilder 的靜態方法來修正的 Bug。 |
LeaveDomainChallenge 類別 | ILeaveDomainChallenge 介面 | 無。 |
ILicenseAcknowledgementHandler 介面 | 相同 | HandleLicenseAcknowledgementAsync 在上述.NET Framework SDK 中是同步的。 |
LicenseAcknowledgementChallenge 類別 | ILicenseAcknowledgementChallenge 介面 | 無。 |
ILicenseAcquisitionHandler 介面 | 相同 | HandleLicenseAcquisitionAsync 在上述.NET Framework SDK 中是同步的。 |
LicenseChallenge 類別 | ILicenseChallenge 介面 | 無。 |
IMeteringHandler 介面 | 相同 | GetMeteringCertificateAsync 和 ProcessMeteringDataAsync 在上述.NET Framework SDK 中是同步的。 |
MeteringCertificateChallenge 類別 | IMeteringCertificateChallenge 介面 | 無。 |
ProcessMeteringDataChallenge 類別 | IProcessMeteringDataChallenge 介面 | 無。 |
ISecureStopHandler 介面 | 相同 | ProcessSecureStopDataAsync 在上述.NET Framework SDK 中是同步的。 |
SecureStopDataChallenge 類別 | ISecureStopDataChallenge 介面 | 採用 ISecureStop2Handler 的 GetSecureStopData 方法多載只存在於.NET Framework SDK 中。 .NET Standard SDK 會改為像任何其他一樣載入此處理程式。 |
ISecureStopHandler2 介面 | 相同 | GetSecureStop2AESKeyAsync 在上述.NET Framework SDK 中是同步的。 |
PlayReadyServerAuthorization 類別 | 相同 | 類別的方法在 .NET Standard SDK 的 .NET Framework SDK 和 實例中是靜態的。 |
伺服器 API 變更
這只是概觀。 如需詳細資訊,請參閱 伺服器 API 檔 。
當沒有新增授權時,LicenseResponse.GetLicenses 方法現在會傳回空陣列,而不是 null。
已新增下列類別和列舉。
- AdvancedLicense 類別 (抽象,繼承自 License) - MediaLicense 的現有屬性和方法子集已移至此類別,而 MediaLicense 現在繼承自 AbstractLicense。 使用 MediaLicense 不需要變更任何應用程式。
- KeyExchangeLicense 類別 (繼承自 AdvancedLicense) - 用來建立在取得授權期間為用戶端提供任意金鑰的授權。
- KeyExchangeRight 類別 (繼承自 Right) - 用來指定金鑰及其允許使用 KeyExchange 授權。
- KeyExchangeAlgorithm 列舉 - 用來指定 KeyExchange 授權中金鑰的允許使用方式。
- WatermarkVendor 類別 - 用來向應用程式公開用戶端支援的浮水印技術。
- LicenseServerTimeCertificate 類別 - 用來包含憑證,以簽署在授權取得回應中傳回的授權伺服器時間。
下列專案已新增至個別類別。
- PlayReadyHeader 類別會公開標頭是否指出每個資料流程金鑰的支援,以及它是否明確要求授權。
- ContentKeyType 列舉會新增 KeyExchange 值。
- Certificate 類別會新增位元組陣列屬性,以公開憑證的摘要和簽發者公開金鑰。
- License 類別會新增 guid 屬性,以公開授權的唯一識別碼和 IEnumerable < Right > 屬性,以傳回已新增至授權的許可權。
- LicenseChallengeTeeAPIs 列舉會為所有新的 PK 4.5 TEE API 新增值。
- LicenseChallengeReeFeatures 列舉會新增 LicenseServerTime 和 KeyExchange 的值。
- LicenseChallenge 類別會新增用戶端支援的 KeyExchangeAlgorithms 清單、用戶端支援的 WatermarkVendors、用戶端 TEE 和 REE 的 PK 版本 (,這可能或可能不相同) ,以及用戶端是否需要目前的 LicenseServerTime。
- LicenseResponse 類別會新增 LicenseServerTimeCertificate 屬性,以設定用來簽署授權取得回應中傳回的授權伺服器時間的憑證。
- ExplicitOutputRestrictionsConstants 類別會新增 Watermark 和 InternalScreenOnly 的常數。 如需這些 GUID 的詳細資訊,請參閱 PlayReady 合規性規則。
PlayReady 裝置移植套件 4.5 版中的變更
一般裝置移植套件變更
- 整個 PlayReady 裝置移植套件已更新為 Microsoft 原始程式碼注釋語言 (SAL) 2.0。
- 某些僅用於 Microsoft 內部實作的程式碼路徑已移除,以消除混淆並減少編譯時間和二進位大小。 未來版本預期會包含此領域的進一步改善。
- 基礎編譯器和機器架構支援的位置,原生 128 位整數類型現在可用來加速 ECC256 的預設實作。
- 已新增 SHA256 HMAC 演算法的預設實作。
裝置移植套件 API 變更
這只是概觀。 如需詳細資訊,請參閱 PlayReady 裝置移植套件 中相關程式碼批註中提供的 API 檔。
現在允許使用 PlayReady Server 部署憑證呼叫DRM_CDMI_SetServercertificate,以取得隱私權授權和其他用戶端挑戰。 函式會在此案例中轉送至Drm_AppCoNtext_SetProperty。 現有的使用量會維持原樣。
已新增下列公用函式:
- Drm_AppCoNtext_SetProperty
- Drm_KeyExchange_Prepare
- Drm_KeyExchange_Perform
- Drm_KeyExchange_Close
已新增下列結構:
- DRM_DGP_REE_FEATURE_LIST_4_5
- DRM_DGP_TEE_API_LIST_4_5
已新增下列 TEE API:
- DRM_TEE_BASE_GetSystemTime2
- DRM_TEE_LICPREP_PackageKey2
- DRM_TEE_LICENSESERVERTIME_ProcessResponseData
- DRM_TEE_DECRYPT_PrepareToDecrypt2
- DRM_TEE_LICGEN_CompleteLicense2
- DRM_TEE_KEYEXCHANGE_Prepare
- DRM_TEE_KEYEXCHANGE_Perform
已新增下列 OEM TEE API:
- OEM_TEE_BASE_ECC256_SetKey
- OEM_TEE_CRYPTO_SHA256_HMAC_VerifyMAC
- OEM_TEE_CRYPTO_SHA256_HMAC_CreateMAC
- OEM_TEE_PERSISTENTSTORAGE_Read
- OEM_TEE_PERSISTENTSTORAGE_Write
- OEM_TEE_GetSupportedWatermarkVendors
下列 OEM TEE API 已重新命名,但未變更功能:
舊名稱 | 新名稱 |
---|---|
OEM_TEE_DECRYPT_UnshuffleScalableContentKeys | OEM_TEE_BASE_UnshuffleScalableContentKeys |
OEM_TEE_DECRYPT_CalculateContentKeyPrimeWithAES128Key | OEM_TEE_BASE_CalculateContentKeyPrimeWithAES128Key |
OEM_TEE_DECRYPT_DeriveScalableKeyWithAES128Key | OEM_TEE_BASE_DeriveScalableKeyWithAES128Key |
OEM_TEE_DECRYPT_InitUplinkXKey | OEM_TEE_BASE_InitUplinkXKey |
OEM_TEE_DECRYPT_UpdateUplinkXKey | OEM_TEE_BASE_UpdateUplinkXKey |
OEM_TEE_DECRYPT_DecryptContentKeysWithDerivedKeys | OEM_TEE_BASE_DecryptContentKeysWithDerivedKeys |
OEM_TEE_DECRYPT_EnforcePolicy | OEM_TEE_POLICY_Enforce |