当前位置: 首页 > 知识库问答 >
问题:

javascript - 数字版权管理(DRM)是如何保证安全的?

魏雅惠
2023-09-19

DRM 是给源文件加密,通过密钥解密播放。

那么在客户端就会有文件+密钥,既然客户端能解密,那么所有人都能解密,不就不安全了吗?所以他是如何保证安全的。

是不是可以通过转录,比如说 Web mediaSource 之类的东西直接把解密后的就存了?

共有2个答案

方和顺
2023-09-19

最早的那种纯应用层实现的 DRM 放到今天确实约等于裸奔了,所以现在的玩法儿是成立联盟、制定标准、然后和基础设施厂商(比如浏览器、操作系统、甚至机顶盒这类硬件厂商)联合。

比如微软的 PlayReady 那套方案,就是有不同安全级别的规格,其中最高级别的就属于软硬件一体化的,解密靠硬件。

而浏览器里的一般是靠内置的 CDM(Content Decryption Module,内容解密模块),这部分都是闭源的,并且涉及到网络通信的部分基本要么是私有协议、要么是双向 SSL。网页跟 CDM 之间通信靠 EME(Encrypted Media Extensions,加密媒体扩展),媒体内容本身对于 JS 层是不暴露的。并且它们都还会不断升级更新。

但无论如何,这些技术手段都只能是增大破解难度,不可能完全防止破解的,毕竟终端怎么着都是在用户手里。这些玩意儿能不能有人可以完美破解掉?我相信肯定是能的,但成本肯定相当之高,而搞破解的除非是单纯为了炫技,否则得不偿失 —— 毕竟对音视频来说直接 HDMI 转录就好了、哪怕是专用硬件那也阻挡不了最古老的“摄屏”这招啊。反正都可以很 easy 地这么干了,谁还会去费力琢磨怎么从软件层面上破解 DRM 了呢?

虽说现在的 DRM 一般都还有数字水印技术,它防不了转录本身,只是可以在外泄后定位到设备甚至用户。但这同样只能威慑住“良民”,而专门搞这玩意儿的那都是光脚的不怕穿鞋的,就算定位了又能怎样呢?

司徒高寒
2023-09-19

DRM系统用的是强加密算法来加密数字内容。就算内容被下载到客户端,也没那么简单解密。加密算法一般是非对称的,里面有公钥和私钥,只有DRM服务器有私钥,客户端只有公钥,这样就防止了直接解密。还有就是许可证,用许可证来控制访问和用数字内容,许可证一般和用户身份关联,包有效期、设备限制和访问权限,只有合法的用户,有效期内,才能有许可证,DRM客户端一般把许可证和解密密钥存储在安全的存储区域里,硬件安全模块(HSM)或受信任的执行环境(TEE),这些存储区里面一般有硬件级别的安全,不容易被攻击,传输的时候,用SSL/TLS安全协议进行加密传输,以防内容在传输过程里被拦截或者窃取。还有播放限制,限制多个设备上的同时播放、禁止录制或禁止内容截屏,DRM系统会定期更新许可证和密钥,DRM客户端软件可能会用代码混淆和反调试技术,还有数字水印,技术层面肯定不能说天衣无缝,但是层层的技术手段,可以大范围的让普通用户去正规渠道付费

 类似资料:
  • 如下,有什么办法在编辑器层面(比如vscode)保证代码安全么? 人总是会粗心大意的,if(1 == value)写起来也不符合直觉…… 或者有一些小技巧讨论一下也行。 TS伪代码如下

  • 本文向大家介绍如何保证线程安全?相关面试题,主要包含被问及如何保证线程安全?时的应答技巧和注意事项,需要的朋友参考一下 考察点:线程 通过合理的时间调度,避开共享资源的存取冲突。另外,在并行任务设计上可以通过适当的策略,保证任务与任务之间不存在共享资源,设计一个规则来保证一个客户的计算工作和数据访问只会被一个线程或一台工作机完成,而不是把一个客户的计算工作分配给多个线程去完成。

  • 本文向大家介绍java枚举是如何保证线程安全的,包括了java枚举是如何保证线程安全的的使用技巧和注意事项,需要的朋友参考一下 前言 写在前面:Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能。本文将深入分析枚举的源码,看一看枚举是怎么实现的,他是如何保证线程安全的

  • volatile的写操作,无法保证线程安全。例如假如线程1,线程2 在进行read,load 操作中,发现主内存中count的值都是5,那么都会加载这个最新的值,在线程1对count进行修改之后,会write到主内存中,主内存中的count变量就会变为6;线程2由于已经进行read,load操作,在进行运算之后,也会更新主内存count的变量值为6;导致两个线程及时用volatile关键字修改之后,还是会存在并发的情况。

  • 即使我在Mule EE上运行,Mule Security Manager依赖性也没有得到解决。代码如下: http://www.mulesoft.org/schema/mule/spring-security http://www.mulesoft.org/schema/mule/spring-security/current/mule-spring-security.xsd http://www

  • 有没有办法给管理servlet增加登录安全性? 似乎在V0.7中,您可以将以下两个添加到您的yaml文件中: 然而,我在最新版本(0.9.2)中尝试了,它给我一个错误,说:server.yaml有一个错误: 这是我拥有的: