【问题标题】:Python ECDSA failing to verify signaturePython ECDSA 无法验证签名
【发布时间】:2022-01-06 23:56:15
【问题描述】:

我正在尝试在 python 中使用 ECDSA 验证比特币签名,但发现它非常困难,许多尝试已经失败。

参数:

address: 33ELcBdg6W7parjGxNYUz5uHVHwPqopNjE

message: hzpPiNlB

signature(base64): I2fKdGNtR5owOWVoWchMVWwC/gf4qyYZ8G+kvuR7CaBhU/0SO149a3/ylBaiVWzfUoXI5HlgYPjkrptk0HfW1NQ=

注意:根据 ECDSA 的要求,我已将签名从 base64 转换为十六进制字符串。每当我尝试验证它时,它都会说:

预期 64 字节签名(128 十六进制字符串),提供 65 字节签名 (130 十六进制字符串)

我查看了许多有关 ECDSA 的 stackoverflow 问题,但没有一个答案与我的问题 100% 相关。感谢您的帮助。

更新:我使用了比特币 Python 包。首先完成此操作以获取公钥然后验证:

pip install bitcoin

>>> message = 'hzpPiNlB'
>>> signature = 'I2fKdGNtR5owOWVoWchMVWwC/gf4qyYZ8G+kvuR7CaBhU/0SO149a3/ylBaiVWzfUoXI5HlgYPjkrptk0HfW1NQ='
>>> import bitcoin
>>> recover_key = bitcoin.ecdsa_recover(message, signature)
>>> print(recover_key)
04bbdd00bafea40bf7b268baff4ec7635a0b12e94542067cf4077369be938f7b733c731248b88bb0f8b14783247705e568effd54e57643fc827852cf77d0ed8313
>>> verify = bitcoin.ecdsa_verify(message, signature, recover_key)
>>> print(verify)
True

虽然恢复的 pubkey 是错误的,但它以某种方式通过 True。当使用我从钱包中提取的正确公钥时,由于验证签名,我得到了 False。

 >>> message = 'hzpPiNlB'
 >>> signature = 'I2fKdGNtR5owOWVoWchMVWwC/gf4qyYZ8G+kvuR7CaBhU/0SO149a3/ylBaiVWzfUoXI5HlgYPjkrptk0HfW1NQ='
 >>> pub_key = '0352ab1e8ef8553fb307ae8dcafd2395fd06e5ca882f0e27143cb15cf495cc435e'
 >>> import bitcoin
 >>> verify = bitcoin.ecdsa_verify(message, signature, pub_key)
 >>> print(verify)
 False

【问题讨论】:

  • 能否提供您的代码,以便我们帮助您处理这个问题。
  • 只是猜测您可能会尝试使用ecdsa.util.sigdecode_string(s[1:], ...),其中s 是十六进制解码签名。
  • @YuriGinsburg 已更新帖子,我不再收到十六进制错误,而是恢复了错误的 pubkey 等...
  • 其实,你现在问了一个不同的问题。此外,您的新代码不可重现。使用 pybitcointools bitcoin.ecdsa_recover 产生 ValueError。我认为您应该发布另一个问题并提供 a minimal reproducible example 包括导入语句。
  • @YuriGinsburg 我想通了。提取 Pubkey 时一直是路径问题。我的坏,现在一切都好。感谢您的帮助。

标签: python cryptography bitcoin ecdsa


【解决方案1】:

使用正确的路径提取pubkey后,我可以确认:

verify = bitcoin.ecdsa_verify(message, signature, pub_key).

正在返回True

【讨论】:

    猜你喜欢
    • 2022-01-07
    • 2018-01-17
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多