
Bu belge, Android dijital haklar yönetimi (DRM) çerçevesine genel bir bakış sağlar ve bir DRM eklentisinin uygulaması gereken arabirimleri tanıtır. Bu belge, bir DRM şeması tarafından tanımlanabilecek sağlamlık kurallarını veya uyumluluk kurallarını açıklamamaktadır.
Çerçeve
Android platformu, uygulamaların, içerikle ilişkili lisans kısıtlamalarına göre hakları korunan içeriği yönetmesine olanak tanıyan genişletilebilir bir DRM çerçevesi sağlar. DRM çerçevesi birçok DRM şemasını destekler; bir cihazın desteklediği DRM şemaları cihaz üreticisine bağlıdır. DRM çerçevesi, uygulama geliştiricileri için birleşik bir arayüz sağlar ve DRM işlemlerinin karmaşıklığını gizler. DRM çerçevesi, korumalı ve korumasız içerik için tutarlı bir çalışma modu sağlar. DRM şemaları, lisans meta verilerine göre karmaşık kullanım modellerini tanımlayabilir. DRM çerçevesi, DRM içeriği ile lisans arasındaki ilişkiyi sağlar ve hak yönetimini yönetir. Bu, medya oynatıcının DRM korumalı veya korumasız içerikten soyutlanmasını sağlar. Korumalı medya akışlarının şifresini çözmek için anahtarları elde etmek için sınıf için MediaDrm'e bakın.


Zengin dijital içeriğin kullanılabilirliği, mobil cihazlardaki kullanıcılar için önemlidir. Android geliştiricileri ve dijital içerik yayıncıları, içeriklerini geniş çapta kullanılabilir hale getirmek için Android ekosisteminde desteklenen tutarlı bir DRM uygulamasına ihtiyaç duyar. Bu dijital içeriği Android cihazlarda kullanılabilir hale getirmek ve tüm cihazlarda kullanılabilen en az bir tutarlı DRM olduğundan emin olmak için Google, uyumlu Android cihazlarda DRM'yi lisans ücreti olmadan sağlar. DRM eklentisi, Android DRM çerçevesiyle entegredir ve premium içeriği ve kullanıcı kimlik bilgilerini güvence altına almak için donanım destekli koruma kullanabilir.
DRM eklentisi tarafından sağlanan içerik koruması, temel alınan donanım platformunun güvenlik ve içerik koruma özelliklerine bağlıdır. Cihazın donanım yetenekleri, bir güvenlik güven zinciri oluşturmak ve kriptografik anahtarların korunmasını sağlamak için donanım güvenli önyüklemeyi içermelidir. Cihazın içerik koruma yetenekleri, cihazdaki şifresi çözülen çerçevelerin korunmasını ve güvenilir bir çıktı koruma mekanizması aracılığıyla içerik korumasını içermelidir. Tüm donanım platformları, yukarıdaki güvenlik ve içerik koruma özelliklerinin tümünü desteklemez. Güvenlik hiçbir zaman yığında tek bir yerde uygulanmaz, bunun yerine donanım, yazılım ve hizmetlerin entegrasyonuna dayanır. Donanım güvenlik işlevlerinin, güvenilir bir önyükleme mekanizmasının ve güvenlik işlevlerinin ele alınması için yalıtılmış bir güvenli işletim sisteminin birleşimi, güvenli bir aygıt sağlamak için kritik öneme sahiptir.
Mimari
DRM çerçevesi, uygulamadan bağımsız olacak şekilde tasarlanmıştır ve şemaya özel bir DRM eklentisinde belirli DRM şeması uygulamasının ayrıntılarını özetler. DRM çerçevesi, karmaşık DRM işlemlerini yürütmek, lisansları almak, cihazı sağlamak, DRM içeriğini ve lisansını ilişkilendirmek ve son olarak DRM içeriğinin şifresini çözmek için basit API'ler içerir.
Android DRM çerçevesi iki mimari katmanda uygulanmaktadır:
- Android uygulama çerçevesi aracılığıyla uygulamalara maruz kalan bir DRM çerçevesi API'si.
- Çeşitli DRM şemaları için hak yönetimi ve şifre çözmeyi işlemek üzere DRM eklentileri (aracılar) için bir arabirim sunan yerel bir kod DRM çerçevesi.


