多个公钥PKI包[R]

时间:2015-04-20 01:22:48

标签: r key public bitcoin pki

我正在教育自己的加密货币,而社区内的一个主题是使用单独的地址"对于每笔交易。当我将地址解释为个人公钥的哈希时,它使我相信您可以为私钥生成多个公钥。我完全是这个主题的新手,并且使用R PKI包作为本自学教程的起点。

这一思路与PKI multiple public keys的讨论背道而驰,所以我可能会做得很好但是如果没有办法用PKI包生成额外的公钥?

我在下面有一个代码块,涵盖了我的一些想法。现在说了这一切。我试图理解大约9页的讨论内容,但是如果发布了多个公钥,我不认为自己可以进行有限群体讨论,也不会破坏私钥。因此,如果您可以通过编程或其他参考资料来纠正我,我将不胜感激。最终,它的运动首先要提高我的R技能。

require(PKI)

# generate 2048-bit RSA key
key <- PKI.genRSAkey(bits = 2048L)

# extract private and public parts as PEM
priv.pem <- PKI.save.key(key)
pub.pem <- PKI.save.key(key, private=FALSE)
# load back the public key separately
pub.k <- PKI.load.key(pub.pem)

# encrypt with the public key
x <- PKI.encrypt(charToRaw("Hello, world!"), pub.k)
# decrypt with private key
rawToChar(PKI.decrypt(x, key))

# So straight from the Package examples I have the public and private keys.

# Additionally, with the same I can sign a message
x <- charToRaw("My message to sign")
sig <- PKI.sign(x, key)
PKI.verify(x, sig, key)

# Now a slight change from the exapmles I will verify that the public key can verify
PKI.verify(x, sig, pub.k)

# Now I would like to generate another public key based on the same private key
# my nieve attempt is 

#PKI.mkRSApubkey(modulus, exponent=65537L, format = c("DER", "PEM", "key"))
pub.k

pub.k2<-PKI.mkRSApubkey(123, exponent=65537L, format =  "key")
pub.k2

PKI.verify(x, sig, pub.k2)

PKI.verify(x, sig, pub.k)

priv.pem

1 个答案:

答案 0 :(得分:0)

你说比特币地址不应该被重用是正确的。

比特币私钥只有一个公钥,但它可以是不同的格式,压缩或未压缩。例如,私钥e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

具有相应的未压缩公钥04a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea235

以及03a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd

的压缩公钥

散列它们将分别产生地址1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN1F3sAm6ZtwLAUnj7d38pGFxtP3RVEvtsbV

您应该只使用压缩公钥,因为未压缩的公钥会使区块链膨胀。 话虽如此,因为您只应将其中一个地址用于私钥,这意味着您还应该为每个事务使用不同的私钥。 现在这会产生许多其他问题,例如密钥管理会变得更加麻烦,因为每次要进行事务时都必须生成新的私钥。您应该查看分层确定性钱包,因为这是一个旨在处理其中一些问题的建立标准。