Ios HTTP实时流媒体加密

Ios HTTP实时流媒体加密,ios,http,safari,http-live-streaming,live-streaming,Ios,Http,Safari,Http Live Streaming,Live Streaming,我试图了解苹果在iOS设备和Safari上支持的HTTP直播协议是如何保护解锁内容的密钥的 按照我的理解,.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.ph

我试图了解苹果在iOS设备和Safari上支持的HTTP直播协议是如何保护解锁内容的密钥的

按照我的理解,.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
假设基于浏览器的播放,其中
元素在“src”属性中提供一个m3u8文件。在这种情况下,即使密钥是通过https传递的,我如何确保用户不只是在浏览器中输入https URL并将密钥保存到硬盘?按照我对该机制的理解,密钥下载是通过
标记完成的,因为它使用浏览器的https堆栈播放m3u8源代码——浏览器中的合法客户端与仅将其键入地址栏的用户有何不同?这一定很明显,但我就是看不出来

祝你一切顺利


dansch

苹果公司实施的HTTP直播不支持DRM

请参阅上的常见问题16

如何确保用户不只是在自己的页面中输入https URL 浏览器并保存硬盘的密钥

您可以在应用程序中拥有SSL客户端密钥/证书,从而验证“应用程序”是否可以播放内容。这样你就可以避免将内容泄漏到应用程序以外的其他设备上


但这意味着您需要以某种方式将ssl密钥/密码隐藏在应用程序中。不幸的是,让iOS上的视频播放器使用ssl密钥认证也有问题…

答案一点也不明显。如果您希望密钥传递是安全的,就必须发明自己的密钥传递。一个选项是为授权用户设置cookie,并在密钥服务器中验证cookie。这将阻止某人仅使用密钥url绕过您的安全性

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

浏览器内的合法客户端与仅在地址栏中键入的用户有何不同?

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

但是没有实际的区别,我不认为你遗漏了什么

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

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

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

在我看来,如果一个用户被授权播放视频,不幸的是,他们也可以复制视频——因为没有办法阻止视频的显示被重定向到不再加密的内容——至少在一台在浏览器中播放视频的台式机环境中是如此

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

看看这里

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

浏览器不支持开箱即用的DRM。HTML5规定,无论谁没有实现atm,都可以通过EME(加密媒体扩展)实现

因此,您的选择是:

  • 使用flash并通过自己的算法获取密钥
  • 编写自己的插件(扩展)
  • 像Netflix一样做大,认同浏览器 供应商支持您的DRM,即内容保护和密钥 分配

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

    可以在此处找到一些有趣的指针:

    这将需要在iOS中定制工作,但在Android和web播放器中也需要定制工作

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

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

    这是一个很好的问题,尤其是在大多数情况下,HTTPS只是基于服务器信任的实现,而不是客户端信任。在万维网上,这是可以理解的有用的,因为用户数据是通过服务器传递的,而不是相反的方式