# VOD 深度剖析 第 8 部分：DRM 内容保护 —— 为什么 Netflix 无法被录屏

> 深入讲解 Widevine、FairPlay、PlayReady。涵盖 CENC/CBCS 统一加密、许可证流程、L1/L2/L3 安全级别、HDCP、SPEKE 集成，以及针对短视频的轻量级保护方案。

- 作者: zhuermu
- 发布: 2026-05-10
- 网页版: https://zhuermu.com/blog/vod-deep-dive-part-8-drm-content-protection/

---
> *本文是 [VOD 流媒体深度剖析](/blog/vod-deep-dive-part-1-video-fundamentals/) 系列的第 8 部分。*

---

## 为什么视频需要"加密 + 授权"

当你每月支付 15 美元订阅 Netflix 时，Netflix 必须保证：

- **只有你**能观看（不能拷贝给朋友）
- **只在订阅期内**能看（取消订阅即失效）
- **只在授权设备上**能看（不能导出到非法播放器）
- **4K 只在安全设备上**能看（防止高画质内容泄露）

这就是 **DRM（数字版权管理，Digital Rights Management）**。其核心思路是：

1. 用内容加密密钥（CEK）**加密视频**
2. **密钥分发需要严格校验**（你是谁？是否订阅？设备是否安全？）
3. **密钥永远不离开硬件安全区** —— 对应用层代码完全不可见

---

## 三样都叫"加密"的东西 —— 只有一样才是 DRM

| 名称 | 是 DRM 吗？ | 强度 |
|------|-----------|------|
| **HTTPS / TLS** | 否 —— 仅传输层加密 | 可用代理工具截获 |
| **HLS AES-128** | 否 —— 轻量级加密 | 密钥 URL 泄露即完蛋 |
| **CENC + Widevine/FairPlay/PlayReady** | **是 —— 真正的 DRM** | 强 |

### HLS AES-128（轻量级）

```m3u8
#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** | Google | 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 + 使用规则

流程如下：

1. Packager 从 Key Store 获取 KID + CEK，加密分片，并将 DRM 元数据写入 manifest
2. 播放器加载 manifest，检测到 DRM，初始化 CDM
3. CDM 生成一个 **challenge（挑战）**（包含设备指纹、公钥）
4. 播放器将 challenge 发送给 License Server
5. License Server 校验：是否已订阅？设备是否足够安全？
6. 校验通过 → 返回许可证（用 CDM 公钥加密后的 CEK）
7. 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
```

---

## 要点回顾

1. DRM = 内容加密 + 严格的密钥分发 + 硬件级解密。
2. **HLS AES-128 并不是真正的 DRM** —— 只是轻量级加密。
3. **三大 DRM 系统**：Widevine（Google）、FairPlay（Apple）、PlayReady（Microsoft）。
4. **CENC（CBCS 模式）** 让同一个 CMAF 文件适配全部三种 DRM 系统。
5. **Widevine L1 = 4K 权限**；L3 最高只到 720p。
6. **HDCP 2.2** 是 4K 外接显示输出的必要条件。
7. 短视频通常使用**轻量级加密 + 防录屏**，而非完整 DRM。
8. 生产环境使用 **SPEKE** 来对接托管型 DRM 服务（EZDRM、PallyCon）。

---

*上一篇：* [第 7 部分：CDN 分发](/blog/vod-deep-dive-part-7-cdn-distribution/)

*下一篇：* **[第 9 部分：视频播放器](/blog/vod-deep-dive-part-9-video-players/)**

---

## 常见问题

### HLS AES-128 加密算不算 DRM？

不算。HLS AES-128 只是轻量级加密：分片用 AES-128-CBC 加密，16 字节密钥从一个 URL 获取，在 Web 端这个密钥在 JavaScript 里是可见的。真正的 DRM（Widevine、FairPlay、PlayReady）把内容密钥锁在硬件安全区内，应用层代码根本接触不到。AES-128 防随手盗链够用，但保护不了高价值内容。

### Widevine L1 和 L3 有什么区别？为什么 L3 设备看不了 4K？

L1 的解密和解码都在硬件可信执行环境（TEE）内完成，安全性最高，可以播 4K/HDR；L3 全部在软件中完成，最高只能到 480p/720p；L2 介于两者之间（硬件解密、软件解码），上限 1080p。Netflix、Disney+ 会在 License Server 强制校验 securityLevel >= L1 才下发 4K 密钥，所以 L3 设备拿不到 4K。

### 同一部影片需要为 iPhone 和 Android 分别加密两次吗？

不需要。CENC（通用加密，ISO/IEC 23001-7）定义了三大 DRM 系统都能解密的统一加密格式。选用 cbcs 模式（AES-128 CBC + Pattern）：一次加密即可同时兼容 FairPlay（它必须用 cbcs）、现代版 Widevine 和现代版 PlayReady。配合 CMAF 统一分片格式，「CMAF + CBCS」就是一次加密、处处播放的黄金组合。


---

## 参考资料

- [Widevine DRM](https://www.widevine.com/) — Google
- [FairPlay Streaming](https://developer.apple.com/streaming/fps/) — Apple Developer
- [Secure Packager and Encoder Key Exchange (SPEKE)](https://docs.aws.amazon.com/speke/latest/documentation/what-is-speke.html) — AWS Documentation
