双密钥加密

适用于:Microsoft Purview 双密钥加密、Microsoft PurviewAzure 信息保护

说明:适用于 Windows 的 Azure 信息保护统一标记客户端

服务说明: Microsoft Purview

双密钥加密 (DKE) 同时使用两个密钥来访问受保护的内容。 Microsoft 将一个密钥存储在 Microsoft Azure 中,并由你持有另一个密钥。 使用双密钥加密服务可以完全控制其中一个密钥。 使用 Azure 信息保护统一标记客户端对高度敏感的内容应用保护。

双密钥加密支持云部署和本地部署。 这些部署有助于确保无论在何处存储受保护数据,加密数据都保持不透明。

有关基于云的默认租户根密钥的详细信息,请参阅规划和实现 Azure 信息保护租户密钥

提示

如果你不是 E5 客户,请使用为期 90 天的 Microsoft Purview 解决方案试用版来探索其他 Purview 功能如何帮助组织管理数据安全性和合规性需求。 立即从Microsoft Purview 合规门户试用中心开始。 了解有关 注册和试用条款的详细信息。

你的组织何时应采用 DKE

双密钥加密适用于受最严格保护要求约束的最敏感数据。 DKE 并非适用于所有数据。 通常,你将使用双密钥加密来保护整体数据的一小部分。 在部署之前,应尽职尽责地确定要在此解决方案中涵盖的正确数据。 在某些情况下,可能需要缩小范围,并针对大多数数据使用其他解决方案,例如使用 Microsoft 管理的密钥或 BYOK Microsoft Purview 信息保护。 这些解决方案足以满足不受增强保护和法规要求约束的文档。 此外,这些解决方案使你能够使用最强大的Office 365服务;不能与 DKE 加密内容一起使用的服务。 例如:

  • 传输规则,包括需要查看附件的反恶意软件和垃圾邮件
  • Microsoft Delve
  • 电子数据展示
  • 内容搜索和索引
  • Office Web 应用包括共同创作功能

任何未通过Microsoft 信息保护 (MIP) SDK 与 DKE 集成的外部应用程序或服务都将无法对加密数据执行操作。

Microsoft 信息保护 SDK 1.7+ 支持双密钥加密。 与 SDK 集成的应用程序可以通过足够的权限和集成来推理此数据。

使用Microsoft Purview 信息保护功能 (分类和标记) 来保护大部分敏感数据,并且仅对任务关键型数据使用 DKE。 双密钥加密适用于高度管控行业(如金融服务和医疗保健)中的敏感数据。

如果组织有以下任何要求,可以使用 DKE 帮助保护内容:

  • 你希望确保在所有情况下 ,只有你 才能解密受保护的内容。
  • 你不希望 Microsoft 自行访问受保护的数据。
  • 你具有在地理边界内保存密钥的法规要求。 保存用于数据加密和解密的所有密钥都在数据中心进行维护。

DKE 的系统和许可要求

双密钥加密附带Microsoft 365 E5。 如果没有Microsoft 365 E5许可证,可以注册试用版。 有关这些许可证的详细信息,请参阅 Microsoft 365 安全 & 合规性许可指南

Azure 信息保护。 DKE 适用于敏感度标签,需要 Azure 信息保护。

DKE 敏感度标签可通过 Office 桌面应用中的 AIP 统一标记客户端中的敏感度按钮提供给最终用户。 在要保护和使用受保护文档的每台客户端计算机上安装这些必备组件。

Microsoft Office Apps 企业 版 2009 或更高版本 (桌面版 Word、Excel、PowerPoint 和 Windows 上的 Outlook) 。

Azure 信息保护统一标记客户端版本 2.14.93.0 或更高版本。 从 Microsoft 下载中心下载并安装统一标记客户端。

用于存储和查看受 DKE 保护的内容的支持环境

支持的应用程序Microsoft 365 企业应用版 Windows 上的客户端,包括 Word、Excel、PowerPoint 和 Outlook。

