我目前正在使用 Azure Key Vault .net SDK 来加密/解密一些数据。适用于 .net 的 Azure SDK 有一个名为“CryptographyClient”的内置类,它具有执行此操作的内置方法: CryptographyClient.decrypt 和 CryptographyClient.encrypt
我使用的密钥是 RSA 密钥,我使用的算法是 RsaOaep,所以我假设它是 非对称加密。我按照这篇文章编写了我的 C# 代码。基本上,我首先从密钥库获取非对称密钥的公共部分,然后用它来创建 CryptographyClient。
通常,对于非对称加密,我们会使用公钥进行加密,而私钥仅用于解密。所以基本上,私钥将永远不会离开Azure Key Vault(始终位于Azure服务器,是真的吗?)。
现在我的问题是:
当我调用 CryptographyClient.encrypt 时,它仅在客户端(我的本地服务器)上运行吗?或者它会将我的明文发送到 Azure 服务器并发回加密文本?
当我调用CryptographyClient.decrypt时,由于私钥永远不应该离开Azure,并且只能用私钥解密,所以它只能在Azure服务器端运行吗?意味着我的本地服务器需要将加密文本发送到Azure并等待解密?
我有一种感觉,这两种方法都只发生在客户端,这就是我想要的。但这样的话解密就没有意义了。
感谢您的澄清,因为我找不到任何相关的 MS 文档。
使用公钥的操作 - 如果他们可以下载公钥,即调用者具有“获取”权限 - 将在客户端上发生。公钥被下载并执行操作。如果调用者没有该密钥的“获取”权限,则该操作将在 KeyVault 服务器上执行。这些操作包括:
需要私钥的操作将始终在服务器上执行,除非您从自己的 JSON Web 密钥 (JWK) 创建了一个同时具有公钥和私钥的
CryptographyClient
。
这些操作包括:
所有加密/解密都发生在服务器端,因为那是私钥所在的位置。
CrypographyClient API 基于 REST :
https://learn.microsoft.com/en-us/rest/api/keyvault/keys/encrypt
https://learn.microsoft.com/en-us/rest/api/keyvault/keys/decrypt/decrypt
您可以在执行代码时运行 Fiddler 跟踪来查看服务器通信。