我试图了解Apple在其iOS设备和Safari上支持的HTTP Live Streaming协议如何保护解锁内容的密钥。
我理解它的方式,.m3u8文件将整个内容保存在一起并引用内容(在MPEG2 TS容器中,AES 128加密)和TS文件的密钥。
就像这个例子一样:
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:7794
#EXT-X-TARGETDURATION:15
#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52"
#EXTINF:15,
http://media.example.com/fileSequence52-1.ts
#EXTINF:15,
http://media.example.com/fileSequence52-2.ts
#EXTINF:15,
http://media.example.com/fileSequence52-3.ts
#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=53"
#EXTINF:15,
http://media.example.com/fileSequence53-1.ts
假设基于浏览器的播放中<video>
元素被输入“src”属性中的m3u8文件。在这种情况下,即使密钥是通过https发送的,如何确保用户不只是在浏览器中输入https URL并将密钥保存到他的硬盘中?我理解机制的方式是,密钥下载由<video>
标签完成,因为它使用浏览器的https堆栈播放m3u8源 - 浏览器中的合法客户端如何区分用户只需将其输入到地址栏?这一定非常明显,但我只是不明白......
一切顺利,
dansch
答案 0 :(得分:3)
如何确保用户不只是在他的网址中输入https网址 浏览器并将密钥保存到他的硬盘?
您可以在应用中拥有SSL客户端密钥/证书,从而验证“应用”以播放内容。然后,您应该避免将内容泄露给除应用程序之外的其他设备。
但这意味着您需要以某种方式隐藏应用程序内的ssl-key / passphrase。不幸的是,还有问题让iOS上的视频播放器使用ssl密钥验证......
答案 1 :(得分:2)
答案根本不明显。如果您希望密钥交付安全,则基本上需要创建自己的密钥交付。一种选择是为授权用户设置cookie,并验证密钥服务器中的cookie。这将使某人无法使用关键网址绕过您的安全。
请记住,它仍然只需要一个合法的客户端泄漏密钥以使您的安全性失效。
答案 2 :(得分:2)
最好的方法是使用Apple HLS支持的加密.HLS支持128位AES加密,客户端播放器需要解码流。
答案 3 :(得分:2)
这需要在iOS中进行自定义工作,但也需要Android和网络播放器。
如果您只定位iOS,那么您应该使用Apple Fairplay DRM来处理密钥的身份验证。
答案 4 :(得分:1)
Apple实施的HTTP直播不支持DRM。
上的常见问题解答第16号答案 5 :(得分:1)
浏览器中的合法客户端如何区分用户只需将其输入地址栏?
有趣的区别,建议是用户使用的浏览器在播放网页中嵌入的视频时是合法的,而在通过地址栏访问时是非法的。
但那里没有实际的区别,我认为你没有遗漏任何东西。
您如何授予浏览器权限而不授予用户权限?用户不能只写自己的浏览器吗?
我知道,用户似乎不太可能编写浏览器,但这些类型的讨论总是不太可能出现。一个不太可能的用户可能会找到一种方法来将m3u8视为纯文本,他们可能会直接下载密钥,他们可能会使用这些密钥进行解密,最终将视频片段拼凑在一起。
或者,更有可能的事情 - 使用屏幕录制软件复制他们可以在浏览器中播放的任何视频。
在我看来,如果用户被授权播放视频,他们可能会复制视频 - 因为没有办法阻止视频的显示被重定向到不再加密的内容 - 至少在正在浏览器中播放视频的台式计算机的环境。
无论如何,我的理解是你可以通过要求获得密钥的授权来保护密钥,但如果用户拥有该授权,那么 - 他们可以获得密钥。
答案 6 :(得分:1)
看看这里 https://tools.ietf.org/html/draft-pantos-http-live-streaming-13#section-6.3.6
播放列表必须为每个细分指定一个关键标记。因此,玩家将能够识别解密片段所需的密钥。
浏览器不支持开箱即用的DRM。 HTML5指定可以通过未实现atm的EME(加密媒体扩展)来完成。
所以你的选择是: