DRM trong ứng dụng di động: nền tảng, sơ đồ bảo vệ và nguyên lý hoạt động

Tác giả: IT Sectr Đã đăng: 2026-05-24 Thời gian đọc: 11 phút

DRM (Quản lý quyền kỹ thuật số) là một tập hợp các công nghệ bảo vệ nội dung số khỏi sao chép và phân phối trái phép. Trong các ứng dụng di động, DRM được sử dụng để mã hóa video, âm thanh và sách điện tử, đảm bảo tuân thủ các thỏa thuận cấp phép giữa chủ sở hữu quyền và người tiêu dùng. Theo Google Widevine Documentation, 2026, DRM được tích hợp trong hầu hết các dịch vụ phát trực tuyến — Netflix, Spotify, Apple TV+ — và bắt buộc để phân phối hợp pháp nội dung cao cấp.

Những điểm chính

  • DRM (Quản lý quyền kỹ thuật số) — công nghệ bảo vệ bản quyền bằng cách hạn chế sao chép và phân phối nội dung số.
  • Ba sơ đồ chính: Widevine (Google), FairPlay (Apple), PlayReady (Microsoft) — thống trị các nền tảng di động.
  • Widevine hoạt động trên Android và iOS qua CDM, hỗ trợ ba cấp độ bảo mật: L1, L2, L3.
  • FairPlay của Apple sử dụng máy chủ KSM để tạo khóa và được tích hợp trong AVFoundation trên iOS và macOS.
  • Giải mã DRM diễn ra ở cấp độ trình phát đa phương tiện — nhà phát triển nhận luồng video sẵn sàng qua ExoPlayer hoặc AVPlayer.

DRM là gì?

DRM là tập hợp các phương pháp mã hóa và phần mềm kiểm soát quyền truy cập vào nội dung số. Không giống như mã hóa đơn giản, DRM bao gồm hệ thống cấp phép: nội dung được mã hóa và để xem cần có khóa chỉ được cấp sau khi xác minh quyền của người dùng.

Mục đích chính của DRM là ngăn chặn vi phạm bản quyền và đảm bảo tuân thủ các hạn chế khu vực. Nếu không có DRM, chủ sở hữu nội dung (hãng phim, hãng thu âm) sẽ không cấp phép nội dung của họ cho các nền tảng phát trực tuyến. Theo Hiệp hội Điện ảnh (MPA, 2025), việc sử dụng DRM đã giảm 62% việc phân phối phim bất hợp pháp trên nền tảng phát trực tuyến so với thời kỳ DVD-rip.

Trong phát triển di động, DRM được nhúng ở cấp độ trình phát đa phương tiện: nhà phát triển sử dụng ExoPlayer (Android), AVPlayer (iOS) hoặc Shaka Player (Web), hỗ trợ giải mã tích hợp luồng được mã hóa. Nhà phát triển không cần triển khai mã hóa — chỉ cần tích hợp SDK để cấp phép.

DRM và CENC (Mã hóa chung)

Tiêu chuẩn CENC (Mã hóa chung — ISO/IEC 23001-7) cho phép sử dụng một tệp phương tiện được mã hóa cho tất cả các hệ thống DRM. Nội dung được mã hóa một lần và các khóa được phân phối qua các máy chủ cấp phép khác nhau. Điều này rất quan trọng đối với các dịch vụ đa nền tảng: Netflix mã hóa một bộ phim một lần và phân phối đến Android (Widevine), iOS (FairPlay) và Windows (PlayReady) mà không cần mã hóa lại.

CENC sử dụng mã hóa CBC với các khóa khác nhau cho luồng âm thanh và video. Mỗi khóa được lưu trữ dưới dạng mã hóa trong tệp kê khai MPD (MPEG-DASH) hoặc M3U8 (HLS). Mã định danh nội dung (KID) liên kết luồng được mã hóa với giấy phép trên máy chủ — không có giấy phép hợp lệ, khóa không thể được giải mã.

Cách DRM hoạt động trong ứng dụng di động

Quy trình phát lại DRM bao gồm bốn giai đoạn: tải tệp kê khai, lấy giấy phép, giải mã nội dung và hiển thị. Mỗi giai đoạn được thực hiện bởi các thành phần khác nhau của hệ thống — trình phát đa phương tiện, mô-đun CDM và máy chủ cấp phép.

  • Tải tệp kê khai — trình phát nhận MPD (DASH) hoặc M3U8 (HLS) với siêu dữ liệu về các phân đoạn được mã hóa, sơ đồ mã hóa và URL máy chủ cấp phép.
  • Yêu cầu giấy phép — trình phát chuyển mã định danh nội dung (KID) đến Mô-đun giải mã nội dung (CDM), mô-đun này tạo yêu cầu đến máy chủ cấp phép.
  • Lấy khóa — máy chủ xác minh quyền của người dùng (đăng ký, khu vực, thiết bị) và trả về khóa được mã hóa bằng khóa công khai của thiết bị.
  • Giải mã luồng — CDM giải mã khóa bằng khóa riêng của thiết bị và chuyển nó đến trình phát đa phương tiện để giải mã các phân đoạn video theo thời gian thực.

