Widevine — یک فناوری DRM است که توسط Google برای محافظت از محتوای ویدیویی در برابر کپیبرداری غیرمجاز در دستگاههای موبایل، Smart TV و پلتفرمهای وب توسعه یافته است. رمزگذاری محتوا از طریق ماژول CDM انجام میشود که در ۴ میلیارد دستگاه در سراسر جهان پشتیبانی میشود. فناوری Widevine سازگاری با Android، iOS، Chrome و Smart TV را فراهم میکند و به سرویسهای استریمینگ اجازه میدهد از محتوای ممتاز در هر پلتفرمی محافظت کنند.
نکات اصلی
Widevine — یک فناوری اختصاصی DRM است که توسط Google در سال ۲۰۱۰ خریداری شد و به استاندارد دوفاکتو برای حفاظت از محتوای ویدیویی در اکوسیستم Android تبدیل شد. این فناوری توسط بزرگترین سرویسهای استریمینگ از جمله Netflix، Amazon Prime Video، Disney+ و Hulu برای جلوگیری از کپیبرداری و توزیع غیرمجاز محتوا استفاده میشود.
Widevine از رمزگذاری مطابق با استاندارد AES-128 CBC با استفاده از کلیدهای محتوا پشتیبانی میکند که فقط به دستگاههای مجاز از طریق یک کانال مجوزدهی امن منتقل میشوند. این سیستم حفاظت سرتاسری را از لحظه رمزگذاری روی سرور تا رمزگشایی روی دستگاه کاربر فراهم میکند.
شرکت Widevine Technologies در سال ۱۹۹۹ تأسیس شد و در ابتدا راهحلهایی برای حفاظت از محتوا در پلتفرمهای تلویزیون کابلی توسعه میداد. پس از خرید توسط Google در سال ۲۰۱۰، این فناوری برای پلتفرمهای موبایل تطبیق داده شد و از نسخه ۴.۴ KitKat در سیستمعامل Android ادغام شد. از سال ۲۰۱۵، Widevine به یک مؤلفه اجباری گواهی Google Mobile Services تبدیل شد.
در سال ۲۰۱۸، Google Widevine Modular DRM را معرفی کرد که به تولیدکنندگان دستگاه اجازه میداد سطوح مختلف حفاظت را بدون تغییر کد سیستمعامل به صورت سختافزاری پیادهسازی کنند. امروزه Widevine Modular در بیش از ۴ میلیارد دستگاه پشتیبانی میشود و مکانیسم اصلی DRM در Android است.
معماری Widevine از سه مؤلفه کلیدی تشکیل شده است: ماژول رمزگشایی محتوا (CDM)، سرور مجوز و ابزار رمزگذاری محتوا. CDM رمزگشایی را در سمت کلient انجام میدهد و با Trusted Execution Environment (TEE) سختافزاری برای ذخیره امن کلیدها تعامل دارد.
سرور مجوز Google صدور کلیدها را بر اساس سیاستهای ارائهدهنده محتوا مدیریت میکند که محدودیتهای زمانی، تعداد دستگاهها و کیفیت پخش را تعیین میکنند. ابزار رمزگذاری محتوا را در سمت ارائهدهنده آماده میکند و آن را در قالب MPEG-DASH یا HLS با رمزگذاری CENC بستهبندی میکند.
فرآیند حفاظت از مرحله بستهبندی محتوا شروع میشود، زمانی که فایل رسانهای با استفاده از کلید محتوا روی سرور ارائهدهنده رمزگذاری میشود. جریان رمزگذاریشده از طریق CDN به دستگاه کاربر منتقل میشود، جایی که CDM از سرور مجوز درخواست مجوز میکند.
سرور مجوز اعتبار دستگاه و حق دسترسی به محتوا را بررسی میکند. اگر تأیید موفقیتآمیز باشد، سرور مجوز با کلید صادر میکند که CDM برای رمزگشایی از آن استفاده میکند. مجوز ممکن است شامل محدودیتهایی در زمان تماشا و وضوح باشد.
تبادل مجوز در Widevine از طریق پروتکل EME (Encrypted Media Extensions) در مرورگرها یا از طریق SDK در پلتفرمهای موبایل پیادهسازی میشود. درخواست مجوز توسط CDM تشکیل و از طریق HTTPS به سرور مجوز ارسال میشود که حفاظت در برابر رهگیری کلیدها در حین انتقال را تضمین میکند.
سرور درخواست را پردازش کرده و مجوزی را برمیگرداند که همچنین رمزگذاری شده و فقط توسط CDM دستگاه قابل رمزگشایی است. اتصال سختافزاری کلید به دستگاه خاص از انتقال آن به پلتفرمهای دیگر جلوگیری میکند.
Widevine از استانداردهای Common Encryption (CENC) تعریفشده در ISO/IEC 23001-7 استفاده میکند که سازگاری با فرمتهای MPEG-DASH و HLS را تضمین میکند. رمزگذاری AES-128 در حالت CTR یا CBC برای محافظت از جریانهای رسانهای اعمال میشود.
برای استخراج کلید از HKDF (HMAC-based Key Derivation Function) استفاده میشود که امکان تولید کلیدهای منحصربهفرد برای هر بخش از محتوا را فراهم میکند. پشتیبانی از HLS در Widevine از نسخه Modular 2.0 اضافه شده است که سازگاری با پلتفرمهای Apple را گسترش داد.
@Throws
fun requestLicense(): ByteArray {
val drmSessionManager = mediaDrm.createSession(
sessionId,
List("keyRequestType", "init")
)
val request = mediaDrm.getKeyRequest(
sessionId,
schemeData.get("mimeType"),
KeyType.STREAMING,
mutableMapOf()
)
return licenseService.acquire(request.data)
}
Widevine سه سطح امنیت را تعریف میکند که در نحوه اجرای عملیات رمزنگاری و پردازش محتوا متفاوت هستند. سطح L1 حداکثر حفاظت را فراهم میکند، L3 حداقل و L2 در موقعیت میانی قرار دارد.
| سطح | نوع حفاظت | نیازمندیهای دستگاه | حداکثر وضوح |
|---|---|---|---|
| L1 | سختافزاری | TEE در سطح SoC | 4K Ultra HD |
| L2 | ترکیبی | TEE برای کلیدها، نرمافزار برای ویدیو | 1080p |
| L3 | نرمافزاری | فقط CDM نرمافزاری | 720p |
سطح L1 به وجود Trusted Execution Environment (TEE) در سطح سختافزاری نیاز دارد که تمام عملیات رمزنگاری در آن اجرا میشود. کلیدهای محتوا هرگز TEE را ترک نمیکنند که استخراج آنها را حتی در صورت به خطر افتادن سیستمعامل اصلی غیرممکن میکند.
دستگاههای دارای گواهی L1 میتوانند محتوا را با کیفیت 4K و HDR پخش کنند، زیرا جریان ویدیویی رمزگشاییشده مستقیماً به خروجی ویدیوی محافظتشده بدون دسترسی فرآیندهای کاربر منتقل میشود.
سطح L3 تمام عملیات رمزنگاری را به صورت نرمافزاری در فضای معمولی کاربر اجرا میکند. این کمامنترین حالت است که در آن کلیدها میتوانند از حافظه رم دستگاه استخراج شوند.
Widevine L3 کیفیت پخش را به 720p محدود میکند که آن را برای تماشا در دستگاههای پایینرده یا مرورگرهای رومیزی بدون حفاظت سختافزاری مناسب میسازد.
fun getSecurityLevel(): String {
val mediaDrm = MediaDrm(UUID.fromString(
"edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
))
val level = mediaDrm.getPropertyString(
"securityLevel"
)
return level.ifEmpty { "L3" }
}
ادغام Widevine در برنامههای موبایل از طریق APIهای استاندارد MediaDrm (Android) و AVContentKeySession (iOS) انجام میشود. در بیشتر موارد، توسعهدهنده نیازی به کار مستقیم با DRM ندارد — کتابخانههای پخش مانند ExoPlayer و AVPlayer مجوزدهی را به صورت خودکار مدیریت میکنند.
در Android، Widevine از طریق کلاس MediaDrm ادغام میشود که دسترسی مستقیم به CDM فراهم میکند. برای برنامههای استریمینگ، توصیه میشود از ExoPlayer با ماژول DrmSessionManager استفاده کنید که به طور خودکار درخواستهای مجوز را مدیریت میکند.
هنگام مقداردهی اولیه پخشکننده، باید UUID طرح Widevine (`edef8ba9-79d6-4ace-a3c8-27dcd51d21ed`) و URL سرور مجوز ارائهشده توسط ارائهدهنده محتوا را مشخص کنید. ExoPlayer چرخه درخواست و تمدید مجوز را به طور خودکار مدیریت میکند.
val drmLicenseUrl = "https://license.service.com/wv"
val mediaItem = MediaItem.Builder()
.setUri(Uri.parse(streamUrl))
.setDrmKeyRequestUrl(drmLicenseUrl)
.setDrmKeyRequestHeaders(
mapOf("Authorization" to token)
)
.build()
val exoPlayer = ExoPlayer.Builder(context)
.build()
exoPlayer.setMediaItem(mediaItem)
exoPlayer.prepare()
در پلتفرمهای وب، Widevine از طریق Media Source Extensions (MSE) و Encrypted Media Extensions (EME) کار میکند. مرورگرهای مبتنی بر Chromium از Widevine CDM به صورت داخلی پشتیبانی میکنند و توسعهدهنده فقط باید یک جلسه EME با پیکربندی صحیح راهاندازی کند.
برای کار با Widevine در مرورگر، باید راهانداز مجوز با نوع keySystem `com.widevine.alpha` مشخص شود. پس از ایجاد نمونه MediaKeys، مرورگر به طور خودکار درخواستهای مجوز را مدیریت میکند.
در هنگام ادغام Widevine، مدیریت صحیح خطاهای مجوزدهی که در صورت عدم وجود حقوق دسترسی، انقضای اشتراک یا ناسازگاری دستگاه رخ میدهند، مهم است. خطای TYPE_EXPIRED_LICENSE نیاز به تمدید مجوز از طریق درخواست مجدد به سرور دارد و TYPE_OUTPUT_NOT_ALLOWED نشاندهنده ناسازگاری خروجی ویدیو با سیاستهای DRM است.
توصیه میشود یک مکانیسم تلاش مجدد با تأخیر نمایی برای خطاهای موقت شبکه پیادهسازی کنید و در صورت رد دائمی مجوز، پیام قابل فهمی به کاربر نشان دهید. ثبت خطاهای جلسات DRM به ارائهدهندگان محتوا کمک میکند مشکلات دستگاهها را شناسایی و سیاستها را بهینه کنند.
Widevine رقابت میکند با FairPlay از Apple و PlayReady از Microsoft، سه راهحل اصلی DRM در بازار پلتفرمهای موبایل را تشکیل میدهد. هر فناوری مزایا و محدودیتهای خود را مرتبط با اکوسیستم پلتفرم دارد.
| ویژگی | Widevine | FairPlay | PlayReady |
|---|---|---|---|
| توسعهدهنده | Apple | Microsoft | |
| پلتفرم اصلی | Android، Chrome | iOS، tvOS، Safari | Windows، Xbox، UWP |
| حداکثر سطح | L1 (4K) | معادل L1 (4K) | SL3000 (4K) |
| حفاظت سختافزاری | TEE | Secure Enclave | TPM + TEE |
انتخاب DRM به پلتفرمهای هدف برنامه بستگی دارد. برای پروژههای Android-first، Widevine انتخاب طبیعی است زیرا روی تمام دستگاههای گواهیشده با Google Mobile Services از پیش نصب شده است و هزینه مجوز اضافی ندارد.
برای پروژههای چندپلتفرمی، اغلب از رویکرد چند-DRM با استفاده از agregatorهای مجوز مانند Axinom، EZDRM و Vualto استفاده میشود که API یکپارچه برای کار با هر سه سیستم DRM فراهم میکنند. این کار پیچیدگی ادغام را کاهش داده و مدیریت مجوزها را متمرکز میکند.
سوالات متداول
Widevine — یک فناوری DRM از Google است که برای محافظت از محتوای ویدیویی دیجیتال در برابر کپیبرداری غیرمجاز طراحی شده است. سرویسهای استریمینگ از آن برای رمزگذاری ویدیو و مدیریت دسترسی به آن از طریق سیستم مجوزدهی استفاده میکنند.
Widevine از سه سطح امنیت پشتیبانی میکند: L1 با رمزگذاری سختافزاری در TEE، L2 با رویکرد ترکیبی و L3 با پیادهسازی کاملاً نرمافزاری. L1 امکان پخش محتوا در 4K را فراهم میکند، L3 به کیفیت 720p محدود است.
سطح Widevine در Android را میتوان از طریق کلاس MediaDrm با درخواست ویژگی securityLevel بررسی کرد. برای این کار یک نمونه MediaDrm با UUID Widevine ایجاد کرده و getPropertyString فراخوانی میشود، یا از برنامههای شخص ثالث مانند DRM Info استفاده میشود.
Widevine توسط Google برای Android و Chrome توسعه یافته است، در حالی که FairPlay برای iOS، tvOS و Safari است. هر دو از رمزگذاری سختافزاری و 4K پشتیبانی میکنند، اما Widevine در دستگاههای Android گستردهتر است و FairPlay استاندارد دوفاکتو در اکوسیستم Apple است.
برای استفاده از Widevine در برنامه موبایل مجوز جداگانه لازم نیست — این فناوری در دستگاههای Android و Chrome گواهیشده تعبیه شده است. هزینه فقط از ارائهدهندگان محتوا برای استفاده از سرور مجوز دریافت میشود.
نتایج
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید