Udostępnij za pośrednictwem


PlayReady Szyfrowanie Treści

Ten temat zawiera omówienie algorytmów szyfrowania używanych do ochrony zawartości w ekosystemie PlayReady.

Uwaga / Notatka

Zobacz Słownik terminów i definicji szyfrowania.

Podstawy szyfrowania

Kryptografia klucza symetrycznego jest najprostszym typem szyfrowania. W przypadku kryptografii klucza symetrycznego ten sam klucz jest używany do szyfrowania zawartości i odszyfrowywania jej. Algorytmy kluczy symetrycznych są zwykle małe i szybkie. Zazwyczaj większość zadań szyfrowania jest obsługiwana przez jakąś formę szyfrowania klucza symetrycznego.

Kryptografia klucza publicznego, z kolei, używa opublikowanego klucza publicznego do szyfrowania i innego, tajnego klucza prywatnego do odszyfrowywania. W związku z tym, jeśli użytkownik "A" daje użytkownikowi "B" klucz publiczny, B może zaszyfrować zawartość dla A bez żadnych innych informacji. Niezależnie od sposobu przesyłania zawartości tylko element A będzie mógł go odczytać. Przechwytywacze zawartości nie posiadają klucza prywatnego (klucza tajnego) i nie są w stanie odszyfrować wiadomości. Ponieważ klucz publiczny jest dostępny w sposób otwarty, każdy może szyfrować dane dla elementu A, ale tylko A może odszyfrować. Kryptografia klucza publicznego wymaga obliczeniowo złożonych algorytmów.

Kryptografia krzywej eliptycznej (ECC) to algorytm kryptografii klucza publicznego używany do szyfrowania i odszyfrowywania zawartości. Jest to funkcja obliczeniowa, która opisuje krzywą wielokropkową. Składniki tego algorytmu są udostępniane jako klucz publiczny. Inne składniki używane do odszyfrowywania tworzą klucz prywatny.

Kody uwierzytelniania komunikatów o jednym kluczu (OMAC) to kod uwierzytelniania komunikatów skonstruowany na podstawie szyfrowania blokowego. Istnieją dwa algorytmy OMAC, OMAC1 i OMAC2.

Certyfikaty są używane do zapewnienia autentyczności jednostek, które nie są zaufane. Nadawca certyfikatu podpisuje swoją nazwę (identyfikator urządzenia) przy użyciu klucza prywatnego. Następnie odbiorca certyfikatu weryfikuje podpis certyfikatu przy użyciu klucza publicznego nadawcy, aby zapewnić tożsamość nadawcy. Ponieważ nadawca jest jedynym właścicielem klucza prywatnego, trudno jest utworzyć klucz prywatny przy użyciu klucza publicznego, a certyfikat nie zostanie zweryfikowany poprawnie, chyba że jest podpisany przy użyciu klucza prywatnego; w tym przypadku przyjmuje się, że źródło danych jest poprawne, a certyfikowana komunikacja jest bezpieczna.

Algorytmy szyfrowania PlayReady

Algorytmy symetryczne

Obsługiwane są następujące tryby szyfrowania AES:

  • Tryb AES 128 CTR — systemy PlayReady mogą chronić pliki i strumienie, w których próbki są szyfrowane w całości, lub gdzie tylko część próbek jest szyfrowana, w trybie CTR. Obejmują one tryby "cenc" (wspólny schemat szyfrowania) i "cens" (wspólny schemat szyfrowania przy użyciu wzorca niezaszyfrowanych/zaszyfrowanych bajtów), które są zdefiniowane w normie ISO/IEC 23001-7.

  • Tryb AES 128 CBC — systemy PlayReady począwszy od wersji 4.0 mogą chronić pliki i strumienie, które są w pełni lub częściowo zaszyfrowane przy użyciu klucza AES 128 do zawartości w trybie operacji CBC. Należą do nich tryby Common Encryption "cbc1" i "cbcs" zdefiniowane w standardzie ISO/IEC 23001-7 oraz dowolny inny format, który jest szyfrowany przy użyciu klucza zawartości AES 128 w trybie CBC.

Uwaga / Notatka