Mô-đun giải mã nội dung (CDM)

CDM là một mô-đun phần mềm hoặc phần cứng được bảo vệ thực hiện giải mã nội dung. Trên Android, CDM được triển khai ở cấp API MediaDrm; trên iOS, nó được tích hợp trong AVFoundation qua AVContentKeySession. CDM không bao giờ tiết lộ khóa cho ứng dụng — tất cả các hoạt động mã hóa được thực hiện bên trong môi trường an toàn (TEE — Môi trường thực thi tin cậy).

Trên các thiết bị có hỗ trợ phần cứng (Cấp độ bảo mật 1), CDM hoạt động bên trong TEE — khóa không bao giờ vào bộ nhớ chính của thiết bị. Đây là yêu cầu của các hãng phim để phát nội dung 4K HDR. Trên các thiết bị không có TEE, khóa được giải mã bằng phần mềm (L3), làm giảm bảo mật và giới hạn chất lượng tối đa ở 540p.

Các sơ đồ DRM chính

Ba hệ thống DRM thống trị các nền tảng di động. Mỗi hệ thống độc quyền cho hệ sinh thái của mình, nhưng tất cả đều hỗ trợ CENC, cho phép sử dụng một luồng nội dung được mã hóa duy nhất trên tất cả các nền tảng.

DRMNhà phát triểnNền tảngChất lượng tối đaBảo vệ phần cứng
WidevineGoogleAndroid, Chrome, Android TV4K HDR (L1)TEE (L1)
FairPlayAppleiOS, iPadOS, macOS, tvOS4K HDR (iOS)Secure Enclave
PlayReadyMicrosoftWindows, Xbox, Windows Phone4K (SL3000)TPM + TEE

Chọn DRM cho dịch vụ đa nền tảng

Đối với dịch vụ phát trực tuyến hoạt động trên tất cả các nền tảng, cần hỗ trợ cả ba hệ thống DRM. Một giải pháp thực tế là sử dụng CDN hỗ trợ đa DRM (Muvi, Vualto, Axinom), tự động định tuyến các yêu cầu cấp phép đến máy chủ thích hợp dựa trên thiết bị của người dùng. Theo Trung tâm Học tập Phát trực tuyến (2025), 78% dịch vụ phát trực tuyến sử dụng phương pháp Đa DRM.

Tiêu chuẩn MPEG-DASH với CENC đơn giản hóa kiến trúc: nội dung được mã hóa một lần bằng khóa chia sẻ và hệ thống DRM được chọn ở phía máy khách. Máy chủ cấp phép nhận yêu cầu với mã định danh thiết bị và trả về khóa được mã hóa cho CDM cụ thể. Không có sự khác biệt về nội dung cho các nền tảng khác nhau — chỉ khác máy chủ cấp phép.

Widevine: cấp độ và tính năng

Widevine là hệ thống DRM của Google, tiêu chuẩn thực tế trên Android. Nó hỗ trợ ba cấp độ bảo mật xác định nơi và cách thức giải mã nội dung được thực hiện. Cấp độ bảo mật phụ thuộc vào khả năng phần cứng của thiết bị và xác định độ phân giải tối đa của nội dung.

Cấp độ bảo mật Widevine

Widevine L1 (phần cứng) — cấp độ an toàn nhất. Tất cả các hoạt động mã hóa được thực hiện bên trong Môi trường thực thi tin cậy (TEE). Khóa không bao giờ rời khỏi khu vực an toàn. Thiết bị L1 có thể phát nội dung lên đến 4K HDR. Cần có chứng nhận của Google — một quy trình mà các thiết bị hàng đầu phải trải qua.

Widevine L3 (phần mềm) — giải mã được thực hiện trong bộ nhớ chính của thiết bị. Kẻ tấn công có kỹ thuật có thể trích xuất khóa. Độ phân giải bị giới hạn ở 540p (960x540) cho nội dung cao cấp. Tất cả thiết bị Android đều hỗ trợ L3, ngay cả khi không được chứng nhận cho L1.

