简单端到端系统

在典型用途中,Microsoft PlayReady通过为媒体文件提供许可证来保护内容。 无需隐藏文件、使其不可访问,或在文件从系统传输到系统时实施特殊保护。 换句话说,不需要操作系统要求或高安全性的文件传输机制。 但是,如果文件受 PlayReady 保护,则向好友复制文件并将其交给好友不会允许该好友使用该文件。 若要使用媒体文件,用户需要许可证。 此许可证是对媒体文件) (内容进行控制的主要手段。 许可证授予单个客户端 (,例如媒体播放器) 或域。 许可证在其他客户端或其他域上不起作用。

每个许可证都包含权限和限制,具体定义内容的使用方式以及条件是什么。 例如,音乐文件许可证可能启用“播放权限”,但限制可以播放内容的应用程序的安全级别。 许可证可能有效期为 2017 年 10 月 1 日至 2017 年 11 月 1 日。 单个文件可能有多个许可证。 只要其中一个许可证授予适当的权限,并且限制不会阻止访问,用户将能够访问和使用其内容。

端到端视频服务概述

下图包含端到端视频服务的高级外观,包括左侧的服务后端和右侧的客户端。

Video Service Architecture

在图的左侧,可以看到该服务有一些服务器来流式传输视频 (内容分发网络) 。 还有一些服务器允许用户浏览内容并选择他们想要播放的内容 (用户界面) 。 此外,还有一些服务器允许用户登录并进行身份验证,以及支付内容 (身份验证、支付) 费用。 此外,还有 PlayReady 许可证服务器。

图右侧是客户端。 客户端可以是Windows应用程序、智能手机应用程序或特定设备,例如设置顶部框、网络接收器等。 其中一些客户端可能在其播放器中附带 PlayReady 集成客户端,例如,OEM 可能已在操作系统或硬件中集成 PlayReady。 其他人可能附带在应用商店中发布的应用程序中的客户端。 玩家在客户端上集成 PlayReady 有很多不同的选项。

本主题将重点介绍 PlayReady 对服务执行的操作,如下图所示。

What PlayReady Does For The Service

PlayReady 提供的方法是客户端从服务器请求许可证的方法,然后通过开放网络传递保护受保护表单中内容的密钥。 PlayReady 执行的第二件事是向客户端提供权限和正确的限制。 借助 PlayReady,该服务能够提供内容播放密钥,但例如,仅允许客户端在租赁方案中使用该密钥两天。 因此,PlayReady 提供了一种使用密钥声明权限和权利限制的方法。

PlayReady 还提供了一种方法来更安全地将内容密钥存储在客户端上,以便客户端能够使用该客户端密钥解密内容进行呈现,但不允许将内容保存在明文中并与其他用户共享。

为确保 PlayReady 客户端的行为正确,PlayReady 要求硬件和软件实现遵循符合性和可靠性规则。 这些规则控制客户端解密或处理 PlayReady 内容时必须的行为方式。  他们还要求客户端正确处理许可证中找到的限制。  因此,如果客户端收到使用内容密钥的说明不超过 48 小时,则客户端必须按照这些说明进行操作。 这些规则由 Microsoft 在 合规性和可靠性规则中提供,由客户端开发人员在客户端中强制执行这些规则。

基本加密和许可过程

以下步骤说明了内容的端到端加密和许可过程,以及 PlayReady 在此过程中的参与方式。

下图包含一个资产(音频/视频文件)尚未加密。 用于加密内容的方法完全由内容提供程序决定,并且未作为 PlayReady 的一部分提供。

Encrypting the Content File

  1. 若要加密此文件,服务需要使用密钥生成器在其内容加密器中生成将用于加密内容的新内容密钥。 此内容密钥稍后将从 PlayReady 许可证服务器传送到客户端,以便解密内容并为用户呈现。 除了内容密钥(这是私有值)之外,加密服务还会将密钥标识符 (KeyID) (即 GUID)与内容密钥相关联。 KeyID 是一个公共值。

  2. 密钥和 KeyID 在加密时设计,存储在密钥管理系统中,通常是某种数据库。 PlayReady 不提供密钥管理系统,因此由与广播公司一起构建服务的服务或合作伙伴提供密钥管理系统。

  3. 除了将密钥和 KeyID 存储在密钥管理系统中外,还需要将 KeyID 适应打包程序,然后生成标头。 此标头由服务或合作伙伴根据 PlayReady 标头规范设置格式,然后在内容文件头中的清除中拟合。

    此时,音频和视频将使用 KeyID 进行加密,并且你有一个已准备好传送到客户端的加密内容文件。

    Authenticating the User

  4. 现在,客户端可以开始使用内容。 客户端可能要做的第一件事是,通过提供登录名和密码对用户进行身份验证,通常通过提供登录名和密码对用户进行身份验证,但用于对用户和设备进行身份验证的任何其他机制都很好。 通常,在验证用户后,会话令牌会返回到客户端。 请注意,任何用于用户身份验证的机制,都完全由用户如何进行身份验证的服务决定;PlayReady 不提供这项技术。

    Content Delivery

  5. 接下来,内容将传送到客户端 (,例如,客户端已开始下载构成内容) 的数据流的一部分。 然后,客户端开始分析此内容,并发现它已加密并使用未知密钥,但包含 KeyID。

    License Acquisition

  6. 此时,客户端将向许可证服务器发送许可证获取请求。

  7. 然后,许可证服务器会与身份验证服务进行交互,以验证用户。 通常,许可证服务器做的第一件事是验证客户端/用户是否有权获得该特定许可证。 同样,PlayReady 不提供该布局 (身份验证) ,我们只是提供许可证服务器。 然后,身份验证服务通常会响应“是”或“否”,或者对于 (的限制(例如,此用户具有此特定电影的权利),但只有视频质量较低,因为用户没有最高质量的订阅级别,具体取决于用户每月) 支付的金额。

  8. 然后,许可证服务器根据 KeyID 从存储密钥的密钥管理系统请求密钥的值,密钥管理系统响应该请求。 只是为了重申,PlayReady 不提供密钥管理系统的组件,因此会有一个请求来自 PlayReady 许可证服务器到服务构建的用于存储密钥的任何组件。

  9. 密钥由许可证服务器接收,许可证服务器可以传递许可证。 受保护的 PlayReady 许可证响应包括密钥的值以及要强制执行的权限和权限限制列表。

    虽然此演示显示 PlayReady 许可证服务器仅传递一个密钥,但许可证服务器有可能在一个许可证响应中传递许可证堆栈。 在一个事务中可以包含多个许可证,如果内容受到多个密钥的保护,或者服务希望提前传递多个密钥,则每个许可证都提供一个密钥,例如,服务知道用户将连续侦听八个曲目。

    License Store

  10. PlayReady 提供的另一项技术是将密钥和权限存储在客户端(称为许可证Microsoft Store)的方法。

    许可证Microsoft Store通常称为 HDS,因为许可证Microsoft Store的结构是哈希数据存储。 设备上可以有多个类型的许可证存储 - 一个应用程序可以包含自己的 HDS,以确保一家公司的 HDS 不在与另一家公司的 HDS 相同的文件中。 完全由客户端开发人员做出此设计选择。 例如,在 Windows 上使用 PlayReady,Microsoft 选择有一个 HDS for Internet Explorer,另一个用于每个站点Microsoft Edge,以及每个Windows通用应用一个 HDS。

    HDS 可以以持久性方式存储,例如在设备的硬盘驱动器或永久性内存上,也可以以非持久性方式(如非永久性内存中)存储。 因此,当许可证服务器颁发许可证时,它可以设置许可证的属性,指示许可证不应存储在客户端的硬盘驱动器上,或者对于设置顶部框或手机的情况,它不应存储在永久性内存中,因为作为服务,你不希望许可证存储在永久性内存中。 在这种情况下,只需将 HDS 存储在播放器应用程序的上下文中,这样一旦用户关闭播放器应用程序,许可证及其权限就会消失。