ecdsa通信比特币库

时间:2017-08-27 20:41:37

标签: python cryptography bitcoin 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)
爱丽丝有她的私钥,她的公钥,她有Bob的公钥和来自Bob的消息。

但坏人也有Bob的公钥和Bob的消息。

魔术在哪里发生,他们如何从这里获得通信?

这也不起作用:

"assets": [
  "./assets",
  {
    "glob": "thefile.min.js",
    "input": "../node_modules/thepackage/dist/",
    "output": "./assets/js/"
  }
]

1 个答案:

答案 0 :(得分:2)

看起来您正在使用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坐标并对其进行散列以获得对称加密的密钥。