Daha fazla ayrıntı için Android Media DRM ve Android Media Crypto'ya bakın.
DRM Eklentileri
Sistem başlangıcında, DRM çerçevesi HAL örneklerini/hizmetlerini ( .rc
dosyalarında açıklanmıştır) tarar ve eklentiler keşfedilir. Media DRM Sunucusu ( mediadrmserver
) hem CryptoHal
hem de DrmHal
nesneleri oluşturur. CryptoHal
ve DrmHal
daha sonra satıcıya özel uygulamalarla eklentileri çağırır.
Eklentiler, ciltlenmiş HAL'leri uygulamalıdır. Bağlanmış HAL'ler, çerçevenin HAL'leri yeniden oluşturmaya gerek kalmadan değiştirilmesine olanak tanıyan Android Arabirim Tanımlama Dili'ni (AIDL) kullanır.
Eklentiler, satıcılar veya SOC üreticileri tarafından oluşturulur ve cihazda bir /vendor
bölümüne yerleştirilir. Android 13 veya sonraki sürümlerle başlatılan tüm cihazlar, AIDL dilinde yazılmış ciltlenmiş HAL'leri desteklemelidir.
uygulama
Android 13 için GMS ve AOSP cihazlarının sürümü AIDL arayüzünü kullanmalıdır.
Bir eklenti tarafından yeni DRM çerçeveleri API'lerini uygulamak için:
- Cihazın derleme dosyalarına eklenti hizmeti ekleyin.
- Aygıt bildirimini güncelleyin.
- SELinux izinlerini ekleyin.
-
/vendor
altında bir.rc
dosyası oluşturun. - Eklentiyi uygulayın.
API'ler, IDrmPlugin.aidl
, ICryptoPlugin.aidl
, IDrmFactory.aidl
ve ICryptoFactory.aidl
her bir sürümünde tanımlanır
aidl/PLATFORM_ROOT/hardware/interfaces/drm/
Cihaz derleme dosyalarına eklenti hizmeti ekleme
Örneğin, AIDL arabirim desteği eklemek için VENDOR DEVICE /device.mk
dosyası android.hardware.drm-service.*
paketlerini içermelidir:
PRODUCT_PACKAGES += \ android.hardware.drm-service.clearkey \ android.hardware.drm-service.widevine
Cihaz bildirimini güncelleme
Aygıtın vendor manifest.xml
dosyası aşağıdaki girişleri içermelidir:
<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>
STABLE AIDL VERSION, her AIDL API sürümünün sürüm numarasıdır (örn. 1, 2). Alternatif olarak, vintf_fragments kullanmanızı öneririz.
SELinux izinleri ekleme
- SATICI CİHAZINA ekle
VENDOR DEVICE /sepolicy/vendor/file.te
type mediadrm_vendor_data_file, file_type, data_file_type;
- SATICI CİHAZINA ekle
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 -
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)
/vendor altında bir .rc dosyası oluşturma
.rc
dosyası, bir hizmet başlatıldığında yapılacak işlemleri belirtir.
Ayrıntılar için Android Init Dili'ne bakın.
Eklentiyi uygulama
- Eklenti hizmetinin
service.cpp
main()
giriş noktasını uygulayın. -
ICryptoPlugin
,IDrmPlugin
,ICryptoFactory
veIDrmFactory
. - Eklentideki yeni API'leri uygulayın.
DRM eklentisi ayrıntıları
DRM eklentisi satıcıları DrmFactory
, CryptoFactory
ve DRM eklentisini uygular.
DrmFabrika
DrmHal
sınıfı, kayıtlı DRM eklenti hizmetlerini arar ve DrmFactory
sınıfı aracılığıyla belirli bir şifreleme şemasını destekleyen ilgili eklentileri oluşturur.
IDrmFactory, bir satıcının drm HAL'i ile createPlugin API aracılığıyla etkileşim kurmak için ana giriş noktasıdır. createPlugin API, IDrmPlugin örnekleri oluşturmak için kullanılır.
::ndk::ScopedAStatus getSupportedCryptoSchemes( std::vector<::aidl::android::hardware::drm::Uuid>* _aidl_return);
getSupportedCryptoSchemes, AIDL drm HAL örneği için desteklenen şifreleme şemalarının bir listesini döndürür.
::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);
Eklenti fabrikasının, bir UUID tarafından belirtilen belirli bir şifreleme şemasını destekleyen DRM eklentileri oluşturup oluşturamayacağını belirler.
::ndk::ScopedAStatus isContentTypeSupported(const std::string& in_mimeType, bool* _aidl_return);
Eklenti fabrikasının, mimeType
tarafından belirtilen belirli bir ortam kapsayıcı biçimini destekleyen DRM eklentileri oluşturup oluşturamayacağını belirler.
::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);
UUID tarafından belirtilen şifreleme şeması için bir DRM eklentisi oluşturur.
Kripto Fabrikası
CryptoHal
sınıfı, kayıtlı DRM eklenti hizmetlerini arar ve CryptoFactory
sınıfı aracılığıyla belirli bir şifreleme şemasını destekleyen ilgili eklentileri oluşturur.
::ndk::ScopedAStatus isCryptoSchemeSupported( const ::aidl::android::hardware::drm::Uuid& in_uuid, bool* _aidl_return);
Kripto fabrikasının, bir UUID tarafından belirtilen belirli bir şifreleme şemasını destekleyen kripto eklentileri oluşturup oluşturamayacağını belirler.
::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);
Eklenti fabrikasının, bir UUID tarafından belirtilen belirli bir şifreleme şemasını destekleyen kripto eklentileri oluşturup oluşturamayacağını belirler.
DRM eklentisi API'leri
API'ler,hardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/ VERSION /android/hardware/drm/IDrmPlugin.aidl
. Karşılık gelen IDrmPlugin.h
dosyası, derlemeden sonra out/Soong'da bulunabilir.