0

我正在使用 Azure 密钥保管库来创建和存储我的 Secp256k1 密钥。我还使用 sign API 来对我的输入字符串进行签名。我正在开发一个 Secp256K1 区块链网络。这些是我在 Golang 中获取签名所遵循的步骤。

  1. 将我的十六进制字符串转换为字节 []
  2. 这个 Byte[] 的 Sha256
  3. 此 Sha 的 RawURL 编码。
b64.RawURLEncoding.EncodeToString(sha)
  1. 将此发送到 Key Vault 以供签名。
  2. 使用 RawURLEncoding 解码响应。
b64.RawURLEncoding.DecodeString(*keyOpsResp.Result)
  1. 对第 5 步返回的 []Byte 数组进行十六进制处理。
  2. 将签名发送到区块链。

我面临的问题是签名有时无效。就像 2/5 次它有效,而其他时候签名验证失败。我在想我缺少一些特殊的字符或填充物。我该如何解决这个问题?

PS:Azure 使用非确定性签名,而链通常使用确定性签名。我做了一些阅读,发现对于验证来说,两者都可以成功验证并不重要。让我知道我是否错了。

4

1 回答 1

0

• 由于您使用base64 编码RawURL 进行编码,您可以检查以下部分是否包含在keyvault 签名验证的令牌请求中。它们如下: -

  1. aud(观众):令牌的资源。请注意,这是https://vault.azure.net。此令牌不适用于与此值不明确匹配的任何资源,例如图形。
  2. iat(发行时间):自发行令牌时的纪元开始以来的滴答数。
  3. nbf (not before):当这个令牌变得有效时,自纪元开始以来的滴答数。
  4. exp(过期):此令牌过期时自纪元开始以来的滴答数。
  5. appid(应用程序 ID):发出此请求的应用程序 ID 的 GUID。
  6. tid(租户 ID):发出此请求的委托人的租户 ID 的 GUID。重要的是,在令牌中正确识别所有值以使请求正常工作

• 此外,请检查取决于目标密钥和用于验证签名的算法的块大小。其中,请检查“decryptParameters”、“algorithm”和“ciphertext”参数以获取签名验证期间解密操作后显示的返回值。

请找到以下链接以获取更多详细信息:-

https://docs.microsoft.com/en-us/java/api/com.azure.security.keyvault.keys.cryptography.cryptographyasyncclient.decrypt?view=azure-java-stable

于 2021-12-13T11:11:38.260 回答