Widevine L2 — cấp độ trung gian hiếm gặp, nơi giải mã được thực hiện trong TEE nhưng kết xuất đi qua đường dẫn không được bảo vệ. Được sử dụng trên một số TV thông minh. Hầu như không có trên thiết bị di động.

Cách xác định cấp độ Widevine trên thiết bị

kotlin
import android.media.MediaDrm
import android.media.UUID

fun checkWidevineLevel(): String {
    val widevineUuid = UUID.fromString("edef8ba9-79d6-4ace-a3c8-27dcd51d21ed")
    val mediaDrm = MediaDrm(widevineUuid)

    val securityLevel = mediaDrm.getPropertyString(
        MediaDrm.PROPERTY_SECURITY_LEVEL
    )

    return when (securityLevel) {
        "L1" -> "Widevine L1 — bảo vệ phần cứng"
        "L3" -> "Widevine L3 — bảo vệ phần mềm"
        else -> "Widevine $securityLevel"
    }
}

Phương thức truy vấn CDM cho thuộc tính securityLevel qua UUID Widevine. Giá trị trả về là chuỗi L1, L2 hoặc L3, cho biết cấp độ bảo vệ hiện tại của thiết bị. Thông tin này rất quan trọng đối với các dịch vụ phát trực tuyến: nếu thiết bị chỉ có L3, không thể hiển thị nội dung 4K.

Apple FairPlay: kiến trúc và nguyên lý hoạt động

FairPlay là hệ thống DRM của Apple, được tích hợp trong tất cả các nền tảng hệ sinh thái: iOS, iPadOS, macOS, tvOS và watchOS. Không giống như Widevine, FairPlay không có cấp độ bảo mật — bảo vệ được xác định bởi thiết bị. Trên iOS với Secure Enclave, FairPlay cung cấp mức bảo vệ tương đương với Widevine L1.

FairPlay hoạt động độc quyền với giao thức HLS (HTTP Live Streaming). Nội dung được đóng gói thành các phân đoạn .ts (MPEG-TS) hoặc mảnh .m4s (fMP4). Tệp kê khai M3U8 chứa thẻ #EXT-X-KEY với URI máy chủ cấp phép (KSM — Mô-đun máy chủ khóa) và IV khởi tạo. Khi bắt đầu phát lại, AVPlayer đọc tệp kê khai và yêu cầu khóa qua AVContentKeySession.

Tích hợp FairPlay Streaming

swift
import AVFoundation

let contentKeySession = AVContentKeySession(keySystem: fairPlayStreaming)
let player = AVPlayer(playerItem: playerItem)
contentKeySession.setDelegate(self, queue: delegateQueue)

func contentKeySession(
    _ session: AVContentKeySession,
    didProvide keyRequest: AVContentKeyRequest
) {
    let assetId = keyRequest.identifier as! String
    sendLicenseRequest(assetId) { licenseData in
        keyRequest.processContentKeyResponse(
            AVContentKeyResponse(fairPlayStreamingKeyResponseData: licenseData)
        )
    }
}

Ủy quyền AVContentKeySession nhận yêu cầu khóa với mã định danh nội dung (assetId). Ứng dụng gửi ID này đến máy chủ cấp phép (KSM), máy chủ này trả về khóa đã mã hóa. Lệnh gọi processContentKeyResponse chuyển khóa đến CDM để giải mã. Nếu giấy phép không hợp lệ (hết hạn, chưa thanh toán), máy chủ trả về lỗi 403 và AVPlayer không bắt đầu phát lại.

Tải khóa liên tục cho nội dung ngoại tuyến

FairPlay hỗ trợ khóa liên tục — lưu giấy phép trên thiết bị để xem ngoại tuyến. Sau khi nhận được khóa, ứng dụng gọi processContentKeyResponse với cờ allowsPersistableKey. Khóa được lưu trữ trong Keychain và có thể được sử dụng mà không cần liên hệ với máy chủ khi phát lại sau đó. Tuy nhiên, giấy phép ngoại tuyến có thời hạn hiệu lực giới hạn — thường 7–30 ngày, sau đó cần gia hạn.

Giấy phép ngoại tuyến được lưu trữ trong bộ nhớ được bảo vệ của iOS — Keychain. Khi có nỗ lực jailbreak hoặc trích xuất bãi rác, Secure Enclave sẽ phá hủy các khóa. Theo Apple (2025), công nghệ khóa liên tục được sử dụng trong Apple TV+, Netflix và Disney+ để tải nội dung xuống iPad trước chuyến đi.

Microsoft PlayReady cho bảo vệ toàn diện

