VOD 深度剖析 第 8 部分:DRM 内容保护 —— 为什么 Netflix 无法被录屏
深入讲解 Widevine、FairPlay、PlayReady。涵盖 CENC/CBCS 统一加密、许可证流程、L1/L2/L3 安全级别、HDCP、SPEKE 集成,以及针对短视频的轻量级保护方案。
本文是 VOD 流媒体深度剖析 系列的第 8 部分。
为什么视频需要”加密 + 授权”
当你每月支付 15 美元订阅 Netflix 时,Netflix 必须保证:
- 只有你能观看(不能拷贝给朋友)
- 只在订阅期内能看(取消订阅即失效)
- 只在授权设备上能看(不能导出到非法播放器)
- 4K 只在安全设备上能看(防止高画质内容泄露)
这就是 DRM(数字版权管理,Digital Rights Management)。其核心思路是:
- 用内容加密密钥(CEK)加密视频
- 密钥分发需要严格校验(你是谁?是否订阅?设备是否安全?)
- 密钥永远不离开硬件安全区 —— 对应用层代码完全不可见
三样都叫”加密”的东西 —— 只有一样才是 DRM
| 名称 | 是 DRM 吗? | 强度 |
|---|---|---|
| HTTPS / TLS | 否 —— 仅传输层加密 | 可用代理工具截获 |
| HLS AES-128 | 否 —— 轻量级加密 | 密钥 URL 泄露即完蛋 |
| CENC + Widevine/FairPlay/PlayReady | 是 —— 真正的 DRM | 强 |
HLS AES-128(轻量级)
#EXT-X-KEY:METHOD=AES-128,URI="https://api.example.com/key?ep=123",IV=0x1234...
#EXTINF:6.000,
seg_00001.ts
分片使用 AES-128-CBC 加密,16 字节密钥从一个 URL 获取。方案简单、支持广泛,但在 Web 上密钥在 JavaScript 中是可见的。用来防范随手盗链已经足够,但不足以保护优质内容。
三大 DRM 系统
| DRM | 厂商 | 平台 |
|---|---|---|
| Widevine | Android、ChromeOS、Chrome、Firefox、Edge、大多数智能电视 | |
| FairPlay Streaming | Apple | iOS、iPadOS、macOS(Safari)、tvOS |
| PlayReady | Microsoft | Windows、Xbox、Edge、部分智能电视 |
问题来了:同一部电影,在 iPhone 和 Android 上是否需要分别加密两次?
不需要。 这正是 CENC 要解决的问题。
CENC:一次加密,处处播放
CENC(通用加密,Common Encryption),即 ISO/IEC 23001-7,定义了一种三大 DRM 系统都能解密的统一加密格式。
| 模式 | 算法 | DRM 支持 |
|---|---|---|
cenc | AES-128 CTR | Widevine、PlayReady(经典) |
cbcs | AES-128 CBC + Pattern | FairPlay(必需)、Widevine(现代)、PlayReady(现代) |
使用 cbcs 模式:只需一次加密 → Widevine + FairPlay + PlayReady 全部通吃。这就是 CMAF + CBCS 的黄金组合。
完整的 DRM 流程
┌─────────────┐ ┌──────────────┐
│ Packager │── KID + CEK ──────────► │ Key Store │
│ (encrypts) │ │ (KMS) │
└─────────────┘ └──────────────┘
│ ▲
│ Encrypted segments │
▼ │
┌─────────────┐ ┌──────────────┐
│ CDN │ │ License │
│ │ │ Server │
└──┬──────────┘ └──────────────┘
│ ▲
│ ① fetch manifest │
│ ② fetch encrypted segment │
▼ │ ④ license request
┌──────────────────┐ │
│ Player │ │
│ ┌──────────┐ │ │
│ │ CDM │────┼───── ③ challenge ───────┘
│ │ (secure) │◄───┼────── ⑤ license + CEK
│ │ │ │
│ │ Inside │ │
│ │ TEE │ │
│ └──────────┘ │
└──────────────────┘
关键概念:
- KID(Key ID,密钥 ID):标识哪个密钥加密了哪个分片
- CEK(Content Encryption Key,内容加密密钥):16 字节的 AES 密钥
- CDM(Content Decryption Module,内容解密模块):播放器内部的 DRM 组件,运行在硬件安全区(TEE)内
- License(许可证):服务器返回的响应,包含加密后的 CEK + 使用规则
流程如下:
- Packager 从 Key Store 获取 KID + CEK,加密分片,并将 DRM 元数据写入 manifest
- 播放器加载 manifest,检测到 DRM,初始化 CDM
- CDM 生成一个 challenge(挑战)(包含设备指纹、公钥)
- 播放器将 challenge 发送给 License Server
- License Server 校验:是否已订阅?设备是否足够安全?
- 校验通过 → 返回许可证(用 CDM 公钥加密后的 CEK)
- CDM 在 TEE 内解密许可证 → 解密分片 → 将画面帧直接送往 GPU
CEK 从不进入应用内存,也不进入 JavaScript。 这是 DRM 的根本安全保障。
Widevine L1 / L2 / L3
| 级别 | 解密 | 解码 | 安全性 | 最高画质 |
|---|---|---|---|---|
| L1 | TEE(硬件) | TEE | 最高 | 4K / HDR |
| L2 | TEE | 软件 | 中 | 1080p |
| L3 | 软件 | 软件 | 最低 | 480p / 720p |
为什么 4K 只限 L1? 一路 Netflix 4K 流意味着数百万美元的授权价值。如果 L3 设备也能解码 4K,攻击者就能通过虚拟机和逆向工程把流提取出来。
Netflix 和 Disney+ 会在 License Server 中强制要求 securityLevel >= L1,之后才会下发 4K 密钥。
FairPlay 没有级别之分 —— 所有 Apple 设备都使用 Secure Enclave,实际上等同于 L1。
PlayReady 分为 SL150(≈L3)、SL2000(≈L2)、SL3000(≈L1)。
HDCP:连你的 HDMI 线也要被检查
HDCP(高带宽数字内容保护,High-bandwidth Digital Content Protection) 保护设备与显示器之间的 HDMI/DisplayPort 链路。
当你用 HDMI 把 iPad 连接到电视并播放 Netflix 时:
- HDMI 线只支持 HDCP 1.4 → Netflix 可能限制在 1080p
- 线缆和显示器都支持 HDCP 2.2 → 允许 4K
License Server 通常会对 4K 内容强制要求 requireHdcp: "2.2"。
SPEKE:Packager ↔ 密钥服务器协议
SPEKE(安全打包器与编码器密钥交换,Secure Packager and Encoder Key Exchange) 是 AWS 为 Packager 与密钥服务器通信制定的标准接口。
使用 SPEKE 时:配置一个指向 EZDRM/PallyCon 的 SPEKE 端点的 URL → Packager 自动请求 KID + CEK → 生成启用 DRM 的 manifest。
这是 DRM 集成的行业标准做法。
离线播放(下载观看)
下载同样要走 DRM:
- 客户端将加密分片下载到本地存储
- License Server 下发一个持久化许可证(“离线有效 48 小时”)
- CDM 将许可证存放在硬件安全区中
- 离线播放使用存储的许可证
“我能把 SD 卡里下载好的文件拷到另一部手机上吗?” —— 不能。没有许可证,加密分片毫无用处,而许可证是绑定到设备上的。
短视频的轻量级保护
短视频平台面临的经济模型截然不同:
- 单集价值很低(几分钱到几美元)
- 海量用户基数 = 巨大的许可证请求量
- “先看后付”模式(任何阻力都会导致用户流失)
对短视频而言,完整 DRM 往往是杀鸡用牛刀。常见的分级方案如下:
L0 (free preview): Clear HLS + Signed URL
(first few episodes)
L1 (standard paid): HLS AES-128 + dynamic IV + Signed URL
+ client SDK key derivation + anti-sniffing
(majority of paid content)
L2 (premium): Full Multi-DRM (CBCS + Widevine + FairPlay)
(exclusive blockbusters)
补充性保护手段:密钥轮换(每隔 N 秒更换密钥)、防录屏(Android 上的 FLAG_SECURE、iOS 上的 UIScreen.isCaptured)、反调试/越狱检测,以及动态水印(叠加 user_id + 时间戳以便追溯泄露源头)。
选型指南
What is your content?
│
├── Hollywood movies / premium exclusive long-form
│ → Full Multi-DRM (CBCS + Widevine L1 + FairPlay + PlayReady SL3000)
│ → Enforce HDCP 2.2 + securityLevel=L1 for 4K
│
├── Standard VOD (B-movies, documentaries, courses)
│ → Widevine L3 + FairPlay + PlayReady (relax hardware requirements)
│
├── Paid short-form / mid-value content
│ → HLS AES-128 + Signed URL + anti-screen-recording
│
├── Subscription self-produced content
│ → Per rights-holder requirements (usually DRM + watermark)
│
└── Free / UGC
→ No encryption, Signed URL anti-hotlinking only
要点回顾
- DRM = 内容加密 + 严格的密钥分发 + 硬件级解密。
- HLS AES-128 并不是真正的 DRM —— 只是轻量级加密。
- 三大 DRM 系统:Widevine(Google)、FairPlay(Apple)、PlayReady(Microsoft)。
- CENC(CBCS 模式) 让同一个 CMAF 文件适配全部三种 DRM 系统。
- Widevine L1 = 4K 权限;L3 最高只到 720p。
- HDCP 2.2 是 4K 外接显示输出的必要条件。
- 短视频通常使用轻量级加密 + 防录屏,而非完整 DRM。
- 生产环境使用 SPEKE 来对接托管型 DRM 服务(EZDRM、PallyCon)。
上一篇: 第 7 部分:CDN 分发
下一篇: 第 9 部分:视频播放器
参考资料
- Widevine DRM — Google
- FairPlay Streaming — Apple Developer
- Secure Packager and Encoder Key Exchange (SPEKE) — AWS Documentation