Systemy PlayReady w wersji 1.X, 2.X i 3.X mogą chronić tylko pliki zaszyfrowane w trybie CTR (tryb szyfrowania wspólnego "cenc"). Wartość "cens" nie jest obsługiwana. Systemy PlayReady w wersji 4.0 i nowszej mogą chronić pliki zaszyfrowane w trybie CTR (tryby wspólnego szyfrowania "cenc") i w trybie CBC (tryby wspólnego szyfrowania "cbcs"). Inne tryby "cens" i "cbc1" nie są obsługiwane.

Algorytmy ECC

Systemy Microsoft PlayReady używają kryptografii ECC (kryptografii krzywych eliptycznych) do szyfrowania kluczy zawartości oraz podpisywania komunikatów protokołu.

  • Algorytm ElGamal ECC — używany dla zaszyfrowanych kluczy zawartości.
  • ECDSA (algorytm podpisu cyfrowego krzywej eliptycznej) — używany do podpisywania komunikatów wszędzie tam, gdzie ma zastosowanie w protokołach PlayReady.
  • NIST — systemy Microsoft PlayReady używają standardowych algorytmów NIST do szyfrowania ECC, jeśli ma to zastosowanie i obecnie używają krzywej eliptycznej P-256.

Algorytmy podpisywania

W przypadku podpisywania licencji, kluczy przejściowych lub danych systemy PlayReady używają systemu AES OMAC1, który jest odpowiednikiem kodu uwierzytelniania komunikatów opartych na protokole CMAC (kod uwierzytelniania komunikatów opartych na szyfrach) i został zaleceniem NIST w maju 2005 r. Klucze są generowane losowo, ale dane są szyfrowane przy użyciu algorytmu SHA256, a następnie skrót jest podpisany przy użyciu ecC256.

Zagadnienia dotyczące środowiska uruchomieniowego i wydajności

Po wyzwoleniu odtwarzania zawartości klient PlayReady musi wykonać kilka kroków przed rozpoczęciem początkowego odtwarzania. Obejmuje to znalezienie licencji, powiązania lub interpretowanie licencji, odszyfrowywanie klucza zawartości, a na koniec przygotowanie do odszyfrowania zawartości. Stos klienta PlayReady wymaga czasu na powiązanie licencji z zawartością, a ta operacja jest wymagana przed rozpoczęciem odszyfrowywania i renderowania zawartości. Oznacza to, że czas związany z powiązaniem licencji ma wpływ na czas pierwszej ramki podczas rozpoczęcia odtwarzania lub przerwę między utworami. Deweloper klienta, a także deweloper aplikacji, może chcieć rozważyć optymalizację swojego kodu pod kątem kwestii związanych z pracą programu i wydajnością, aby skrócić czas do pierwszej klatki i umożliwić odtwarzanie bez przerw.

Kontenery chronione używają szyfrowania klucza symetrycznego do szyfrowania zbiorczej zawartości. Jednak szyfrowanie klucza publicznego jest używane w ramach licencji. Dzieje się tak, ponieważ licencja zawiera klucz symetryczny zawartości, a serwer używa klucza publicznego klienta do szyfrowania klucza symetrycznego zawartości.

Gdy nadszedł czas na odszyfrowanie zawartości, klucz prywatny klienta jest używany do odszyfrowywania klucza symetrycznego z licencji. Tylko klient, do którego jest powiązana licencja, może wyodrębnić klucz symetryczny.

Odszyfrowywanie kluczy prywatnych jest bardziej intensywnie obliczeniowe niż odszyfrowywanie symetryczne; w związku z tym interpretowanie licencji jest intensywnie obciążające obliczenia. Po prawidłowym obsłużeniu licencji, klucz symetryczny jest odszyfrowany, a zawartość może być odszyfrowana za pomocą małych i szybkich algorytmów.

W przypadku aplikacji lub urządzeń, które są ograniczone przez zasoby, uruchamianie wymaga znacznego czasu i zasobów. Po zakończeniu, zasoby są uwolnione, odszyfrowywanie może przebiegać wydajnie, a jedynie kilka cykli CPU lub zasobów systemowych jest wymaganych.