有没有办法使用明文密钥加密来保护媒体 HTML5 媒体流?

信息安全 加密 html-5 视频
2021-08-28 02:22:55

我正在尝试使用 Clear Key 加密来理解 EME。我正在使用 MP4Box。从此处的文档中,您可以在用于加密/解密 mp4 文件的 XML 文件中指定解密密钥。 https://gpac.wp.mines-telecom.fr/mp4box/encryption/common-encryption/

基本上,具有明确密钥加密的 EME 是否有任何意义,是否可以使用它来保护内容?

据我了解,您在此 XML 中指定的加密密钥是客户端需要在前端用于解密 HTML5 音频/视频流的密钥。这意味着,用户可以随时使用浏览器的开发工具来获取密钥。

我想我可以以某种方式混淆密钥,但任何有决心的人仍然可以得到密钥。

我可能做的另一件事是将其与过期的流链接结合起来,但这也不会投射密钥。

我认为您也可以定期重新加密媒体,或者使用不同的密钥多次加密文件,但这似乎不能很好地扩展。每次播放都有一个 1 次使用密钥会很好,但同样,效率可能非常低。

以下是特定加密密钥的 XML 配置示例:

<?xml version="1.0" encoding="UTF-8"?>
<GPACDRM type="CENC AES-CTR">
<!-- example for GPAC 'clear' DRM System - keys are listed after the     content and UL follows -->
<DRMInfo type="pssh" version="1" cypherOffset="9"    cypherKey="0x6770616363656E6364726D746F6F6C31"  cypherIV="0x00000000000000000000000000000001">
<BS ID128="6770616363656E6364726D746F6F6C31"/>
<BS value="2" bits="32"/>
<BS ID128="0x279926496a7f5d25da69f2b3b2799a7f"/>
<BS ID128="0x676cb88f302d10227992649885984045"/>
<BS bits="8" string="CID=Toto"/>
<BS ID128="0xccc0f2b3b279926496a7f5d25da692f6"/>
<BS ID128="0xccc0f2b3b279926496a7f5d25da692d6"/>
</DRMInfo>
<CrypTrack trackID="1" IsEncrypted="1" IV_size="16"  first_IV="0x0a610676cb88f302d10ac8bc66e039ed" saiSavedBox="senc">
<key KID="0x279926496a7f5d25da69f2b3b2799a7f" value="0xccc0f2b3b279926496a7f5d25da692f6"/>
<key KID="0x676cb88f302d10227992649885984045" value="0xccc0f2b3b279926496a7f5d25da692d6"/>
</CrypTrack>
</GPACDRM>
1个回答

具有明文密钥加密的 EME 的目的是为更难以窃取和共享的内容提供更易于实施的加密。如果你真的需要保护你的内容,DRM 是目前最强的解决方案,忽略不共享内容的场景。

在易于实现和易于绕过的一端是在主清单中放置一个非旋转密钥并尝试控制对清单的访问。一旦用户获得对主清单的访问权,它就会一目了然,并且可以与其他人公开共享。

在更难实现和更难绕过的一端是在每个段上使用短期密钥轮换并使用短期签名 URL。这意味着用户必须为不同的段处理不同的密钥,并及时下载具有有效密钥的不同段。用户仍然可以将所有部分组合在一起以窃取和共享内容,但它不再只是复制和粘贴。

THEOplayer 有一篇关于我在这里提到的事情的更详细的帖子,如果它仍然存在并且你感兴趣的话https://www.theoplayer.com/blog/content-protection-for-hls-with-aes-128-encryption