带加密的HTTP直播流

时间:2010-12-20 17:05:57

标签: ios http safari http-live-streaming live-streaming

我试图了解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

7 个答案:

答案 0 :(得分:3)

  

如何确保用户不只是在他的网址中输入https网址   浏览器并将密钥保存到他的硬盘?

您可以在应用中拥有SSL客户端密钥/证书,从而验证“应用”以播放内容。然后,您应该避免将内容泄露给除应用程序之外的其他设备。

但这意味着您需要以某种方式隐藏应用程序内的ssl-key / passphrase。不幸的是,还有问题让iOS上的视频播放器使用ssl密钥验证......

答案 1 :(得分:2)

答案根本不明显。如果您希望密钥交付安全,则基本上需要创建自己的密钥交付。一种选择是为授权用户设置cookie,并验证密钥服务器中的cookie。这将使某人无法使用关键网址绕过您的安全。

请记住,它仍然只需要一个合法的客户端泄漏密钥以使您的安全性失效。

答案 2 :(得分:2)

最好的方法是使用Apple HLS支持的加密.HLS支持128位AES加密,客户端播放器需要解码流。

答案 3 :(得分:2)

可在此处找到一些有趣的指示:Opacity 0%

这需要在iOS中进行自定义工作,但也需要Android和网络播放器。

  • 从受保护的HTTPS领域提供密钥。在播放开始之前,您的应用可以使用NSURLConnection对自身进行身份验证,提供隐藏的凭据。
  • 通过HTTPS使用Cookie 。您的应用可以建立与HTTPS服务器的连接,并以应用定义的方式验证应用。然后,您的服务器可以发出适用于密钥URL的cookie。您应该将cookie设置为在播放完成后很长时间过期。然后,服务器必须在将来对密钥的GET请求中要求存在有效的会话cookie。 为了获得最大可靠性,如果到期日期是在不久的将来,服务器应在其对未来GET请求的响应中更新cookie的到期日期。
  • 使用应用定义的网址指定.m3u8文件中的密钥。应用程序应注册自定义NSURLProtocol以处理对这些URL的请求。当玩家需要加载密钥URL时,播放器会回调您的应用;然后,您的应用可以使用安全的侧通道获取密钥,并将其提供给播放器。

如果您只定位iOS,那么您应该使用Apple Fairplay DRM来处理密钥的身份验证。

答案 4 :(得分:1)

答案 5 :(得分:1)

  

浏览器中的合法客户端如何区分用户只需将其输入地址栏?

有趣的区别,建议是用户使用的浏览器在播放网页中嵌入的视频时是合法的,而在通过地址栏访问时是非法的。

但那里没有实际的区别,我认为你没有遗漏任何东西。

您如何授予浏览器权限而不授予用户权限?用户不能只写自己的浏览器吗?

我知道,用户似乎不太可能编写浏览器,但这些类型的讨论总是不太可能出现。一个不太可能的用户可能会找到一种方法来将m3u8视为纯文本,他们可能会直接下载密钥,他们可能会使用这些密钥进行解密,最终将视频片段拼凑在一起。

或者,更有可能的事情 - 使用屏幕录制软件复制他们可以在浏览器中播放的任何视频。

在我看来,如果用户被授权播放视频,他们可能会复制视频 - 因为没有办法阻止视频的显示被重定向到不再加密的内容 - 至少在正在浏览器中播放视频的台式计算机的环境。

无论如何,我的理解是你可以通过要求获得密钥的授权来保护密钥,但如果用户拥有该授权,那么 - 他们可以获得密钥。

答案 6 :(得分:1)

看看这里 https://tools.ietf.org/html/draft-pantos-http-live-streaming-13#section-6.3.6

播放列表必须为每个细分指定一个关键标记。因此,玩家将能够识别解密片段所需的密钥。

浏览器不支持开箱即用的DRM。 HTML5指定可以通过未实现atm的EME(加密媒体扩展)来完成。

所以你的选择是:

  1. 使用flash并通过自己的算法获取密钥
  2. 编写自己的插件(扩展名)
  3. 像Netflix一样大并且同意浏览器 供应商支持您的DRM又名内容保护和密钥 分布。