Bu dokümanda, Android dijital haklar yönetimi (DRM) çerçevesine genel bir bakış sunulmaktadır ve Bir DRM eklentisinin uygulaması gereken arayüzleri tanıtır. Bu belgede bir DRM tarafından tanımlanabilecek dayanıklılık kurallarını veya uygunluk kurallarını açıklamak şema.
Çerçeve
Android platformu, genişletilebilir bir DRM çerçevesi sunar ve Uygulamalar, hakları korunan içeriği lisansa göre yönetiyor içerikle ilgili kısıtlamalardır. DRM çerçevesi birçok DRM'yi destekler planlar; cihazın hangi DRM şemalarını desteklediğini cihaz üreticisine bağlıdır. DRM çerçevesi, uygulama geliştiricileri ve DRM işlemlerinin karmaşıklığını gizler. DRM çerçevesi tutarlı bir şekilde, işlem modunun çalışma şeklini belirleyen herkes tarafından belirlenir. DRM şemaları, karmaşık kullanım modellerini lisans meta verilerine göre düzenler. DRM çerçevesi, DRM içeriği ile lisans arasındaki ilişkiyi tanımlar ve hak yönetimini yönetir. Bu, medya oynatıcının DRM korumalı veya korumasız içerik olabilir. MediaDrm'ye bakın .
.Zengin dijital içeriğin kullanılabilirliği, mobil cihaz kullanıcıları için önemlidir. Alıcı: içeriklerini yaygın bir şekilde kullanılabilir hale getirmek, Android geliştiricileri ve Yayıncılar, Android genelinde desteklenen tutarlı bir DRM uygulamasına ihtiyaç duymaktadır. bir ekosistemdir. Dijital içeriğin Android cihazlarda kullanılabilmesi ve Google, tüm cihazlarda en az bir tutarlı DRM bulunduğundan emin olun. Uyumlu Android cihazlarda lisans ücreti olmayan DRM. DRM eklentisi, Android DRM çerçevesiyle entegredir ve donanım destekli koruma kullanabilir ve kullanıcı kimlik bilgilerinin güvenliğini sağlamak için.
DRM eklentisi tarafından sağlanan içerik koruması, güvenlik içerik koruma özelliklerine sahip olması gerekir. İlgili içeriği oluşturmak için kullanılan cihazın donanım güvenliği özelliklerinin, şifreleme anahtarlarının korunması ve güvenlik açısından bir güven zinciri oluşturmalıdır. Cihazın içerik koruma özellikleri, cihazdaki şifresi çözülmüş kareler ve güvenilir bir çıkış aracılığıyla içerik koruması koruma mekanizmasıdır. Tüm donanım platformları yukarıdakilerin tümünü desteklemez güvenlik ve içerik koruma özellikleri. Güvenlik hiçbir zaman tek bir yerde toplamak yerine donanım entegrasyonuna ve hizmetleri kapsar. Donanım güvenlik işlevlerinin, güvenilir başlatma mekanizması ve güvenlik için ayrı bir güvenli işletim sistemi güvenli bir cihaz sağlamak açısından kritik öneme sahiptir.
Mimari
DRM çerçevesi uygulamadan bağımsız ve belirli DRM şeması uygulamasının ayrıntılarını şemaya özel DRM eklentisidir. DRM çerçevesi, işlenecek basit API'ler içerir. karmaşık DRM işlemleri, lisans alma, cihazın temel hazırlığını yapma, ve son olarak DRM içeriğinin şifresini çözer.
Android DRM çerçevesi iki mimari katmanda uygulanmıştır:
- Android üzerinden uygulamalara sunulan bir DRM çerçevesi API'sı çerçevesini kullanmayı öğreteceğim.
- DRM eklentileri (aracılar) için bir arayüz sunan yerel kod DRM çerçevesi .
Bkz. Android Medya DRM ve Ayrıntılı bilgi için Android Media Crypto'ya göz atın.
DRM eklentileri
Sistem başlatılırken DRM çerçevesi, HAL örneklerini/hizmetlerini tarar (.rc
dosyalarında açıklanmıştır)
ve eklentiler bulunur. Medya DRM Sunucusu (mediadrmserver
)
hem CryptoHal
hem de DrmHal
nesneleri görüntülenir.
CryptoHal
ve DrmHal
, ardından tedarikçi firma ile eklentileri çağırın.
belirli uygulamalar vardır.
Eklentiler, bağlama işlemi uygulanmış HAL'ler uygulamalıdır. Binder uygulanmış HAL'ler, Android Arayüz Tanımlama Dili (AIDL), Bu, HAL'leri yeniden oluşturmaya gerek kalmadan çerçevenin değiştirilmesine olanak tanır.
Eklentiler, tedarikçi firmalar veya SOC üreticileri tarafından oluşturulur ve /vendor
üzerine
için geçerlidir. Android 13 veya sonraki sürümlerle kullanıma sunulan tüm cihazlar, yazılan bağlayıcı HAL'leri desteklemelidir
AIDL dilinde.
Uygulama
Android 13 için GMS ve AOSP cihazlarda AIDL arayüzü kullanılmalıdır.
Bir eklenti tarafından yeni DRM çerçeveleri API'lerini uygulamak için:
- Cihazın derleme dosyalarına eklenti hizmeti ekleyin.
- Cihaz manifestini güncelleyin.
- SELinux izinlerini ekleyin.
/vendor
altında bir.rc
dosyası oluşturun.- Eklentiyi uygulayın.
API'ler her IDrmPlugin.aidl
sürümünde tanımlanmıştır.
ICryptoPlugin.aidl
IDrmFactory.aidl
,
ve ICryptoFactory.aidl
aidl/PLATFORM_ROOT/hardware/interfaces/drm/
Cihaz derleme dosyalarına eklenti hizmeti ekleme
Örneğin, AIDL arayüz desteği eklemek için
VENDOR DEVICE/device.mk
dosyası şunu içermelidir:
android.hardware.drm-service.*
paket:
PRODUCT_PACKAGES += \ android.hardware.drm-service.clearkey \ android.hardware.drm-service.widevine
Cihaz manifestini güncelleyin
Cihazı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>
KARARLI AIDL SÜRÜMÜ, her AIDL API sürümünün sürüm numarasıdır (ör. 1, 2). Alternatif olarak, vintf_parçalar.
SELinux izinleri ekleme
- Şuraya ekle:
VENDOR DEVICE/sepolicy/vendor/file.te
type mediadrm_vendor_data_file, file_type, data_file_type;
- Şuraya 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 - Şuraya ekle:
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şturun
.rc
dosyası, bir hizmet başlatıldığında yapılacak işlemleri belirtir.
Görüntüleyin Ayrıntılı bilgi için Android Init Language (Android Init Dili) başlıklı makaleyi inceleyin.
Eklentiyi uygulama
- Eklentinin
service.cpp
özelliğindemain()
giriş noktasını uygulayın geliştirmenizi sağlar. ICryptoPlugin
,IDrmPlugin
,ICryptoFactory
veIDrmFactory
.- Eklentiye yeni API'leri uygulayın.
DRM eklentisi ayrıntıları
DRM eklentisi tedarikçileri DrmFactory
, CryptoFactory
ve
DRM eklentisi.
DrmFactory
DrmHal
sınıfı, kayıtlı DRM eklenti hizmetlerini ve yapılarını arar.
DrmFactory
aracılığıyla belirli bir kripto şemasını destekleyen karşılık gelen eklentiler
sınıfını kullanır.
IDrmFactory, tedarikçinin drm HAL'si ile etkileşim kurmak için ana giriş noktasıdır . createEklentiler API'si, IDrmplugin örnekleri oluşturmak için kullanılır.
::ndk::ScopedAStatus getSupportedCryptoSchemes( std::vector<::aidl::android::hardware::drm::Uuid>* _aidl_return);
getSupportedCryptoSchemes, desteklenen kripto şemalarının listesini döndürür. AIDL drm HAL örneği için geçerlidir.
::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, desteklenen DRM eklentilerini oluşturup oluşturamayacağını belirler UUID ile belirtilen bir şifreleme şeması.
::ndk::ScopedAStatus isContentTypeSupported(const std::string& in_mimeType, bool* _aidl_return);
Eklenti fabrikasının bir
mimeType
tarafından belirtilen medya kapsayıcı biçimi.
::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.
CryptoFactory
CryptoHal
sınıfı, kayıtlı DRM eklenti hizmetlerini ve yapılarını arar.
CryptoFactory
aracılığıyla belirli bir kripto şemasını destekleyen karşılık gelen eklentiler
sınıfını kullanır.
::ndk::ScopedAStatus isCryptoSchemeSupported( const ::aidl::android::hardware::drm::Uuid& in_uuid, bool* _aidl_return);
Kripto fabrikasının bir UUID ile belirtilen şifreleme şeması.
::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 ile belirtilen şifreleme şeması.
DRM eklentisi API'leri
API'lerhardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/
VERSION/android/hardware/drm/IDrmPlugin.aidl
bölümünde tanımlanmıştır. İlgili
IDrmPlugin.h
dosyası, derlemenin ardından out/Soong içinde bulunabilir.