织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 比特币 > 比特币资讯

以太坊上的数字签名(3)

时间:2020-10-22 16:33来源:未知 作者:admin 点击:
简化后的公钥恢复流程如下: 计算消息的哈希值(e)。 计算椭圆曲线上的点R = (x?, y?),其中 x? 是r(v = 27),或r + n(v = 28)。 计算u? = -zr?? mod n和u? =

简化后的公钥恢复流程如下:

  • 计算消息的哈希值(e)。

  • 计算椭圆曲线上的点 R = (x?, y?),其中 x? 是 r(v = 27),或 r + n(v = 28)。

  • 计算 u? = -zr?? mod n 和 u? = sr?? mod n。

  • 计算点 Q? = (x?, y?) = u? × G + u? × R。

Q? 是地址用来签名的私钥所对应的公钥。我们可以通过公钥计算出一个地址,并检查该地址是否与已提供地址相符。如果相符,则签名有效。

恢复标识符(“v”)

v 是签名的最后一个字节,而且不是 27 (0x1b) 就是 28 (0x1c)。恢复标识符非常重要,因为我们使用的是椭圆曲线算法,仅凭r 和 s 可计算出曲线上的多个点,因此会恢复出两个不同的公钥(及其对应地址)。v 会告诉我们应该使用这些点中的哪一个。

在大多数实现中,v 在内部只是 0 或 1,而 27 是在签署比特币消息时加上的任意数。以太坊也接受了这一点。

从 EIP-155 开始,我们还使用链 ID 来计算 v 值。这可以防止跨链重放攻击:以太坊上签署的交易无法在以太坊经典上使用,反之亦然。目前,恢复标识符只用来签署交易而非消息。

签署交易

目前为止,我们主要讨论了针对消息的签名。就像消息一样,交易在发送前也需要签名。如果你使用 Ledger 和 Trezor 之类的硬件钱包,签名过程会在硬件内部发生。如果使用私钥(或 keysotre 文件、助记词),可以直接在 MyCrypto 上完成签名。签署交易所使用的方法与签署消息非常相似,只不过交易的编码方式略有不同。

要签署的交易先用 RLP 编码方式编码,包含了所有交易参数(nonce、gas price、gas limit、to、value、data)和签名(v, r, s)。签过名的交易如下所示:

0xf86c0a8502540be400825208944bbeeb066ed09b7aed07bf39eee0460dfa261520880de0b6b3a7640000801ca0f3ae52c1ef3300f44df0bcfd1341c232ed6134672b16e35699ae3f5fe2493379a023d23d2955a239dd6f61c4e8b2678d174356ff424eac53da53e17706c43ef871

如果我们在 MyCrypto 的已签名交易广播页面上输入该交易,我们就会看到所有交易参数:

- MyCrypto 的已签名交易广播页面上的交易参数概览 -

签过名的交易的第一组字节包含 RLP 编码后的交易参数,最后一组字节包含签名 {r, s, v}。我们可以通过以下方式对签名交易进行编码:

    (责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容