PlayReady là DRM của Microsoft, được sử dụng trên Windows, Xbox và Windows Phone cũ. Mặc dù PlayReady ít phổ biến trên thiết bị di động hơn Widevine và FairPlay, nhưng nó quan trọng đối với các giải pháp phát trực tuyến toàn diện hoạt động trên tất cả các nền tảng Microsoft. PlayReady hỗ trợ cả bảo vệ phần mềm và phần cứng qua TPM.

PlayReady sử dụng kiến trúc SL (Cấp độ bảo mật): SL2000 (phần mềm, tương tự Widevine L3), SL3000 (phần cứng, tương tự L1). Trên Xbox Series X, PlayReady SL3000 hoạt động qua TEE+TPM — các khóa chỉ được trích xuất trong môi trường được bảo vệ. Điều này cho phép phát 4K Blu-ray trên bảng điều khiển mà không có nguy cơ sao chép.

Theo Microsoft Docs (2026), PlayReady hỗ trợ CENC và có thể hoạt động với MPEG-DASH qua Media Source Extensions (MSE) trong trình duyệt Edge. Đối với ứng dụng di động trên Android và iOS, PlayReady có sẵn qua SDK nhưng hiếm khi được sử dụng — chủ yếu cho ứng dụng doanh nghiệp và dịch vụ đa phương tiện của Microsoft.

PlayReady Native SDK cho Android

Microsoft cung cấp PlayReady Native SDK cho Android và iOS. Việc tích hợp được thực hiện qua ExoPlayer với tiện ích mở rộng PlayReady: nhà phát triển thêm PlayReadyRenderer, được nhúng vào chuỗi giải mã. ExoPlayer tự động chuyển đổi giữa Widevine và PlayReady tùy thuộc vào DRM được chỉ định trong tệp kê khai MPD.

Mặc dù PlayReady hiếm khi được sử dụng trong ứng dụng di động, hỗ trợ của nó là bắt buộc đối với các dịch vụ trong hệ sinh thái Microsoft — ví dụ: nền tảng đào tạo doanh nghiệp trên SharePoint và Stream. Theo Microsoft (2025), PlayReady được sử dụng trong 23% giải pháp đa phương tiện doanh nghiệp so với 62% của Widevine.

Tích hợp DRM vào ứng dụng di động

Tích hợp DRM vào ứng dụng di động không yêu cầu viết mã mã hóa — nhà phát triển làm việc với trình phát hỗ trợ DRM nguyên bản. Hãy xem tích hợp trên Android qua ExoPlayer với tiện ích mở rộng DRM.

Thiết lập ExoPlayer với hỗ trợ Widevine

kotlin
val drmSessionManager = DefaultDrmSessionManager.Builder()
    .setUuidAndExoMediaDrmProvider(
        C.WIDEVINE_UUID,
        FrameworkMediaDrm.DEFAULT_PROVIDER
    )
    .setMultiSession(true)
    .build(mediaDrmCallback)

val mediaItem = MediaItem.Builder()
    .setUri(mpdUrl)
    .setDrmConfiguration(
        MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
            .setLicenseUri(licenseUrl)
            .setLicenseRequestHeaders(headers)
            .build()
    )
    .build()

exoPlayer.setMediaItem(mediaItem)
exoPlayer.prepare()

DefaultDrmSessionManager quản lý phiên DRM: tạo phiên MediaDrm, xử lý yêu cầu cấp phép và chuyển khóa đến bộ giải mã. Tham số setMultiSession(true) cho phép giải mã đồng thời nhiều luồng (âm thanh + video) trong các phiên khác nhau. MediaDrmCallback triển khai yêu cầu HTTP đến máy chủ cấp phép — thường là POST với nội dung SignedRequest.

MediaDrmCallback cho yêu cầu cấp phép

kotlin
val mediaDrmCallback = DefaultDrmSessionManager.MediaDrmCallback {
    url, requestBody ->

    val response = OkHttpClient().newCall(
        Request.Builder()
            .url(url)
            .post(RequestBody.create(requestBody, MediaType.parse("application/octet-stream")))
            .addHeader("Authorization", "Bearer ")
            .build()
    ).execute()

    val responseBytes = response.body?.bytes()
        ?: throw DrmSessionException(Exception("Empty license response"))

    responseBytes
}

Callback gửi yêu cầu POST đến máy chủ cấp phép với UUID Widevine trong nội dung. Máy chủ xác minh xác thực người dùng (mã thông báo trong tiêu đề) và trả về khóa đã mã hóa. Nếu người dùng không có đăng ký hoạt động, máy chủ trả về 403 Forbidden — ExoPlayer tạo lỗi DRM, phải được xử lý qua onPlayerError.

