如何为 ClearKey DRM 生成十六进制字符串

问题描述

我想使用 clearkeys 对我的内容进行编码。我正在使用 DASH 协议。我知道如何加密和播放加密内容。我的问题是如何生成这些密钥,以便我可以启动自己的清晰密钥许可服务器。

解决方法

值得一提的是,ClearKey 并未真正被视为 DRM - 它缺乏大多数 DRM 所包含的安全密钥交换机制。用 DASH 论坛自己的话来说,ClearKey 是“在 HTTPS 交付的令牌身份验证和 DRM 之间提供一定程度的内容保护”。

如果这对您有好处,那么它很可能是您的用例的合适选择,并且确实为打击盗版提供了障碍。

密钥本身是常规的 16 字节 AES 加密密钥。

您可以创建自己的密钥生成器,但您应该了解一些最佳实践 - 参见例如:https://stackoverflow.com/a/3452620/334402 (Java) 和 https://stackoverflow.com/a/42573924/334402 (.NET - 注意评论中的讨论也重新字符串)。

还有一些网站和服务可以生成密钥(请参见下面的示例),但我认为根据您的问题,您更有可能希望将其构建到您自己的解决方案中,如上所述。

(更新 - 请参阅评论中的讨论)- EME 规范定义了浏览器如何处理加密内容,包括它们如何请求许可证密钥,包含有关返回密钥编码的以下内容:

“kty”(密钥类型) "oct"(八位字节序列)

“k”(键值) 包含对称密钥的八位字节序列的base64url编码

值 “孩子”(钥匙 ID) 包含key ID值的八位字节序列的base64url编码

这是专门针对 ClearKey 的 - DRM 系统的密钥在加密的 DRM 系统许可请求和响应消息中进行安全通信。

这里需要注意的重要一点是“base64url”编码 - 这是 base64 编码的一种变体,它是“url 友好的”并且不包括字符 + 和 /。有关 base64 变体的更多信息,请访问:

这样做的影响是,您必须对符合 EME 的解决方案(即大多数(或所有...)浏览器播放器)的 ClearKey 许可响应使用 base63url 编码。

另一个注意事项 - 一旦您拥有密钥,就可以通过清单中包含的许可服务器 URL 请求它们,对于某些 DRM,或者密钥本身可以直接嵌入到清单中。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...