azure - 加密 secret 值时出错 - 操作返回无效状态代码 'BadRequest'

标签 azure azure-keyvault

我正在使用 KeyVaultClient 在 key 保管库中添加新的 secret 。当增加的 secret 值较小时,它工作得很好。当我们添加一个长 secret 值时系统不接受该值,响应得到“Operation returned an invalid status code 'BadRequest'”。

代码-

 var kv = new KeyVaultClient(AuthHelper.GetToken);
 var key = kv.GetKeyAsync("https://xxxxxxx.vault.azure.net/", "Key1").GetAwaiter().GetResult();

 var byteData = Encoding.Unicode.GetBytes("long data...........");//here long secret value 
 var encryptData = kv.EncryptAsync("https://xxxxxx.vault.azure.net/keys/Key123/98888xxxxxxxxxxxxx", JsonWebKeyEncryptionAlgorithm.RSAOAEP, byteData).GetAwaiter().GetResult();

在 kv.EncryptAsync 中获取异常。

我注意到,当添加较小的 secret 值时,没有错误。 secret 值字符有限制吗?如何处理这些限制?

最佳答案

简短回答

很可能您会遇到长值(而不是短值)的异常,因为您超出了使用您的 key 和所选算法可以加密的消息的最大长度

解决此问题的一种方法可能是使用具有相同算法的更高长度的 key ,或者考虑更改 key 长度和算法的组合。 (详情如下)

长答案

明显的问题是您可以加密的最大长度是多少。微软关于两者的文档,

简单地陈述这样的事情

Note that the ENCRYPT operation only supports a single block of data, the size of which is dependent on the target key and the encryption algorithm to be used.

在您的代码中,您选择了 JsonWebKeyEncryptionAlgorithm.RSAOAEP 作为算法,并且当您将代码指向保管库中的 key 之一时,您会知道 key 长度。

再次查看微软关于使用该算法的文档 RSA-OEAP Encrypt/Decrypt

enter image description here

现在,

  1. 使用的哈希函数将为 SHA-1
  2. 使用的掩码生成算法为 MGF1

您可以在 RFC 3447 中阅读更多详细信息。搜索“A.2.1 RSAES-OAEP”

根据detailed crypto.stackexchange post做一些数学计算

免责声明:您的条件是这样的(我不是这个主题的专家,因此可能会在适用的精确计算上出错,但您将遵循有关 key 长度和算法的核心思想到此结束时将影响最大消息大小:))

enter image description here

SHA-1 表示输出大小为 160,即 hlen = 20

假设您现在使用的 key 长度为 1024(您可以根据 key 大小更改此值)。

mLen = 1024 / 8 - 2 * 160 / 8 - 2 = 86

如果您使用 key 长度 2048

mLen = 2048 / 8 - 2 * 160 / 8 - 2 = 214

希望所有解释/链接都能让您了解该重要语句的工作原理 - 最大长度/大小取决于要使用的目标 key 和加密算法

关于azure - 加密 secret 值时出错 - 操作返回无效状态代码 'BadRequest',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52511994/

相关文章:

Azure blob 存储 : Shared access signature for multiple containers?

azure - Azure 辅助角色如何使用 SSD 存储?

Azure ARM 模板 - 检查现有 Key Vault 访问策略

c# - 列出 KeyVault 中的 secret 而无需登录每个 secret ?

Azure KeyVault : How to set access policy in parallel

c# - 如何使用 REST API 筛选 AppInsights 自定义指标

c# - 无法从 Web 应用程序访问 Azure 公共(public)和私有(private)证书

azure - Tableau + Azure Data Lake Gen2 多个文件或文件夹

Azure ARM 模板将部署者对象 ID 添加到 key 保管库访问策略

azure - 获取 KeyVault 通过 Powershell AZ CLI 获取访问策略