ecdsa通信比特币库
问题描述:
from bitcoin import *
Alice_private = 1
Alice_public = privtopub(Alice_private)
Bob_private = 2
Bob_public = privtopub(Bob_private)
#they exchange publics
Alice_message=ecdsa_raw_sign(sha256('Hello'), Alice_private)
Bob_message = ecdsa_raw_sign(sha256('Hello back'), Bob_private)
Alice有她的私钥,她的公钥,她有Bob的公钥和Bob的消息。ecdsa通信比特币库
但坏人也有鲍勃的公钥和鲍勃的消息。
魔术在哪里发生,他们如何保护来自这里的沟通?
这不起作用或者:
from bitcoin import *
a = 10
b = 20
a1,a2 = privkey_to_pubkey(a)
b1,b2 = privkey_to_pubkey(b)
a3,a4 = b1*a, b2*a
b3,b4 = a1*b, a2*b
if a3 == b3:
print(True)
答
看起来你正在使用https://github.com/vbuterin/pybitcointools。
我想你要做的是Diffie Hellman key agreement,这与ECDSA不同。
在第二个示例中,您似乎有正确的想法,但elliptic curve point multiplication不像您正在做的那样简单。
您使用的确实有一个multiply(pubkey, privkey)
功能,你想要做什么的库:
import bitcoin
# Simple private keys for demonstration
alice_private = 10
alice_public = bitcoin.privkey_to_pubkey(alice_private)
bob_private = 20
bob_public = bitcoin.privkey_to_pubkey(bob_private)
# Exchange public keys
alice_shared_secret = bitcoin.multiply(bob_public, alice_private)
bob_shared_secret = bitcoin.multiply(alice_public, bob_private)
if alice_shared_secret == bob_shared_secret:
print("shared secrets match")
共享密钥是曲线,即一(X,Y)坐标对上点(这个库中的一个元组)。您通常会采用X坐标并对其进行散列以导出对称加密的密钥。
马特,你absolutley正确:)非常感谢你。对此,我真的非常感激。 – Makaroniiii