【发布时间】:2018-10-22 14:10:04
【问题描述】:
在比特币维基上,我发现比特币使用 ECDSA 算法和 Secp256k1 曲线。
相关链接:
- https://en.bitcoin.it/wiki/Elliptic_Curve_Digital_Signature_Algorithm
- https://en.bitcoin.it/wiki/Secp256k1
在第一个链接上,它说私钥应该是 32 个字节,公钥应该是 64 个字节,签名通常在 71-73 个字节之间。它说签名可以小概率变小。
但是,当我运行以下 python3 代码时
>>> from ecdsa import SigningKey, SECP256k1
>>> private_key = SigningKey.generate(curve=SECP256k1)
>>> public_key = private_key.get_verifying_key()
>>> signature = private_key.sign(b'message')
>>> print((len(private_key.to_string()), len(public_key.to_string()), len(signature)))
我得到 (32, 64, 64) 作为输出。我希望得到类似 (32, 64, 72) 的东西。
我认为正在发生以下情况之一:
- 我误解了 wiki 文章。
- 我错误地使用了 python-ecdsa
- 比特币维基不正确
- python-ecdsa 未正确实现
前两个是最有可能的。
谁能向我解释为什么我的预期与实际得到的不匹配?
【问题讨论】:
标签: python cryptography bitcoin ecdsa