联机内容支持。 可以在 Microsoft SharePoint 和 OneDrive for Business 中联机存储受双重密钥加密保护的文档和文件。 在上传到这些位置之前,必须使用受支持的应用程序使用 DKE 标记和保护文档和文件。 可以通过电子邮件共享加密内容,但无法联机查看加密的文档和文件。 相反,必须使用本地计算机上支持的桌面应用程序和客户端查看受保护的内容。

仅 Outlook 加密且不转发方案 为受支持的方案配置 DKE 会在标签配置体验中创建警告。 对于仅加密和不转发,这些不受支持的方案在标签配置体验中没有警告。

部署 DKE 概述

你将按照这些常规步骤设置 DKE。 完成这些步骤后,最终用户可以使用双密钥加密保护高度敏感数据。

  1. 按照本文所述部署 DKE 服务。

  2. 创建具有双密钥加密的标签。 在Microsoft Purview 合规门户中,导航到“信息保护”,并使用双密钥加密创建新标签。 请参阅 使用敏感度标签来限制对内容的访问以应用加密

  3. 使用双密钥加密标签。 通过从 Microsoft Office 的“敏感度”功能区中选择“双密钥加密”标签来保护数据。

可通过多种方式完成某些步骤来部署双密钥加密。 本文提供详细说明,以便经验不足的管理员成功部署服务。 如果你愿意这样做,可以选择使用自己的方法。

部署 DKE

本文和部署视频使用 Azure 作为 DKE 服务的部署目标。 如果要部署到其他位置,则需要提供自己的值。

你将按照这些常规步骤为组织设置双密钥加密。

  1. 安装 DKE 服务的软件先决条件
  2. 克隆双密钥加密 GitHub 存储库
  3. 修改应用程序设置
  4. 生成测试密钥
  5. 生成项目
  6. 部署 DKE 服务并发布密钥存储
  7. 验证部署
  8. 注册密钥存储
  9. 使用 DKE 创建敏感度标签
  10. 在客户端中启用 DKE
  11. 将受保护的文件从 HYOK 标签迁移到 DKE 标签

完成后,可以使用 DKE 加密文档和文件。 有关信息,请参阅 在 Office 中将敏感度标签应用于文件和电子邮件

安装 DKE 服务的软件先决条件

在要安装 DKE 服务的计算机上安装这些必备组件。

.NET Core 7.0 SDK。 从下载 .NET Core 7.0 下载并安装 SDK。

Visual Studio Code。 从 https://code.visualstudio.com/下载Visual Studio Code。 安装后,运行Visual Studio Code并选择“查看>扩展”。 安装这些扩展。

  • 用于Visual Studio Code的 C#

  • NuGet 包管理器

Git 资源。 下载并安装以下项之一。

Openssl 部署 DKE 后,必须安装 OpenSSL 才能 生成测试密钥 。 请确保从环境变量路径正确调用它。 例如,有关详细信息,请参阅中的 https://www.osradar.com/install-openssl-windows/ “将安装目录添加到 PATH”。

克隆 DKE GitHub 存储库

Microsoft 在 GitHub 存储库中提供 DKE 源文件。 克隆存储库以在本地生成项目供组织使用。 DKE GitHub 存储库位于 https://github.com/Azure-Samples/DoubleKeyEncryptionService

以下说明适用于缺乏经验的 git 或Visual Studio Code用户:

  1. 在浏览器中,转到: https://github.com/Azure-Samples/DoubleKeyEncryptionService

  2. 在屏幕右侧,选择“ 代码”。 你的 UI 版本可能会显示 “克隆”或“下载 ”按钮。 然后,在显示的下拉列表中,选择复制图标,将 URL 复制到剪贴板。

    例如:

    从 GitHub 克隆双密钥加密服务存储库。

  3. 在“Visual Studio Code”中,选择“查看>命令面板”,然后选择“Git:克隆”。 若要跳转到列表中的 选项,请开始键入 git: clone 以筛选条目,然后从下拉列表中选择它。 例如:

    Visual Studio Code GIT:Clone 选项。

  4. 在文本框中,粘贴从 Git 复制的 URL,然后选择“ 从 GitHub 克隆”。

  5. 在显示的 “选择文件夹 ”对话框中,浏览到并选择要存储存储库的位置。 在提示符下,选择“ 打开”。

    存储库将在 Visual Studio Code 打开,并在左下角显示当前 Git 分支。 例如,分支应为 分支。 例如:

    Visual Studio Code显示主分支的 DKE 存储库的屏幕截图。

  6. 如果你不在主分支上,则需要选择它。 在“Visual Studio Code”中,选择分支,并从显示的分支列表中选择“main”。

    重要

    选择主分支可确保具有生成项目的正确文件。 如果不选择正确的分支,部署将失败。

