Delen via


PlayReady-inhoudsversleuteling

Dit onderwerp bevat een overzicht van de versleutelingsalgoritmen die worden gebruikt om inhoud in het PlayReady-ecosysteem te beveiligen.

Opmerking

Zie Woordenlijst voor versleutelingstermen en -definities.

Basisbeginselen van versleuteling

Symmetrische sleutelcryptografie is het eenvoudigste type versleuteling. Met symmetrische sleutelcryptografie wordt dezelfde sleutel gebruikt om de inhoud te versleutelen en te ontsleutelen. Symmetrische sleutelalgoritmen zijn meestal klein en snel. Normaal gesproken wordt het grootste deel van elke versleutelingstaak verwerkt door een vorm van symmetrische sleutelversleuteling.

Openbare-sleutelcryptografie gebruikt daarentegen een gepubliceerde openbare sleutel om te versleutelen en een andere, geheime, persoonlijke sleutel om te ontsleutelen. Dus als gebruiker "A" gebruiker "B" een openbare sleutel geeft, kan B inhoud voor A versleutelen zonder andere informatie. Ongeacht hoe de inhoud wordt verzonden, kan alleen A deze lezen. Inhoudsinterceptors hebben niet de persoonlijke sleutel (geheime sleutel) en kunnen het bericht niet ontsleutelen. Omdat de openbare sleutel openbaar beschikbaar wordt gemaakt, kan iedereen versleutelen voor A, maar alleen A kan ontsleutelen. Voor openbare-sleutelcryptografie zijn rekenkundige complexe algoritmen vereist.

Elliptische curvecryptografie (ECC) is een algoritme voor openbare sleutelcryptografie dat wordt gebruikt voor het versleutelen en ontsleutelen van inhoud. Het is een rekenkundige complexe functie die een elliptische curve beschrijft. Onderdelen van dit algoritme worden gedeeld als een openbare sleutel. Andere onderdelen, die worden gebruikt voor ontsleuteling, vormen de persoonlijke sleutel.

OMAC (One-Key Message Authentication Codes ) is een code voor berichtverificatie die is samengesteld op basis van een blokcodering. Er zijn twee OMAC-algoritmen, OMAC1 en OMAC2.

Certificaten worden gebruikt om echtheid te garanderen voor entiteiten die niet worden vertrouwd. De afzender van een certificaat ondertekent de naam (apparaat-id) met behulp van de persoonlijke sleutel. De ontvanger van het certificaat verifieert vervolgens de handtekening van het certificaat met de openbare sleutel van de afzender om de identiteit van de afzender te garanderen. Omdat de afzender de enige eigenaar van de persoonlijke sleutel is, is het moeilijk om een persoonlijke sleutel te maken op basis van een openbare sleutel en wordt het certificaat niet correct geverifieerd, tenzij het is ondertekend met de persoonlijke sleutel; In dit geval wordt ervan uitgegaan dat de gegevensbron juist is en gecertificeerde communicatie veilig is.

PlayReady-versleutelingsalgoritmen

Symmetrische algoritmen

De volgende AES-versleutelingsmodi worden ondersteund:

  • AES 128 CTR-modus - PlayReady-systemen kunnen bestanden en streams beveiligen waarbij de voorbeelden volledig zijn versleuteld of waarbij alleen een patroon van de voorbeelden is versleuteld, in de CTR-modus van de bewerking. Deze omvatten de Common Encryption-modi 'cenc' (Common Encryption Scheme) en 'cens' (Common Encryption Scheme met behulp van een patroon van niet-versleutelde/versleutelde bytes), die zijn gedefinieerd in ISO/IEC 23001-7.

  • AES 128 CBC-modus : PlayReady-systemen vanaf versie 4.0 kunnen bestanden en streams beveiligen die volledig of gedeeltelijk zijn versleuteld met een AES 128-inhoudssleutel in de CBC-modus. Deze omvatten de Common Encryption-modi 'cbc1' en 'cbcs' zoals gedefinieerd in ISO/IEC 23001-7, en elke andere indeling die is versleuteld met een AES 128-inhoudssleutel in de CBC-modus.

