惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
CERT Recently Published Vulnerability Notes
C
Cybersecurity and Infrastructure Security Agency CISA
P
Proofpoint News Feed
Security Latest
Security Latest
P
Privacy International News Feed
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
AI
AI
Cisco Talos Blog
Cisco Talos Blog
K
Kaspersky official blog
S
Secure Thoughts
PCI Perspectives
PCI Perspectives
Simon Willison's Weblog
Simon Willison's Weblog
D
DataBreaches.Net
GbyAI
GbyAI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
大猫的无限游戏
大猫的无限游戏
T
Tailwind CSS Blog
The Cloudflare Blog
阮一峰的网络日志
阮一峰的网络日志
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
罗磊的独立博客
V
Visual Studio Blog
aimingoo的专栏
aimingoo的专栏
H
Hackread – Cybersecurity News, Data Breaches, AI and More
IT之家
IT之家
V
V2EX
Last Week in AI
Last Week in AI
有赞技术团队
有赞技术团队
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tenable Blog
T
Threat Research - Cisco Blogs
T
Troy Hunt's Blog
V2EX - 技术
V2EX - 技术
S
Security @ Cisco Blogs
Security Archives - TechRepublic
Security Archives - TechRepublic
Project Zero
Project Zero
The GitHub Blog
The GitHub Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
L
Lohrmann on Cybersecurity
F
Full Disclosure
H
Help Net Security
博客园 - Franky
Stack Overflow Blog
Stack Overflow Blog
N
Netflix TechBlog - Medium
Engineering at Meta
Engineering at Meta
A
Arctic Wolf
O
OpenAI News
S
Securelist

Jack Pu's Blog (蒲小花的博客-ポーのブログ)

拥有孩子的得与失 大事件 记一次警察访谈 重庆 一句抵一万句 The Plan of 2026 2025 2022 年往事 小青橙第一次急疹 OTT 开发的挑战 我了解的美国 VS 我体验的美国 国庆小记 【DRAFT】ES2025 的语法糖科普 开学第一课 夏末
为什么 Android Webview 不支持 L1 级别的 Widevine DRM 安全级别
Jack Pu · 2025-07-31 · via Jack Pu's Blog (蒲小花的博客-ポーのブログ)

接着前一篇文章 DRM Widevine L1 在 Android Webview 的支持情况, 这一篇文章是基于 Cursor 对 Chroimum 源码分析得出的一些结论。本文主要回答两个问题:

  • 为什么 Android Webview 不支持 L1 级别的 Widevine DRM 安全级别
  • 为什么 Android Chrome 应用支持 L1 级别的 Widevine DRM 安全级别

为什么 Android Webview 不支持 L1 级别的 Widevine DRM 安全级别?

主要原因:

1. 硬件安全解码要求
根据 Chromium 代码中的逻辑,在 Android 平台上:

// 在 Android 上,SW_SECURE_DECODE 及以上级别需要硬件安全编解码器
if (robustness >= Robustness::SW_SECURE_DECODE || hw_secure_codecs_required) {
    return EmeConfig{.hw_secure_codecs = EmeConfigRuleState::kRequired};
}

这意味着:

任何高于或等于 SW_SECURE_DECODE 的安全级别都需要硬件安全编解码器但是 WebView 没有提供硬件安全编解码器的基础设施

2. WebView 的架构限制

单进程架构:WebView 运行在单进程中,不像 Chrome 那样有进程隔离缺少安全表面:硬件安全解码需要特殊的安全表面处理,WebView 没有实现权限限制:硬件安全解码通常需要额外的系统权限和特殊处理

3. 安全考虑

硬件安全解码需要更严格的进程隔离和安全机制 在 WebView 中实现硬件安全解码可能会带来安全风险
需要大量的架构改动才能安全地支持

技术细节:

DRM 安全级别从低到高:

  • SW_SECURE_CRYPTO:软件安全加密
  • SW_SECURE_DECODE:软件安全解码(WebView 支持的最高级别)
  • HW_SECURE_CRYPTO:硬件安全加密
  • HW_SECURE_ALL:硬件安全全部

** WebView 的限制:**

  • 只支持到 SW_SECURE_DECODE 级别
  • 不支持 HW_SECURE_CRYPTO 和 HW_SECURE_ALL
  • 当网页请求更高安全级别时,WebView 会拒绝

实际影响:

  • 内容兼容性:某些高安全级别的内容可能无法在 WebView 中播放
  • 性能影响:软件解码比硬件解码消耗更多 CPU 资源
  • 电池消耗:软件解码会增加电池消耗