现在已在本地设置了 DKE 源存储库。 接下来, 修改组织的应用程序设置

修改应用程序设置

若要部署 DKE 服务,必须修改以下类型的应用程序设置:

在 appsettings.json 文件中修改应用程序设置。 此文件位于在 DoubleKeyEncryptionService\src\customer-key-store 下本地克隆的 DoubleKeyEncryptionService 存储库中。 例如,在 Visual Studio Code 中,可以浏览到文件,如下图所示。

查找 DKE 的 appsettings.json 文件。

密钥访问设置

选择是使用电子邮件授权还是角色授权。 DKE 一次仅支持其中一种身份验证方法。

  • Email授权。 允许组织仅基于电子邮件地址授权访问密钥。

  • 角色授权。 允许组织基于 Active Directory 组授权访问密钥,并要求 Web 服务可以查询 LDAP。

使用电子邮件授权设置 DKE 的密钥访问设置
  1. 打开 appsettings.json 文件并找到设置 AuthorizedEmailAddress

  2. 添加要授权的一个或多个电子邮件地址。 使用双引号和逗号分隔多个电子邮件地址。 例如:

    "AuthorizedEmailAddress": ["email1@company.com", "email2@company.com ", "email3@company.com"]
    
  3. LDAPPath找到 设置并删除双引号之间的文本If you use role authorization (AuthorizedRoles) then this is the LDAP path.。 保留双引号。 完成后,设置应如下所示。

    "LDAPPath": ""
    
  4. 找到设置 AuthorizedRoles 并删除整行。

此图显示了已正确设置电子邮件授权格式的 appsettings.json 文件。

显示电子邮件授权方法的 appsettings.json 文件。

使用角色授权设置 DKE 的密钥访问设置
  1. 打开 appsettings.json 文件并找到设置 AuthorizedRoles

  2. 添加要授权的 Active Directory 组名称。 使用双引号和逗号分隔多个组名称。 例如:

    "AuthorizedRoles": ["group1", "group2", "group3"]
    
  3. LDAPPath找到 设置并添加 Active Directory 域。 例如:

    "LDAPPath": "contoso.com"
    
  4. 找到设置 AuthorizedEmailAddress 并删除整行。

此图显示了为角色授权正确设置格式的 appsettings.json 文件。

显示角色授权方法的 appsettings.json 文件。

租户和密钥设置

DKE 租户和密钥设置位于 appsettings.json 文件中。

配置 DKE 的租户和密钥设置
  1. 打开 appsettings.json 文件。

  2. 找到 设置, ValidIssuers 并将 替换为 <tenantid> 租户 ID。 可以通过转到Azure 门户并查看租户属性来查找租户 ID。 例如:

    "ValidIssuers": [
      "https://sts.windows.net/9c99431e-b513-44be-a7d9-e7b500002d4b/"
    ]
    

注意

如果要启用对密钥存储的外部 B2B 访问,还需要将这些外部租户包含在有效颁发者列表中。

JwtAudience找到 。 将 替换为 <yourhostname> 将运行 DKE 服务的计算机的主机名。 例如:“https://dkeservice.contoso.com"

重要

