双密钥加密
适用于:Microsoft Purview 双密钥加密、Microsoft Purview、Azure 信息保护
服务说明: Microsoft Purview
双重密钥加密 (DKE) 一起使用两个密钥来访问受保护的内容。 Microsoft 将一个密钥存储在 Microsoft Azure 中,并由你持有另一个密钥。 使用双键加密服务保持对其中一个密钥的完全控制。 使用 Azure 信息保护统一标记客户端对高度敏感的内容应用保护。
双重密钥加密支持云和本地部署。 这些部署有助于确保加密数据在存储受保护数据时保持不透明。
有关默认的基于云的租户根密钥的详细信息,请参阅规划和实现 Azure 信息保护租户密钥。
组织何时应采用 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 统一标签客户端中的敏感度按钮提供给最终用户。 在要保护和使用受保护文档的每个客户端计算机上安装这些先决条件。
适用于企业版 2009 或更高版本的 Microsoft Office Apps (Windows 上的 Word、PowerPoint 和 Excel) 桌面版本。
Azure 信息保护统一标记客户端 版本 2.7.93.0 或更高版本。 从 Microsoft 下载中心下载并安装统一标签客户端。
用于存储和查看受 DKE 保护的内容支持的环境
支持的应用程序。 Microsoft 365 企业应用版 Windows 上的客户端,包括 Word、Excel 和 PowerPoint。
联机内容支持。 可以在 Microsoft SharePoint 和 OneDrive for Business 中联机存储受双重密钥加密保护的文档和文件。 在上传到这些位置之前,必须使用受支持的应用程序使用 DKE 标记和保护文档和文件。 可以通过电子邮件共享加密的内容,但无法在线查看加密的文档和文件。 相反,必须使用本地计算机上支持的桌面应用程序和客户端查看受保护的内容。
部署 DKE 概述
你将按照这些常规步骤设置 DKE。 完成这些步骤后,最终用户可以使用双键加密保护高度敏感的数据。
按本文所述部署 DKE 服务。
使用双键加密创建标签。 在Microsoft Purview 合规门户中,导航到 信息保护,并使用双键加密创建新标签。 请参阅 使用敏感度标签应用加密来限制对内容的访问。
使用双键加密标签。 通过从 Microsoft Office 中的“敏感度”功能区中选择“双键加密”标签来保护数据。
可以通过多种方式完成部署双键加密的某些步骤。 本文提供了详细的说明,使经验不足的管理员能够成功部署服务。 如果你愿意这样做,可以选择使用自己的方法。
部署 DKE
本文和部署视频使用 Azure 作为 DKE 服务的部署目标。 如果要部署到另一个位置,则需要提供自己的值。
你将按照以下常规步骤为组织设置双重密钥加密。
- 为 DKE 服务安装软件先决条件
- 克隆双键加密 GitHub 存储库
- 修改应用程序设置
- 生成测试密钥
- 生成项目
- 部署 DKE 服务并发布密钥存储
- 验证部署
- 注册密钥存储
- 使用 DKE 创建敏感度标签
- 在客户端中启用 DKE
- 将受保护的文件从 HYOK 标签迁移到 DKE 标签
完成后,可以使用 DKE 加密文档和文件。 有关信息,请参阅 Office 中的文件和电子邮件应用敏感度标签。
为 DKE 服务安装软件先决条件
在要在其中安装 DKE 服务的计算机上安装这些先决条件。
.NET Core 3.1 SDK。 从 下载 .NET Core 3.1 下载并安装 SDK。
Visual Studio Code。 从https://code.visualstudio.com/中下载Visual Studio Code 。 安装后,运行Visual Studio Code并选择 “查看 > 扩展”。 安装这些扩展。
C# for Visual Studio Code
NuGet 包管理器
Git 资源。 下载并安装以下内容之一。
Openssl 部署 DKE 后,必须安装 OpenSSL 才能 生成测试密钥 。 请确保从环境变量路径正确调用它。 例如,有关详细信息,请参阅“将安装目录添加到 PATH”。https://www.osradar.com/install-openssl-windows/
克隆 DKE GitHub 存储库
Microsoft 在 GitHub 存储库中提供 DKE 源文件。 克隆存储库以在本地生成项目,供组织使用。 DKE GitHub 存储库位于 https://github.com/Azure-Samples/DoubleKeyEncryptionService。
以下说明适用于缺乏经验的 git 或Visual Studio Code用户:
在浏览器中,转到: https://github.com/Azure-Samples/DoubleKeyEncryptionService.
在屏幕右侧选择 “代码”。 UI 版本可能会显示 “克隆”或“下载 ”按钮。 然后,在显示的下拉列表中,选择复制图标以将 URL 复制到剪贴板。
例如:

