当前位置: 首页 > 知识库问答 >
问题:

使用Google Cloud Key Management Service签署以太坊交易

朱硕
2023-03-14

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

以太坊需要R || S || V格式的压缩RLP编码65字节ECDSA签名。另一方面,Google KMS的ECDSA签名具有额外的报头部分(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
}

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

  • Creating compact ECDSA signatures of 65-byte length by parsing out the R and S components and adding the V component is possibly as distrustful as it sounds. R and S components as mentioned above are not always of 32 byte length for standard ECDSA signatures, which means that the ECDSA signature created by concatenating the components might not always result in 64 bytes.
  • Currently signed transactions in Ethereum are created from Keccak-256 digest hashes after RLP encoding transactions as shown below:
    // from go-ethereum
    func rlpHash(x interface{}) (h common.Hash) {
        hw := sha3.NewLegacyKeccak256()
        rlp.Encode(hw, x)
        hw.Sum(h[:0])
        return h
    }
    

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

共有1个答案

戚祺
2023-03-14

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

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

使用SHA-256摘要进行以太坊交易是否有效?

我也有同样的疑问。据我所知,曲线计算不关心散列算法。也许谷歌使用分类只是为了尺寸?不管怎样,SHA-256在这里工作得很好。

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

 类似资料:
  • 签署以太坊交易 要使脱机签名交易得到签署,需要设定一个RawTransaction类型。RawTransaction类似于前面提到的Transaction类型,但是它不需要通过具体的账号地址来请求,因为可以从签名中推断出来。 为了创建和签署原生交易,交易的顺序如下: 1.确定交易发起者帐户的下一个可用随机数nonce 2.创建RawTransaction对象 3.使用递归长度前缀编码(RLP即Re

  • 以太坊(Ethereum)是一个支持智能合约的区块链平台,它与比特币最大的不同是,以太坊通过一个虚拟机(EVM)可以运行智能合约。 以太坊是Vitalik Buterin(维塔利克·布特林,人称V神)在2013年提出的概念,Vitalik最早参与了比特币社区的开发,并希望比特币把功能受限的脚本扩展成图灵完全的编程环境,但没有得到比特币开发社区的认同,于是他决定另起炉灶,打造一个新的区块链平台,目标

  • 通过以太坊ethereum客户端进行认证签名交易 为了通过以太坊客户端进行交易,首先需要确保你正在使用的客户端知道你的钱包地址。最好是运行自己的以太坊客户端,比如geth/Parity,以便可以更方便的做到这一点。一旦你有一个客户端运行,你可以创建一个以太坊钱包,通过: geth Wiki包含了geth支持的良好运行的不同机制,例如导入私有密钥文件,并通过控制台创建新的以太坊帐户。 或者,你可以通

  • 以太坊测试链 针对Ethereum以太坊有许多专用测试网络或者叫测试链,他们由各种客户端支持。 1.Rinkeby:只支持geth客户端。 2.Kovan:只支持Parity客户端。 3.Ropsten:支持geth和Parity客户端。 对于开发,建议你使用Rinkeby或KoVan测试链。这是因为他们使用的工作量证明POA共识机制,确保交易和块能够一致并及时的创建。Ropsten测试链,虽然最

  • Frontier是以太坊(Ethereum)网络第一个发布版, 当进入此未知领域,希望你可以测试和探索它。它有很多的危险,也会存在没有被发现的陷阱,也可能会有肆虐的海盗等待攻击你,但是也蕴含着很多的机会 什么是以太坊 和其他先进系统一样,以太坊对不同的人意味着不同的东西,在阅读本节时,有些地方不会引起你的共鸣或者让你感觉没有意思。没关系,直接跳到下一章节,希望可以给你更多启发。假如你读到本章节的末

  • 我试图在windows上开发一个简单的去中心化应用程序,使用以太坊的教程-“DAPPS初学者”。它需要三款软件:Alethzers、Mist和Mix。我在不同的层面上有很多问题,因为很明显,他们停止了与Alethzerand Mix的合作。还有其他选择吗?有没有一个解决方案来开发一个好的Dapp,在那里我可以看到区块链最重要的部分?比如采矿和安全系统?