的值 JwtAudience 必须与主机的名称 完全匹配。

  • TestKeys:Name. 输入密钥的名称。 例如:TestKey1
  • TestKeys:Id. 创建 GUID 并将其输入为 TestKeys:ID 值。 例如,DCE1CC21-FF9B-4424-8FF4-9914BD19A1BE。 可以使用 联机 GUID 生成器 等网站随机生成 GUID。

此图显示了 appsettings.json 中租户和密钥设置的正确格式。 LDAPPath 为角色授权配置。

在 appsettings.json 文件中显示 DKE 的正确租户和密钥设置。

生成测试密钥

定义应用程序设置后,即可生成公共和专用测试密钥。

若要生成密钥,请执行以下操作:

  1. 在 Windows“开始”菜单中,运行 OpenSSL 命令提示符。

  2. 更改为要保存测试密钥的文件夹。 通过完成此任务中的步骤创建的文件存储在同一文件夹中。

  3. 生成新的测试密钥。

    openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
    
  4. 生成私钥。

    如果安装了 OpenSSL 版本 3 或更高版本,请运行以下命令:

openssl rsa -in key.pem -out privkeynopass.pem -outform PEM -traditional

否则,请运行以下命令:

openssl rsa -in key.pem -out privkeynopass.pem -outform PEM
  1. 生成公钥。

    openssl rsa -in key.pem -pubout > pubkeyonly.pem
    
  2. 在文本编辑器中,打开 pubkeyonly.pem。 将 pubkeyonly.pem 文件中的所有内容(第一行和最后一行 PublicPem 除外)复制到 appsettings.json 文件的 节中。

  3. 在文本编辑器中,打开 privkeynopass.pem。 将 privkeynopass.pem 文件中的所有内容(第一行和最后一行除外) PrivatePem 复制到 appsettings.json 文件的 节中。

  4. 删除 和 PrivatePem 节中的所有PublicPem空格和换行符。

    重要

    复制此内容时,请勿删除任何 PEM 数据。

  5. 在 Visual Studio Code 中,浏览到 Startup.cs 文件。 此文件位于在 DoubleKeyEncryptionService\src\customer-key-store 下本地克隆的 DoubleKeyEncryptionService 存储库中。

  6. 查找以下行:

        #if USE_TEST_KEYS
        #error !!!!!!!!!!!!!!!!!!!!!! Use of test keys is only supported for testing,
        DO NOT USE FOR PRODUCTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        services.AddSingleton<ippw.IKeyStore, ippw.TestKeyStore>();
        #endif
    
  7. 将这些行替换为以下文本:

    services.AddSingleton<ippw.IKeyStore, ippw.TestKeyStore>();
    

    最终结果应如下所示。

    用于公共预览版的 startup.cs 文件。

现在,你已准备好 生成 DKE 项目

生成项目

使用以下说明在本地生成 DKE 项目:

  1. 在 Visual Studio Code的 DKE 服务存储库中,选择“查看>命令面板”,然后在提示符下键入“生成”。

  2. 从列表中选择 “任务:运行生成任务”。

    如果未找到生成任务,请选择“ 配置生成任务 ”并为 .NET core 创建一个,如下所示。

    为 .NET 配置缺少的生成任务。

    1. 选择“从模板创建 tasks.json”。

      从 DKE 的模板创建 tasks.json 文件。

    2. 从模板类型列表中,选择“ .NET Core”。

      为 DKE 选择正确的模板。

    3. 在生成部分中,找到 customerkeystore.csproj 文件的路径。 如果不存在,请添加以下行:

      "${workspaceFolder}/src/customer-key-store/customerkeystore.csproj",
      
    4. 再次运行生成。

  3. 验证输出窗口中是否没有红色错误。

    如果出现红色错误,检查控制台输出。 确保正确完成了前面的所有步骤,并且存在正确的生成版本。

设置现已完成。 在发布密钥存储之前,在 appsettings.json 中,对于 JwtAudience 设置,请确保主机名的值与App 服务主机名完全匹配。

部署 DKE 服务并发布密钥存储

对于生产部署,请在第三方云中部署服务或 发布到本地系统

