Ten dokument zawiera omówienie platformy zarządzania prawami cyfrowymi (DRM) w Androidzie przedstawia interfejsy, które musi implementować wtyczka DRM. Ten dokument nie opisywanie reguł solidności lub zgodności, które można zdefiniować przez DRM oszustw.
Platforma
Platforma Android zapewnia rozszerzoną platformę DRM, aplikacje zarządzają treściami chronionymi prawami autorskimi zgodnie z licencją ograniczeń związanych z treściami. Platforma DRM obsługuje wiele DRM. schematy; To, jakie schematy DRM obsługuje urządzenie, zależy od jego producenta. Platforma DRM zapewnia ujednolicony interfejs dla programistów aplikacji ukrywa złożoność operacji DRM. Struktura DRM zapewnia w trybie działania w przypadku treści chronionej i niechronionej. Schematy DRM złożonych modeli użytkowania według metadanych licencji. Struktura DRM zapewnia powiązanie między treściami DRM a licencją oraz zarządzanie prawami. Pozwala to na odizolowanie odtwarzacza z zabezpieczeń DRM treści niechronionej. Zobacz MediaDrm dla klasy w celu uzyskania kluczy do odszyfrowywania chronionych strumieni multimediów.
Dostępność szczegółowych treści cyfrowych jest ważna dla użytkowników urządzeń mobilnych. Do udostępniać swoje treści, deweloperom aplikacji na Androida i treści cyfrowe wydawcy potrzebują spójnej implementacji DRM w systemie Android. ekosystemu. Aby udostępniać te treści cyfrowe na urządzeniach z Androidem zapewni co najmniej jeden taki sam system DRM na wszystkich urządzeniach, DRM bez opłat licencyjnych na zgodnych urządzeniach z Androidem. Wtyczka DRM jest jest zintegrowana z platformą DRM Androida i może korzystać z zabezpieczeń sprzętowych aby zabezpieczyć treści płatne i dane logowania użytkownika.
Ochrona treści zapewniana przez wtyczkę DRM zależy od funkcji ochrony treści dostępnych na bazowej platformie sprzętowej. możliwości sprzętowe urządzenia powinny obejmować bezpieczny rozruch sprzętowy, stworzyć łańcuch zaufania w zakresie bezpieczeństwa i ochrony kluczy kryptograficznych. Możliwości ochrony treści na urządzeniu powinny obejmować ochronę: odszyfrowanych klatek na urządzeniu i w ochronie treści za pomocą zaufanych danych wyjściowych mechanizm ochrony prywatności. Nie wszystkie platformy sprzętowe obsługują wszystkie powyższe funkcje funkcje zabezpieczeń i ochrony treści. Zabezpieczenia nigdy nie są wdrażane w które są oparte na integracji sprzętowej, oprogramowania i usług. Kombinacja funkcji zabezpieczeń sprzętowych, zaufany rozruch oraz izolowany bezpieczny system operacyjny, który zapewnia bezpieczeństwo. ma kluczowe znaczenie dla zapewnienia bezpieczeństwa urządzenia.
Architektura
Struktura DRM jest zaprojektowana tak, aby nie wymagała implementacji. wyodrębnia szczegóły konkretnej implementacji schematu DRM w wtyczki DRM dla danego schematu. Platforma DRM zawiera proste interfejsy API do obsługi złożonych operacji DRM, pozyskiwania licencji, udostępniania urządzenia kojarzyć treści chronione z DRM i ich licencję, a na koniec odszyfrować treść chronioną za pomocą systemu DRM.
Struktura DRM Androida jest zaimplementowana w 2 warstwach architektonicznych:
- Interfejs API platformy DRM, który jest dostępny dla aplikacji przez Androida. struktury aplikacji.
- Natywna platforma DRM kodu, która udostępnia interfejs wtyczek DRM (agentów) do zarządzania prawami i odszyfrowywania w różnych schematach DRM.
Zobacz Androida DRM multimediów Android Media Crypto.
Wtyczki DRM
Podczas uruchamiania systemu platforma DRM skanuje pod kątem instancji/usług HAL (opisanych w plikach .rc
)
i wtyczki. Serwer DRM multimediów (mediadrmserver
) tworzy
CryptoHal
i DrmHal
.
CryptoHal
i DrmHal
wywołują wtyczki z dostawcą –
i konkretnych implementacji.
Wtyczki powinny implementować powiązane listy HAL. Powiązane interfejsy HAL używają Język definiowania interfejsu Androida (AIDL), co umożliwia zastąpienie platformy bez konieczności ponownego tworzenia list HAL.
Wtyczki są tworzone przez dostawców lub twórców SOC i umieszczane w partycji /vendor
urządzenia. Wszystkie urządzenia z Androidem 13 lub nowszym muszą obsługiwać powiązane powiązane listy HAL zapisane
w języku AIDL.
Implementacja
Urządzenia GMS i AOSP w wersji na Androida 13 muszą używać interfejsu AIDL.
Aby wdrożyć interfejsy API nowych platform DRM za pomocą wtyczki:
- Dodaj usługę wtyczek do plików kompilacji urządzenia.
- Zaktualizuj plik manifestu urządzenia.
- Dodaj uprawnienia SELinux.
- Utwórz plik
.rc
w katalogu/vendor
. - Zaimplementuj wtyczkę.
Interfejsy API są zdefiniowane w każdej wersji IDrmPlugin.aidl
,
ICryptoPlugin.aidl
, IDrmFactory.aidl
i ICryptoFactory.aidl
aidl/PLATFORM_ROOT/hardware/interfaces/drm/
Dodaj usługę wtyczek do plików kompilacji urządzenia
Aby na przykład dodać obsługę interfejsu AIDL,
plik VENDOR DEVICE/device.mk
musi zawierać
Pakiety (android.hardware.drm-service.*
):
PRODUCT_PACKAGES += \ android.hardware.drm-service.clearkey \ android.hardware.drm-service.widevine
Zaktualizuj plik manifestu urządzenia
Plik vendor manifest.xml
dotyczący urządzenia musi zawierać te pozycje:
<hal format="aidl"> <name>android.hardware.drm</name> <version>STABLE AIDL VERSION</version> <fqname>ICryptoFactory/clearkey</fqname> <fqname>IDrmFactory/clearkey</fqname> <fqname>ICryptoFactory/widevine</fqname> <fqname>IDrmFactory/widevine</fqname> </hal>
WERSJA STABLE AIDL to numer wersji każdej wersji interfejsu API AIDL (np. 1, 2). Alternatywnie zalecamy użycie vintf_fragments.
Dodaj uprawnienia SELinux
- Dodaj do:
VENDOR DEVICE/sepolicy/vendor/file.te
type mediadrm_vendor_data_file, file_type, data_file_type;
- Dodaj do:
VENDOR DEVICE/sepolicy/vendor/file_contexts
/vendor/bin/hw/android\.hardware\.drm-service\.clearkey u:object_r:hal_drm_clearkey_exec:s0
/data/vendor/mediadrm(/.*)? u:object_r:mediadrm_vendor_data_file:s0 - Dodaj do:
device/sepolicy/vendor/hal_drm_clearkey.te
vndbinder_use(hal_drm_clearkey) allow hal_drm_clearkey servicemanager:binder { call transfer }; allow hal_drm_clearkey hal_drm_service:service_manager add; allow hal_drm_clearkey { appdomain -isolated_app }:fd use; get_prop(ramdump, public_vendor_default_prop)
Tworzenie pliku RC w katalogu /vendor
Plik .rc
określa działania, które mają być wykonywane po uruchomieniu usługi.
Zobacz Język Android Init.
Implementacja wtyczki
- Zaimplementuj punkt wejścia
main()
w taguservice.cpp
wtyczki posprzedażna. - Wdróż
ICryptoPlugin
,IDrmPlugin
,ICryptoFactory
iIDrmFactory
. - Zaimplementuj nowe interfejsy API we wtyczce.
Szczegóły wtyczki DRM
Dostawcy wtyczek DRM wdrażają DrmFactory
, CryptoFactory
i
Wtyczka DRM.
DrmFactory
Klasa DrmHal
wyszukuje usługi i konstrukcje zarejestrowanych wtyczek DRM
odpowiednie wtyczki, które obsługują dany schemat kryptograficzny za pomocą protokołu DrmFactory
.
zajęcia.
IDrmFactory to główny punkt wejścia do interakcji z HAL DRM dostawcy za pomocą interfejsu API createPlugin. Interfejs createPlugin API jest używany do tworzenia instancji IDrmPlugin.
::ndk::ScopedAStatus getSupportedCryptoSchemes( std::vector<::aidl::android::hardware::drm::Uuid>* _aidl_return);
getSupportedCryptoSchemes zwraca listę obsługiwanych schematów kryptograficznych dla instancji HAL AIDL.
::ndk::ScopedAStatus isCryptoSchemeSupported( const ::aidl::android::hardware::drm::Uuid& in_uuid, const std::string& in_mimeType, ::aidl::android::hardware::drm::SecurityLevel in_securityLevel, bool* _aidl_return);
Określa, czy fabryka wtyczki może tworzyć wtyczki DRM, które obsługują danego schematu kryptograficznego określonego przez identyfikator UUID.
::ndk::ScopedAStatus isContentTypeSupported(const std::string& in_mimeType, bool* _aidl_return);
Określa, czy fabryka wtyczki może tworzyć wtyczki DRM, które obsługują
w danym formacie kontenera multimediów określony przez funkcję mimeType
.
::ndk::ScopedAStatus createPlugin( const ::aidl::android::hardware::drm::Uuid& in_uuid, const std::string& in_appPackageName, std::shared_ptr<::aidl::android::hardware::drm::IDrmPlugin>* _aidl_return);
Konstruuje wtyczkę DRM dla schematu kryptograficznego określonego przez UUID.
CryptoFactory
Klasa CryptoHal
wyszukuje usługi i konstrukcje zarejestrowanych wtyczek DRM
odpowiednie wtyczki, które obsługują dany schemat kryptograficzny za pomocą protokołu CryptoFactory
.
zajęcia.
::ndk::ScopedAStatus isCryptoSchemeSupported( const ::aidl::android::hardware::drm::Uuid& in_uuid, bool* _aidl_return);
Określa, czy fabryka kryptowalut może tworzyć wtyczki kryptograficzne obsługujące danego schematu kryptograficznego określonego przez identyfikator UUID.
::ndk::ScopedAStatus createPlugin( const ::aidl::android::hardware::drm::Uuid& in_uuid, const std::vector<uint8_t>& in_initData, std::shared_ptr<::aidl::android::hardware::drm::ICryptoPlugin>* _aidl_return);
Określa, czy fabryka wtyczek może tworzyć wtyczki kryptograficzne obsługujące danego schematu kryptograficznego określonego przez identyfikator UUID.
Interfejsy API wtyczki DRM
Interfejsy API zostały zdefiniowane whardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/
VERSION/android/hardware/drm/IDrmPlugin.aidl
. Odpowiednik
Plik IDrmPlugin.h
można znaleźć w obszarze Out/Soong po zakończeniu kompilacji.