gpt4 book ai didi

ecdsa - 使用谷歌云 key 管理服务签署以太坊交易

转载 作者:行者123 更新时间:2023-12-05 05:09:40 30 4
gpt4 key购买 nike

我一直在为以太坊交易管理器编写签名者服务,我需要使用 Google KMS Golang APIs 签署以太坊交易。 .我将在下面尝试总结我面临的问题。

Ethereum 在 R 中需要紧凑的 RLP 编码的 65 字节 ECDSA 签名 ||年代|| V格式。另一方面,Google KMS 的 ECDSA 签名具有额外的 header 组件(R 长度、S 长度等)以及可变长度的 R 和 S 组件。这使得这些签名与以太坊交易签名不兼容。

解决此问题的一种方法是解析从 Google KMS 获得的 ecdsa 签名中的 R 和 S 字节,计算并将 V 字节添加到末尾,然后使用此签名获得签名的以太坊交易。像这样:

var parsedSig struct{ R, S *big.Int }
_, err = asn1.Unmarshal(body, &parsedSig)
if err != nil {
logger.WithError(err).Error("failed to parse signature bytes")
return err
}

然而,由于以下一种或多种原因,这可能会失败:

  • 通过解析 R 和 S 组件并添加 V 组件来创建 65 字节长度的紧凑型 ECDSA 签名可能像听起来一样不可信。对于标准 ECDSA 签名,上述 R 和 S 组件并不总是 32 字节长度,这意味着通过连接组件创建的 ECDSA 签名可能并不总是 64 字节。
  • 以太坊中当前签署的交易是在 RLP 编码交易后从 Keccak-256 摘要哈希创建的,如下所示:
    // from go-ethereum
    func rlpHash(x interface{}) (h common.Hash) {
    hw := sha3.NewLegacyKeccak256()
    rlp.Encode(hw, x)
    hw.Sum(h[:0])
    return h
    }
    Asymmetric ECDSA Google KMS 中的 key 签名不支持 Keccak-256 SHA3 消息摘要。将 SHA-256 摘要用于以太坊交易有效吗? IMO 这会失败,因为所有交易签名验证都发生在 RLP 编码的 Keccak 哈希上。
  • 在检查了 secp256k1 implementation 之后,我不太确定如何计算 ECDSA 签名的 V 分量。 secp256k1_ecdsa_sign_recoverable() 函数。

我该如何着手解决上述这些问题,以便能够使用 Google KMS 的非对称椭圆曲线签名算法创建可验证的签名以太坊交易?

最佳答案

您可以使用 GCP 签署以太坊交易(使用 secp256k1)。不过,它需要对“v”值进行一些计算。这是一个包含完整过程的库:

https://pkg.go.dev/github.com/pascaldekloe/etherkeyms@v0.1.0/google

Would using a SHA-256 digest for ethereum transactions work?

我也有同样的疑惑。据我所知,曲线计算并不关心哈希算法。也许谷歌只使用尺寸分类?无论哪种方式,SHA-256 在这里都可以正常工作。

https://github.com/pascaldekloe/etherkeyms/blob/096d712031548e601994c859637009eb53a08e34/google/google.go#L101

关于ecdsa - 使用谷歌云 key 管理服务签署以太坊交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57421392/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com