为什么这样设计?

  • 简化架构:WebView 作为嵌入式组件,保持简单和安全
  • 兼容性:确保在各种 Android 设备上都能正常工作
  • 安全性:避免在嵌入式环境中引入复杂的安全机制

这就是为什么 Android WebView 只支持 SW_SECURE_DECODE 的技术原因。如果需要更高级别的 DRM 支持,通常需要使用原生 Android 应用或 Chrome 浏览器。

1. Android 硬件安全编解码器支持检查代码

// 硬件安全编解码器的渲染只有在 AndroidOverlay 启用时才支持
const bool is_secure = robustness == CdmInfo::Robustness::kHardwareSecure;
if (is_secure) {
    bool are_overlay_supported =
        content::AndroidOverlayProvider::GetInstance()->AreOverlaysSupported();
    bool overlay_fullscreen_video =
        base::FeatureList::IsEnabled(media::kOverlayFullscreenVideo);
    if (!are_overlay_supported || !overlay_fullscreen_video) {
        DVLOG(1) << "Hardware secure codecs not supported for key system"
                 << key_system << ".";
        std::move(cdm_capability_cb)
            .Run(base::unexpected(media::CdmCapabilityQueryStatus::
                                      kHardwareSecureCodecNotSupported));
        return;
    }
}

关键点:

  • 硬件安全编解码器需要 AndroidOverlay 支持
  • 需要 kOverlayFullscreenVideo 功能启用
  • 如果这些条件不满足,就会返回 kHardwareSecureCodecNotSupported 错误

2. WebView 明确禁用了相关功能
在 src/android_webview/browser/aw_field_trials.cc 中:

// WebView 还不支持视频覆盖的全屏
aw_feature_overrides.DisableFeature(media::kOverlayFullscreenVideo);

// WebView 不支持多进程,所以不要尝试在单独进程中调用一些 MediaDrm API
aw_feature_overrides.DisableFeature(media::kMediaDrmQueryInSeparateProcess);

关键点:

  • WebView 明确禁用了 kOverlayFullscreenVideo 功能
  • 禁用了 kMediaDrmQueryInSeparateProcess 功能

这些正是硬件安全编解码器所需的基础设施

3. Widevine 密钥系统信息中的 Android 特定逻辑
在 src/components/cdm/renderer/widevine_key_system_info.cc 中:

当 Android 应用嵌入 WebView 时,WebView 的浏览器代码运行在应用的进程中
(我们称之为"浏览器进程")。这意味着 WebView 代码共享相同的地址空间,
我们通常认为应用就像任何其他浏览器进程代码一样是可信的。

关键点:

  • Android 平台要求 SW_SECURE_DECODE 及以上级别必须使用硬件安全编解码器
  • 但是 WebView 没有提供硬件安全编解码器的基础设施

4. WebView 的架构限制

在 src/android_webview/docs/architecture.md 中:

当 Android 应用嵌入 WebView 时,WebView 的浏览器代码运行在应用的进程中
(我们称之为"浏览器进程")。这意味着 WebView 代码共享相同的地址空间,
我们通常认为应用就像任何其他浏览器进程代码一样是可信的。

关键点:

  • WebView 运行在单进程中,没有进程隔离
  • 硬件安全编解码器通常需要特殊的进程隔离和安全机制
  • WebView 的架构不支持这些安全要求

5. WebView 中缺少硬件安全编解码器相关代码

通过搜索发现,在 src/android_webview/ 目录中:

总结

这些代码证据清楚地表明:

  • 硬件安全编解码器需要 AndroidOverlay 支持,但 WebView 禁用了这个功能
  • WebView 禁用了多进程 MediaDrm 查询,这是硬件安全编解码器所需的基础设施
  • WebView 运行在单进程中,缺乏硬件安全编解码器所需的进程隔离
  • WebView 代码库中完全没有硬件安全编解码器的实现

因此,WebView 确实没有提供硬件安全编解码器的基础设施,这就是为什么它只能支持 SW_SECURE_DECODE 的原因。

为什么 Android Chrome 应用支持 L1 级别的 Widevine DRM 安全级别?

核心差异:Chrome vs WebView

1. 技术基础设施支持

Chrome 具备完整的硬件安全基础设施:

AndroidOverlay 支持

// Chrome 支持 AndroidOverlay(在 AndroidOverlayProviderImpl.java 中)
@CalledByNative
private static boolean areOverlaysSupported() {
    return true;  // Chrome 返回 true,支持 overlay
}	

OverlayFullscreenVideo 功能启用