在Visual Studio Code中,选择 “查看 > 命令面板”,然后选择 “Git:克隆”。 若要跳转到列表中的选项,请开始键入
git: clone以筛选条目,然后从下拉列表中选择它。 例如:
在文本框中,粘贴从 Git 复制的 URL, 然后从 GitHub 中选择“克隆”。
在出现的 “选择文件夹 ”对话框中,浏览到并选择要存储存储库的位置。 在提示符下,选择 “打开”。
存储库在Visual Studio Code中打开,并显示左下角的当前 Git 分支。 例如,分支应 为主 分支。 例如:

如果你不在主分支上,则需要选择它。 在Visual Studio Code中,选择分支并从显示的分支列表中选择 main。
重要
选择主分支可确保具有正确的文件来生成项目。 如果未选择正确的分支,部署将失败。
现在已在本地设置了 DKE 源存储库。 接下来, 修改组织的应用程序设置 。
修改应用程序设置
若要部署 DKE 服务,必须修改以下类型的应用程序设置:
修改 appsettings.json 文件中的应用程序设置。 此文件位于在 DoubleKeyEncryptionService\src\customer-key-store 下本地克隆的 DoubleKeyEncryptionService 存储库中。 例如,在Visual Studio Code中,可以浏览到文件,如下图所示。

密钥访问设置
选择是使用电子邮件还是角色授权。 DKE 一次仅支持其中一种身份验证方法。
电子邮件授权。 允许组织仅根据电子邮件地址授予对密钥的访问权限。
角色授权。 允许组织基于 Active Directory 组授予对密钥的访问权限,并要求 Web 服务可以查询 LDAP。
使用电子邮件授权为 DKE 设置密钥访问设置
打开 appsettings.json 文件并找到
AuthorizedEmailAddress设置。添加要授权的电子邮件地址或地址。 使用双引号和逗号分隔多个电子邮件地址。 例如:
"AuthorizedEmailAddress": ["email1@company.com", "email2@company.com ", "email3@company.com"]找到设置并
LDAPPath删除双引号之间的文本If you use role authorization (AuthorizedRoles) then this is the LDAP path.。 保留双引号。 完成后,设置应如下所示。"LDAPPath": ""AuthorizedRoles找到设置并删除整个行。
此图像显示为电子邮件授权正确设置格式 的 appsettings.json 文件。

使用角色授权为 DKE 设置密钥访问设置
打开 appsettings.json 文件并找到
AuthorizedRoles设置。添加要授权的 Active Directory 组名称。 使用双引号和逗号分隔多个组名称。 例如:
"AuthorizedRoles": ["group1", "group2", "group3"]LDAPPath找到设置并添加 Active Directory 域。 例如:"LDAPPath": "contoso.com"AuthorizedEmailAddress找到设置并删除整个行。
此图显示了为角色授权正确设置格式 的 appsettings.json 文件。

租户和密钥设置
DKE 租户和密钥设置位于 appsettings.json 文件中。
为 DKE 配置租户和密钥设置
打开 appsettings.json 文件。
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. 输入密钥的名称。 例如:TestKey1TestKeys:Id. 创建 GUID 并将其输入为TestKeys:ID值。 例如,DCE1CC21-FF9B-4424-8FF4-9914BD19A1BE。 可以使用联 机 GUID 生成器 等网站随机生成 GUID。
此图显示了 appsettings.json 中租户和密钥设置的正确格式。 LDAPPath 配置为角色授权。