Opmerking

PlayReady-systemen met versie 1.X, 2.X en 3.X kunnen alleen bestanden beveiligen die zijn versleuteld in de CTR-modus (Common Encryption mode 'cenc'). 'cens' wordt niet ondersteund. PlayReady-systemen met versie 4.0 en hoger kunnen bestanden beveiligen die zijn versleuteld in de CTR-modus (Common Encryption modes 'cenc') en in CBC-modus (Common Encryption modes 'cbcs'). De andere modi 'cens' en 'cbc1' worden niet ondersteund.

ECC-algoritmen

Microsoft PlayReady-systemen maken gebruik van ECC (elliptische curvecryptografie) voor het versleutelen van inhoudssleutels en ondertekeningsprotocolberichten.

  • ECC ElGamal-algoritme : gebruikt voor versleutelde inhoudssleutels.
  • ECDSA (Elliptic Curve Digital Signature Algorithm) - Wordt gebruikt voor het ondertekenen van berichten waar van toepassing in de PlayReady-protocollen.
  • NIST — Microsoft PlayReady-systemen maken gebruik van standaard NIST-algoritmen voor ECC-versleuteling, indien van toepassing en maakt momenteel gebruik van de P-256 elliptische curve.

Ondertekeningsalgoritmen

Voor ondertekeningslicenties, tijdelijke sleutels of gegevens gebruiken PlayReady-systemen AES OMAC1, wat gelijk is aan CMAC (op cipher gebaseerde berichtverificatiecode) en in mei 2005 een NIST-aanbeveling is geworden. Sleutels worden willekeurig gegenereerd, maar gegevens worden gehasht met SHA256 en vervolgens wordt de hash ondertekend met ECC256.

Overwegingen voor uitvoeringstijd en prestaties

Wanneer het afspelen van inhoud wordt geactiveerd, moet de PlayReady-client enkele stappen uitvoeren voordat het afspelen in eerste instantie kan worden gestart. Dit omvat het vinden van een licentie, binding of interpretatie van de licentie, het ontsleutelen van de inhoudssleutel en ten slotte het voorbereiden op het ontsleutelen van de inhoud. Het duurt even voordat de PlayReady-clientstack een licentie aan een deel van de inhoud bindt. Deze bewerking is vereist voordat de inhoudsontsleuteling en -rendering wordt gestart. Dit betekent dat de tijd die nodig is om een licentie te koppelen van invloed is op de tijd tot het eerste beeld wanneer een afspeelfase begint of de pauze tussen nummers. De clientontwikkelaar en de applicatieontwikkelaar willen misschien overwegen hun code te optimaliseren voor runtime en prestatieoptimalisatie, om de tijd tot het eerste frame te verminderen en naadloos afspelen mogelijk te maken.

Beveiligde containers gebruiken symmetrische sleutelversleuteling om het grootste deel van de inhoud te versleutelen. Openbare-sleutelversleuteling wordt echter binnen de licentie gebruikt. Dit komt doordat de licentie de symmetrische sleutel van de inhoud bevat en de server de openbare sleutel van de client gebruikt om de symmetrische sleutel van de inhoud te versleutelen.

Wanneer het tijd is om de inhoud te ontsleutelen, wordt de persoonlijke sleutel van de client gebruikt om de symmetrische sleutel van de licentie te ontsleutelen. Alleen de client waaraan de licentie is gebonden, kan de symmetrische sleutel extraheren.

Ontsleuteling van privésleutels vereist meer rekenkracht dan symmetrische ontsleuteling; daardoor is het interpreteren van de licentie rekenintensief. Zodra de licentie correct is verwerkt, wordt de symmetrische sleutel ontsleuteld en kan de inhoud worden ontsleuteld met behulp van kleine en snelle algoritmen.

Voor toepassingen of apparaten die in middelen beperkt zijn, vereist het opstartproces aanzienlijke tijd en middelen. Zodra dat is voltooid, worden de resources echter vrijgemaakt, kan ontsleuteling efficiënt worden voortgezet en zijn er weinig CPU-cycli of systeembronnen vereist.