首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从EIP-1559的签名中恢复Y-奇偶校验

从EIP-1559的签名中恢复Y-奇偶校验
EN

Ethereum用户
提问于 2022-01-14 13:08:03
回答 1查看 427关注 0票数 1

我有一个软件系统,其中签名ETH事务发生在黑匣子中。我给出所需的信息,它会返回给我一个数字签名(30倍

现在我知道了签名V值,对于EIP-155事务来说,它以前是recId + (2 * chainId + 35)。我用以下代码使用web3.js和@ethereumjs/tx库确定了这一点:

代码语言:javascript
复制
    const ethAddress = '0x123ba3f3.....3a4f1d8';
    ethjsTx.v = recId + 35 + 2 * chainId;
    const rawTx = ethjsTx.serialize().toString(16);
    const recoveredAddress = this.web3.accounts.recoverTransaction(rawTx);
    return recoveredAddress === ethAddress;

我只需对两个不同的recId值(0,1)重复此操作,直到返回true为止,然后我将知道V-值。

对于EIP-1559,chainId不再与V值相关.V就是签名的Y-奇偶。现在我的问题是如何从一个更好的签名中找出这个Y值。

在这个存储库@第290行中:

https://github.com/ethereum/go-ethereum/blob/master/crypto/secp256k1/libsecp256k1/src/ecdsa_impl.h

是以下代码:

代码语言:javascript
复制
    if (recid) {
        /* The overflow condition is cryptographically unreachable as hitting it requires finding the discrete log
         * of some P where P.x >= order, and only 1 in about 2^127 points meet this criteria.
         */
        *recid = (overflow ? 2 : 0) | (secp256k1_fe_is_odd(&r.y) ? 1 : 0);
    }

他们检查r.y是否是奇数,这是我需要的值。问题是,我的R是一个32字节的十六进制,而在该代码中,r是一个具有独立y属性的对象。我的问题是:

  1. 如何从我的十六进制R字符串中获得这个Y值?
  2. 或者我也可以像这样重构我以前的功能:
代码语言:javascript
复制
    const ethAddress = '0x123ba3f3.....3a4f1d8';
    ethjsTx.v = 0 or 1;
    const rawTx = ethjsTx.serialize().toString(16);
    const recoveredAddress = this.web3.accounts.recoverTransaction(rawTx);
    return recoveredAddress === ethAddress;

然后用这个代替?只是有点低效。

EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-01-20 15:55:22

我在寻找一些方法来直接获得Y-平价,而不是在事实发生后恢复它。在发布了这个问题之后进行了一些研究,特别是在本文中:

  • http://coders-errand.com/details-of-ecdsa-signatures/

我还问了一个关于密码栈交换的问题,得到了一个明确的答案:

很明显,R和S是用几个不同的数值计算出来的。其中一个值是椭圆曲线上随机选取的点的X坐标.这个随机选取的点也有一个Y坐标,但在计算中没有用到它。不过,这一点是我们需要的。但是要提取它,您需要修改签名代码来返回这个y-奇偶点,这在我的例子中是不值得的。也许,如果你想要微观优化,你可以采取这一行动方针。

在此基础上,Ethereum的“黄色文件”指定了实体中使用的erecover()函数,用于检查签名对于给定的发送地址是否有效。因此,从签名的事务中提取地址是有意的行为,因此,我认为我原来的方法,即尝试0和1并检查公钥,对我来说已经足够好了。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/118931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档