【问题标题】:Error when Encrypt secret value - Operation returned an invalid status code 'BadRequest'加密密钥值时出错 - 操作返回无效状态代码“BadRequest”
【发布时间】:2018-09-27 14:10:43
【问题描述】:

我正在使用 KeyVaultClient 在密钥保管库中添加新机密。当添加较小的秘密值时,它工作得很好。当我们添加一个长秘密值系统不接受该值时,响应得到“操作返回一个无效的状态码'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 中获取异常。

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

【问题讨论】:

  • 你能告诉我更详细的代码吗?
  • 代码已更新......

标签: azure azure-keyvault


【解决方案1】:

简答

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

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

长答案

显而易见的问题是您可以加密的最大长度是多少。微软在这两个方面的文档,

简单地说这样的事情

请注意,ENCRYPT 操作仅支持单个数据块, 其大小取决于目标密钥和要使用的加密算法

在您的代码中,您为算法选择了JsonWebKeyEncryptionAlgorithm.RSAOAEP,当您将代码指向您的保管库中的一个密钥时,您将知道密钥长度。

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

现在,

  1. 使用的散列函数将是 SHA-1
  2. 使用的掩码生成算法将是 MGF1

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

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

免责声明:您的情况将是这样的(我不是该主题的专家,因此可能会出现适用的精确计算错误,但您将遵循关于密钥长度和算法的核心思想将影响最大消息大小,到此结束:))

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

假设您现在使用的密钥长度为 1024(您可以根据您的密钥大小进行更改)。

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

如果您要使用 2048 的密钥长度

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

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

【讨论】:

    【解决方案2】:

    是否有任何秘密值字符限制?如何处理这些限制?

    Azure Key Vault 中的秘密是八位字节序列,每个最大大小为 25k 字节

    Azure Key Vault 还支持用于机密的 contentType 字段。客户端可以指定秘密的内容类型contentType,以帮助在检索秘密数据时对其进行解释。 此字段的最大长度为 255 个字符。没有预定义的值。建议的用法是作为解释秘密数据的提示。

    更多详情可以参考这个article

    【讨论】:

    • 是的,您可以查看 MS 文章。
    • 但是当我尝试使用 200 个字符时遇到了同样的错误。我该如何处理这些情况?
    • 存储在 Azure Key Vault 中的密钥可用于加密或解密单个数据块,其大小由密钥类型和所选加密算法决定。也许您可以尝试更改算法以扩大大小。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多