Xử lý lỗi DRM

Lỗi DRM xảy ra khi giấy phép không hợp lệ, hết hạn hoặc thiết bị không hỗ trợ cấp độ bảo vệ yêu cầu. ExoPlayer chuyển lỗi qua Player.Listener.onPlayerError với mã TYPE_DRM_LICENSE_EXPIRED, TYPE_DRM_UNSUPPORTED hoặc TYPE_SOURCE. Khuyến nghị hiển thị thông báo cho người dùng: “Nội dung không khả dụng cho thiết bị này” hoặc “Gia hạn đăng ký của bạn để xem.”

Theo phân tích dịch vụ phát trực tuyến (2025), có tới 8% lần bắt đầu phát lại thất bại liên quan đến lỗi DRM. Trong số này, 60% là giấy phép hết hạn, 25% là thiết bị không tương thích và 15% là lỗi mạng khi yêu cầu khóa. Tự động thử lại sau 5 giây giải quyết được 40% trường hợp lỗi mạng.

Câu hỏi thường gặp

Có thể vượt qua DRM trên thiết bị di động không?

Có thể về mặt kỹ thuật trên thiết bị có Widevine L3 (bảo vệ phần mềm), nơi khóa có thể được trích xuất từ bộ nhớ. Trên L1 và FairPlay với Secure Enclave, việc vượt qua cực kỳ khó khăn — cần quyền truy cập vật lý vào TEE. Các hãng phim hướng đến thiết bị L1 cho nội dung cao cấp.

Tại sao Netflix hiển thị chất lượng thấp trên Android của tôi?

Rất có thể thiết bị không được chứng nhận cho Widevine L1 và đang sử dụng L3. Netflix giới hạn chất lượng ở 540p trên thiết bị L3. Kiểm tra cấp độ Widevine qua ứng dụng DRM Info từ Google Play. Các thiết bị hàng đầu của Samsung, Pixel và OnePlus thường có L1.

DRM nào tốt nhất cho dịch vụ phát trực tuyến?

Sử dụng Đa DRM: Widevine cho Android, FairPlay cho Apple, PlayReady cho Windows. Các dịch vụ như Axinom hoặc Vualto cung cấp API thống nhất cho cả ba hệ thống DRM. Nội dung được mã hóa một lần qua CENC và việc chọn DRM diễn ra tự động ở phía máy khách.

Làm thế nào để triển khai xem ngoại tuyến với DRM?

Trên iOS, sử dụng khóa liên tục của FairPlay qua AVContentKeySession. Trên Android, sử dụng Giấy phép ngoại tuyến Widevine qua ExoPlayer OfflineLicenseHelper. Khóa được lưu trữ cục bộ trong Keychain (iOS) hoặc KeyStore (Android) với thời hạn hiệu lực giới hạn — thường từ 7 đến 30 ngày.

KID trong bối cảnh DRM là gì?

KID (ID khóa) — mã định danh duy nhất 16 byte của khóa mã hóa trong tệp kê khai CENC. Mỗi KID được gắn với một đoạn nội dung cụ thể (ví dụ: đoạn 10 phút của phim). Máy chủ cấp phép sử dụng KID để tìm khóa tương ứng trong cơ sở dữ liệu của mình. Một bộ phim có thể chứa tới 20 KID khác nhau cho các phần khác nhau.

Tóm tắt

  • DRM (Quản lý quyền kỹ thuật số) — hệ thống bảo vệ mã hóa nội dung số, bắt buộc để phát trực tuyến hợp pháp.
  • Ba sơ đồ chính: Widevine (Android), FairPlay (iOS), PlayReady (Windows) — sử dụng CENC để mã hóa nội dung thống nhất.
  • Widevine L1 (bảo vệ phần cứng qua TEE) cho phép 4K HDR, L3 (phần mềm) bị giới hạn ở 540p. Cấp độ được kiểm tra qua MediaDrm.getPropertyString.
  • FairPlay chỉ hoạt động với HLS và sử dụng AVContentKeySession để yêu cầu khóa từ máy chủ KSM.
  • Tích hợp DRM được thực hiện qua trình phát đa phương tiện: ExoPlayer (Android) với DefaultDrmSessionManager, AVPlayer (iOS) với AVContentKeySession.
  • Lỗi DRM được xử lý qua onPlayerError — giấy phép hết hạn, thiết bị không tương thích và lỗi mạng chiếm 8% số lần khởi động thất bại.
  • Đối với dịch vụ đa nền tảng, khuyến nghị phương pháp Đa DRM với nhà cung cấp CDN và mã hóa nội dung CENC thống nhất.

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm