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坐标并对其进行散列以导出对称加密的密钥。

+0

马特,你absolutley正确:)非常感谢你。对此,我真的非常感激。 – Makaroniiii