生成测试密钥
定义应用程序设置后,即可生成公用和私有测试密钥。
若要生成密钥,
在“Windows 开始”菜单中,运行 OpenSSL 命令提示符。
更改为要在其中保存测试密钥的文件夹。 通过完成此任务中的步骤创建的文件存储在同一文件夹中。
生成新的测试密钥。
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365生成私钥。
如果安装了 OpenSSL 版本 3 或更高版本,请运行以下命令:
openssl rsa -in key.pem -out privkeynopass.pem -outform PEM -traditional
否则运行以下命令:
openssl rsa -in key.pem -out privkeynopass.pem -outform PEM
生成公钥。
openssl rsa -in key.pem -pubout > pubkeyonly.pem在文本编辑器中,打开 pubkeyonly.pem。 将 pubkeyonly.pem 文件中的所有内容(第一行和最后一行除外)复制到
PublicPemappsettings.json 文件的部分。在文本编辑器中,打开 privkeynopass.pem。 将 privkeynopass.pem 文件中的所有内容(第一行和最后一行除外)复制到
PrivatePemappsettings.json 文件的部分。删除两个部分中
PublicPem的所有空格和PrivatePem新线。重要
复制此内容时,请勿删除任何 PEM 数据。
在Visual Studio Code中,浏览到 Startup.cs 文件。 此文件位于在 DoubleKeyEncryptionService\src\customer-key-store\下本地克隆的 DoubleKeyEncryptionService 存储库中。
查找以下行:
#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将这些行替换为以下文本:
services.AddSingleton<ippw.IKeyStore, ippw.TestKeyStore>();最终结果应如下所示。

现在,你已准备好 生成 DKE 项目。
生成项目
使用以下说明在本地生成 DKE 项目:
在Visual Studio Code中,在 DKE 服务存储库中,选择 “查看 > 命令面板”,然后在提示符处键入 生成。
从列表中,选择 “任务:运行生成任务”。
如果未找到生成任务,请选择 “配置生成任务 ”并为 .NET core 创建一个,如下所示。

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

从模板类型的列表中,选择 .NET Core。

在生成部分中,找到 customerkeystore.csproj 文件的路径。 如果不存在,请添加以下行:
"${workspaceFolder}/src/customer-key-store/customerkeystore.csproj",再次运行生成。
验证输出窗口中没有红色错误。
如果出现红色错误,请检查控制台输出。 确保已正确完成上述所有步骤,并且存在正确的生成版本。
安装程序现已完成。 在发布密钥存储之前,请在 appsettings.json 中为 JwtAudience 设置,确保主机名的值与主机名App 服务完全匹配。
部署 DKE 服务并发布密钥存储
对于生产部署,请在第三方云中部署服务或 发布到本地系统。
你可能更喜欢其他方法来部署密钥。 选择最适合组织的方法。
对于试点部署,可以在 Azure 中部署并立即开始。
创建用于托管 DKE 部署的 Azure Web 应用实例
若要发布密钥存储,你将创建一个用于托管 DKE 部署的Azure 应用服务实例。 接下来,将生成的密钥发布到 Azure。
在浏览器中,登录到 Microsoft Azure 门户,然后转到 “应用服务 > 添加”。
选择订阅和资源组并定义实例详细信息。
输入要在其中安装 DKE 服务的计算机的主机名。 确保它的名称与为 appsettings.json 文件中的 JwtAudience 设置定义的名称相同。 为名称提供的值也是 WebAppInstanceName。
对于 发布、选择 代码 和 运行时堆栈,请选择 .NET Core 3.1。
例如:

在页面底部,选择 “查看 + 创建”,然后选择 “添加”。
执行以下操作之一以发布生成的密钥:
通过 ZipDeployUI 发布
转到
https://<WebAppInstanceName>.scm.azurewebsites.net/ZipDeployUI。例如:
https://dkeservice.contoso.scm.azurewebsites.net/ZipDeployUI在密钥存储的代码库中,转到 customer-key-store\src\customer-key-store 文件夹,并验证此文件夹是否包含 customerkeystore.csproj 文件。
运行: dotnet 发布
输出窗口显示部署发布时所在的目录。
例如:
customer-key-store\src\customer-key-store\bin\Debug\netcoreapp3.1\publish\将发布目录中的所有文件发送到.zip文件。 创建.zip文件时,请确保目录中的所有文件都位于.zip文件的根级别。
将创建的.zip文件拖放到上面打开的 ZipDeployUI 站点。 例如:
https://dkeservice.scm.azurewebsites.net/ZipDeployUI
DKE 已部署,可以浏览到已创建的测试密钥。 继续 验证下面的部署 。
通过 FTP 发布
连接到上面创建的App 服务。
在浏览器中,转 到Azure 门户 > App 服务 > 部署中心 > 手动部署 > FTP > 仪表板。
复制显示到本地文件的连接字符串。 你将使用这些字符串连接到 Web App 服务并通过 FTP 上传文件。
例如:

在密钥存储的代码库中,转到 customer-key-store\src\customer-key-store 目录。
验证此目录是否包含 customerkeystore.csproj 文件。
运行: dotnet 发布
输出包含部署发布所在的目录。
例如:
customer-key-store\src\customer-key-store\bin\Debug\netcoreapp3.1\publish\将发布目录中的所有文件发送到 zip 文件。 创建.zip文件时,请确保目录中的所有文件都位于.zip文件的根级别。
在 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 服务,请执行以下操作:
在浏览器中,打开 Microsoft Azure 门户,然后转到 “所有服务 > 标识 > 应用注册”。
选择 “新建注册”,然后输入有意义的名称。
从显示的选项中选择帐户类型。
例如:

在页面底部,选择 “注册 ”以创建新的应用注册。
在新的应用注册中,在左窗格的“ 管理” 下,选择 “身份验证”。
选择 添加平台。
在“ 配置平台 ”弹出窗口中,选择 “Web”。
在 “重定向 URI” 下,输入双键加密服务的 URI。 输入App 服务 URL,包括主机名和域。
例如:
https://mydkeservicetest.com- 输入的 URL 必须与部署 DKE 服务的主机名匹配。
- 域必须是 已验证的域。
- 在所有情况下,方案都必须为 https。
确保主机名与主机名App 服务完全匹配。
在 “隐式授予”下,选中 ID 令牌 复选框。
选择 保存 以保存所做的更改。
在左窗格中,选择 “公开应用程序 ID URI”旁边的 API,输入App 服务 URL,包括主机名和域,然后选择 “设置”。
在 “公开 API” 页上,在此 API 区域定义的范围 中,选择 “添加范围”。 在新范围中:
将范围名称定义为 user_impersonation。
选择可以同意的管理员和用户。
定义所需的任何剩余值。
选择“添加作用域”。
选择 “保存 在顶部”以保存所做的更改。
在 “公开 API” 页上,在 “授权客户端应用程序 ”区域中,选择 “添加客户端应用程序”。
在新的客户端应用程序中:
将客户端 ID 定义为
d3590ed6-52b3-4102-aeff-aad2292ab01c. 此值是 Microsoft Office 客户端 ID,使 Office 能够获取密钥存储的访问令牌。在 “授权范围”下,选择 user_impersonation 范围。
选择“添加应用程序”。
选择 “保存 在顶部”以保存所做的更改。
重复这些步骤,但这次将客户端 ID 定义为
c00e9d32-3c8d-4a7d-832b-029040e7db99。 此值是 Azure 信息保护统一标记客户端 ID。
DKE 服务现已注册。 继续 使用 DKE 创建标签。
使用 DKE 创建敏感度标签
在Microsoft Purview 合规门户中,创建新的敏感度标签并应用加密,否则将应用加密。 选择 “使用双键加密 ”,然后输入密钥的终结点 URL。 需要在 URL 中 appsettings.json 文件的“TestKeys”部分中包含你提供的密钥名称。
例如:https://testingdke1.azurewebsites.net/KEYNAME

添加的任何 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 标签。 若要迁移,将使用 AIP 扫描程序。 若要开始使用扫描程序,请参阅什么是 Azure 信息保护统一标记扫描程序?
如果不迁移内容,则受 HYOK 保护的内容将不受影响。
其他部署选项
我们意识到,对于高度监管行业的某些客户来说,使用基于软件的密钥的标准参考实现可能不足以满足他们增强的合规性义务和需求。 我们已与 HSM) 供应商 (第三方硬件安全模块合作,以支持 DKE 服务中增强的关键管理选项,包括:
请直接与这些供应商联系,以获取有关其市场内 DKE HSM 解决方案的详细信息和指导。