// 在 media_switches.cc 中,Chrome 默认启用此功能
BASE_FEATURE(kOverlayFullscreenVideo,
             "overlay-fullscreen-video", 
             base::FEATURE_ENABLED_BY_DEFAULT);  // 默认启用

WebView 明确禁用这些功能:

// 在 aw_field_trials.cc 中,WebView 明确禁用
// WebView does not support overlay fullscreen yet for video overlays.
aw_feature_overrides.DisableFeature(media::kOverlayFullscreenVideo);

2. 多进程架构支持

Chrome 的复杂多进程架构:

<!-- Chrome 有 40 个沙盒进程用于安全隔离 -->
{% for i in range(40) %}
<service android:name="org.chromium.content.app.SandboxedProcessService{{ i }}"
    android:process=":sandboxed_process{{ i }}"
    android:isolatedProcess="true" />
{% endfor %}

<!-- Chrome 还有 10 个特权进程 -->
{% for i in range(10) %}
<service android:name="org.chromium.content.app.PrivilegedProcessService{{ i }}"
    android:process=":privileged_process{{ i }}" />
{% endfor %}

进程隔离的安全优势:

  • 渲染器进程隔离:DRM 内容在独立的沙盒进程中处理
  • 特权进程分离:硬件安全操作在特权进程中执行
  • 安全边界:进程间有严格的安全边界

3. 硬件安全检查机制

Chrome 的硬件安全检查:

// 在 key_system_support_android.cc 中
const bool is_secure = robustness == CdmInfo::Robustness::kHardwareSecure;
if (is_secure) {
    bool are_overlay_supported =
        content::AndroidOverlayProvider::GetInstance()->AreOverlaysSupported();
    bool overlay_fullscreen_video =
        base::FeatureList::IsEnabled(media::kOverlayFullscreenVideo);
    
    if (!are_overlay_supported || !overlay_fullscreen_video) {
        DVLOG(1) << "Hardware secure codecs not supported";
        return; // 拒绝硬件安全编解码器
    }
    // Chrome 通过检查,支持硬件安全
}

4. DRM 安全级别支持对比

Chrome 支持的 DRM 级别:

  • ✅ SW_SECURE_CRYPTO - 软件安全加密
  • ✅ SW_SECURE_DECODE - 软件安全解码
  • ✅ HW_SECURE_CRYPTO - 硬件安全加密
  • ✅ HW_SECURE_DECODE - 硬件安全解码
  • ✅ HW_SECURE_ALL - 硬件全安全(L1 级别)

WebView 支持的 DRM 级别:

  • ✅ SW_SECURE_CRYPTO - 软件安全加密
  • ✅ SW_SECURE_DECODE - 软件安全解码(最高级别)
  • ❌ HW_SECURE_CRYPTO - 不支持
  • ❌ HW_SECURE_DECODE - 不支持
  • ❌ HW_SECURE_ALL - 不支持

5. 具体技术实现

Chrome 的 L1 支持实现:

  • 硬件安全表面(Secure Surface):
  • Chrome 使用 DialogOverlayImpl 创建安全的视频表面
  • 支持 AndroidOverlay 进行硬件加速渲染
  • 具备 TEE(Trusted Execution Environment)集成

安全视频路径:

// Chrome 支持 HW_SECURE_ALL 级别
max_video_robustness = Robustness::HW_SECURE_ALL;

OEMCrypto 集成:

// Chrome 支持基于硬件的 L1 Widevine DRM
// Enable use of HW based L1 Widevine DRM via the cdm-oemcrypto daemon	

6. 架构总结

特性 Chrome WebView
多进程架构 ✅ 40个沙盒进程 + 10个特权进程 ❌ 简单的双进程模型
AndroidOverlay ✅ 完全支持 ❌ 不支持
OverlayFullscreenVideo ✅ 默认启用 ❌ 明确禁用
硬件安全表面 ✅ 支持 ❌ 不支持
进程隔离 ✅ 严格隔离 ❌ 基本隔离
TEE 集成 ✅ 支持 ❌ 不支持
最高 DRM 级别 HW_SECURE_ALL (L1) SW_SECURE_DECODE (L3)

结论

Android Chrome 支持 L1 DRM Security Level 是因为它具备了完整的硬件安全基础设施:

  • 完整的多进程安全架构
  • AndroidOverlay 硬件表面支持
  • 进程隔离和沙盒机制
  • TEE(可信执行环境)集成
  • 专门的安全视频渲染路径

而 WebView 为了保持轻量级和兼容性,选择了更简单但安全性较低的架构,因此只能支持到 SW_SECURE_DECODE 级别。