【问题标题】:ecdsa communication bitcoin libraryecdsa通信比特币库
【发布时间】:2017-08-27 20:41:36
【问题描述】:
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 的消息。

但坏人也有 Bob 的公钥和 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)

【问题讨论】:

    标签: python cryptography bitcoin ecdsa


    【解决方案1】:

    您似乎在使用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 坐标并对其进行散列以派生对称加密的密钥。

    【讨论】:

    • 马特,你是绝对正确的 :) 非常感谢。我真的很感激。
    猜你喜欢
    • 2013-07-14
    • 1970-01-01
    • 2019-05-16
    • 2017-03-25
    • 1970-01-01
    • 2023-04-09
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多