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)

A​​lice 有她的私钥,她的 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 坐标并将其散列以导出对称加密的密钥。