ecdsa 通信比特币库
ecdsa communication bitcoin library
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 有她的私钥,她的 public 密钥,她有 Bob 的 public 密钥和来自 Bob 的消息。
但是坏人也有 Bob 的 public 密钥和 Bob 的消息。
魔法在哪里发生,他们如何确保从这里进行的通信?
这也不行:
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 坐标并将其散列以导出对称加密的密钥。
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 有她的私钥,她的 public 密钥,她有 Bob 的 public 密钥和来自 Bob 的消息。
但是坏人也有 Bob 的 public 密钥和 Bob 的消息。
魔法在哪里发生,他们如何确保从这里进行的通信?
这也不行:
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 坐标并将其散列以导出对称加密的密钥。