多个 Public 密钥 PKI 包 [R]

Multiple Public Keys PKI Package [R]

我正在自学加密货币,该社区的一个主题是对每笔交易使用单独的 "addresses"。当我将地址解释为个人 public 密钥的散列时,这让我相信您可以为私钥生成多个 public 密钥。我在这个主题上完全是新手,我使用 R PKI 包作为这个自我教程的起点。

这种思路与 PKI multiple public keys 上的讨论背道而驰,所以我可能是对的,但如果不是,是否有办法使用 PKI 包生成额外的 public 密钥?

下面有一个代码块涵盖了我的一些想法。现在说了这一切。我试图理解关于这意味着什么的大约 9 页的讨论,我认为我不适合有限的团体讨论,也不会在释放多个 public 密钥时私钥的妥协。因此,如果您可以通过编程或其他参考 material 纠正我,我将不胜感激。最终,它和锻炼首先要提高我的 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

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

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

有对应的04a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea235

的未压缩public键

03a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd

的压缩 public 密钥

对它们进行哈希运算将分别得到地址 1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN1F3sAm6ZtwLAUnj7d38pGFxtP3RVEvtsbV

您应该只使用压缩的 publics 密钥,因为未压缩的 public 密钥会使区块链膨胀。 话虽这么说,因为您应该只使用其中一个地址作为私钥,这意味着您还应该为每笔交易使用不同的私钥。 现在这会产生许多其他问题,例如密钥管理变得更加麻烦,因为每次要进行交易时都必须生成一个新的私钥。您应该研究分层确定性钱包,因为这是一个旨在处理其中一些问题的既定标准。