你可能更倾向于使用其他方法来部署密钥。 选择最适合组织的方法。

对于试点部署,可以在 Azure 中部署并立即开始。

创建用于托管 DKE 部署的 Azure Web 应用实例

若要发布密钥存储,需要创建一个 Azure 应用服务 实例来托管 DKE 部署。 接下来,将生成的密钥发布到 Azure。

  1. 在浏览器中,登录到 Microsoft Azure 门户,然后转到“应用服务>添加”。

  2. 选择订阅和资源组并定义实例详细信息。

    • 输入要安装 DKE 服务的计算机的主机名。 确保其名称与 appsettings.json 文件中为 JwtAudience 设置定义的名称相同。 为名称提供的值也是 WebAppInstanceName。

    • 对于 “发布”,请选择“ 代码”,对于 “运行时堆栈”,请选择“ .NET Core 3.1”。

    例如:

    添加App 服务。

  3. 在页面底部,选择“ 查看 + 创建”,然后选择“ 添加”。

  4. 执行以下操作之一来发布生成的密钥:

通过 ZipDeployUI 发布

  1. 转到 https://<WebAppInstanceName>.scm.azurewebsites.net/ZipDeployUI

    例如:https://dkeservice.contoso.scm.azurewebsites.net/ZipDeployUI

  2. 在密钥存储的代码库中,转到 customer-key-store\src\customer-key-store 文件夹,并验证此文件夹是否包含 customerkeystore.csproj 文件。

  3. 运行: dotnet publish

    输出窗口显示部署发布的目录。

    例如:customer-key-store\src\customer-key-store\bin\Debug\netcoreapp3.1\publish\

  4. 将发布目录中的所有文件发送到.zip文件。 创建.zip文件时,请确保目录中的所有文件都位于.zip文件的根级别。

  5. 将创建的 .zip 文件拖放到上面打开的 ZipDeployUI 站点。 例如:https://dkeservice.scm.azurewebsites.net/ZipDeployUI

DKE 已部署,你可以浏览到已创建的测试密钥。 继续在下面 验证部署

通过 FTP 发布

  1. 连接到上面创建的App 服务。

    在浏览器中,转到:Azure 门户>App 服务>部署中心>手动部署>FTP>仪表板

  2. 将显示的连接字符串复制到本地文件。 你将使用这些字符串连接到 Web App 服务并通过 FTP 上传文件。

    例如:

    从 FTP 仪表板复制连接字符串。

  3. 在密钥存储的代码库中,转到 customer-key-store\src\customer-key-store 目录

  4. 验证此目录是否包含 customerkeystore.csproj 文件。

  5. 运行: dotnet publish

    输出包含部署发布的目录。

    例如:customer-key-store\src\customer-key-store\bin\Debug\netcoreapp3.1\publish\

  6. 将发布目录中的所有文件发送到 zip 文件。 创建.zip文件时,请确保目录中的所有文件都位于.zip文件的根级别。

  7. 从 FTP 客户端,使用复制的连接信息连接到App 服务。 将上一步中创建的 .zip 文件上传到 Web 应用的根目录。

DKE 已部署,你可以浏览到创建的测试密钥。 接下来, 验证部署

验证部署

使用上述方法之一部署 DKE 后,请验证部署和密钥存储设置。

运行:

src\customer-key-store\scripts\key_store_tester.ps1 dkeserviceurl/mykey

例如:

key_store_tester.ps1 https://dkeservice.contoso.com/TestKey1

确保输出中未显示任何错误。 准备就绪后, 注册密钥存储

键名称区分大小写。 输入 appsettings.json 文件中显示的密钥名称。

注册密钥存储

通过以下步骤,可以注册 DKE 服务。 在开始创建标签之前,注册 DKE 服务是部署 DKE 的最后一步。

