PlayReady Key Exchange
Key Exchange is the process by which arbitrary cryptographic keys (for supported algorithms), protected by PlayReady, are sent to the client from the License Server. This allows the Server to perform cryptographic operations with those keys (encrypt, decrypt, sign, verify) and the client to perform the corresponding operation (decrypt, encrypt, verify, sign) with the same keys.
Note
This feature is only supported when both the client and server are using PlayReady version 4.5 or higher.
Important
Data on which the cryptographic operation is performed is not protected by PlayReady. PlayReady only protects the cryptographic keys themselves.
Key Exchange architecture
Keys are delivered to the client via a KeyExchangeLicense, a unique type of license which can only be used for key exchange operations, during ordinary license acquisition.
Keys are protected on the client by PlayReady at the same Security Level as content keys themselves.
Important
Keys used for protection of content itself must not be sent to the client via a KeyExchangeLicense. Doing so is a violation of the PlayReady Compliance and Robustness Rules (CR&RRs).
Key Exchange licenses
A single KeyExchangeLicense contains the following
- A single cryptographic key
- Policy indicating which unique cryptographic operation (algorithm plus type, e.g. "decrypt) the client may perform
- Additional policy associated with the key such as absolute expiration
Key Exchange cryptography
On the server, a KeyExchangeLicense is generally constructed and used in the PlayReady Sever SDK like a MediaLicense with the following primary differences.
- The cryptographic key requires its cryptographic operation to be specified at the same time as said key
- Some MediaLicense policies are not supported, primarily those such as Output Protection Levels which are only relevant for playback
Refer to the KeyExchangeLicense Class documentation for more information.
On the client, a KeyExchangeLicense is used via new Drm_KeyExchange_* APIs. They enable a client to perform the following operations. Refer to the API documentation provided in the associated code comments in the PlayReady Device Porting Kit for more information.
- Bind to a KeyExchange license which verifies associated license policy
- Perform the single allowed cryptographic operation with the associated key (repeatedly, as desired)