注册 DKE 服务:

  1. 在浏览器中,打开 Microsoft Azure 门户,然后转到“所有服务>标识>应用注册”。

  2. 选择“ 新建注册”,并输入有意义的名称。

  3. 从显示的选项中选择帐户类型。

    例如:

    新建应用注册。

  4. 在页面底部,选择“ 注册 ”以创建新的应用注册。

  5. 在新的应用注册中,在左窗格中的 “管理”下,选择“ 身份验证”。

  6. 选择添加平台

  7. “配置平台 ”弹出窗口中,选择“ Web”。

  8. “重定向 URI”下,输入双密钥加密服务的 URI。 输入App 服务 URL,包括主机名和域。

    例如:https://mydkeservicetest.com

    • 输入的 URL 必须与部署 DKE 服务的主机名匹配。
    • 域必须是 已验证的域
    • 在所有情况下,方案都必须是 https

    确保主机名与App 服务主机名完全匹配。

  9. “隐式授予”下,选中“ ID 令牌 ”复选框。

  10. 选择保存以保存所做的更改。

  11. 在左窗格中,选择“应用程序 ID URI”旁边的“公开 API”,输入App 服务 URL(包括主机名和域),然后选择“设置”。

  12. 仍在 “公开 API ”页上的“ 此 API 定义的作用域 ”区域中,选择“ 添加范围”。 在新范围内:

    1. 将范围名称定义为 user_impersonation

    2. 选择可以同意的管理员和用户。

    3. 定义所需的任何剩余值。

    4. 选择“添加作用域”。

    5. 选择顶部的“ 保存” 以保存所做的更改。

  13. 仍在 “公开 API ”页上的“ 授权客户端应用程序 ”区域中,选择“ 添加客户端应用程序”。

    在新客户端应用程序中:

    1. 将客户端 ID 定义为 d3590ed6-52b3-4102-aeff-aad2292ab01c。 此值是 Microsoft Office 客户端 ID,使 Office 能够获取密钥存储的访问令牌。

    2. “授权范围”下,选择 user_impersonation 范围。

    3. 选择“添加应用程序”

    4. 选择顶部的“ 保存” 以保存所做的更改。

    5. 重复这些步骤,但这次将客户端 ID 定义为 c00e9d32-3c8d-4a7d-832b-029040e7db99。 此值是 Azure 信息保护统一标记客户端 ID。

DKE 服务现已注册。 继续使用 DKE 创建标签

使用 DKE 创建敏感度标签

在Microsoft Purview 合规门户中,创建新的敏感度标签,并像其他方式一样应用加密。 选择“ 使用双密钥加密 ”,并输入密钥的终结点 URL。 需要在 URL 的 appsettings.json 文件的“TestKeys”部分中包括提供的密钥名称。

例如:https://testingdke1.azurewebsites.net/KEYNAME

在Microsoft Purview 合规门户中选择“使用双密钥加密”。

添加的任何 DKE 标签都将开始在最新版本的 Microsoft 365 企业应用版 中向用户显示。

注意

客户端可能需要长达 24 小时才能使用新标签进行刷新。

在客户端中启用 DKE

如果你是 Office 预览体验成员,则会为你启用 DKE。 否则,请通过添加以下注册表项为客户端启用 DKE:

   [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSIPC\flighting]
   "DoubleKeyProtection"=dword:00000001

   [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSIPC\flighting]
   "DoubleKeyProtection"=dword:00000001

将受保护的文件从 HYOK 标签迁移到 DKE 标签

如果需要,设置完 DKE 后,可以将使用 HYOK 标签保护的内容迁移到 DKE 标签。 若要迁移,请使用Microsoft Purview 信息保护扫描仪。 若要开始使用扫描程序,请参阅 了解信息保护扫描程序

如果不迁移内容,HYOK 保护的内容将不受影响。

其他部署选项

我们意识到,对于高度管控行业的某些客户来说,这种使用基于软件的密钥的标准参考实现可能不足以满足其增强的合规性义务和需求。 我们已与第三方硬件安全模块 (HSM) 供应商合作,以支持 DKE 服务中增强的密钥管理选项,包括:

请直接与这些供应商联系,获取有关其市场内 DKE HSM 解决方案的详细信息和指导。