2015-04-20 2 views
0

Je me familiarise avec les cryptomonnaies et un thème de cette communauté consiste à utiliser des «adresses» distinctes pour chaque transaction. Comme j'interprète une adresse comme le hachage de la clé publique pour l'individu, cela me porte à croire que vous pouvez générer plusieurs clés publiques pour une clé privée. Je suis complètement novice sur ce sujet et j'utilise le paquet R PKI comme point de départ pour ce tutoriel auto.Forfait PKI à clés publiques multiples [R]

Cette ligne de pensée est contre la discussion au PKI multiple public keys donc je pourrais être bien de la marque mais sinon est-il un moyen de générer une clé publique supplémentaire avec le paquet PKI?

J'ai un bloc de code ci-dessous qui couvre une partie de ma pensée. Maintenant, ayant dit tout ça. J'essaie de comprendre quelques 9 pages de discussion sur ce que cela implique et je ne pense pas que je suis prêt pour la discussion des groupes finis ni le compromis de la clé privée si plusieurs clés publiques sont publiées. Donc, si vous pouvez me corriger via la programmation ou du matériel de référence supplémentaire, j'apprécierais. En fin de compte, son et l'exercice pour améliorer mes compétences R avant tout.

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 

Répondre

0

Vous avez raison de dire que les adresses bitcoin ne doivent pas être réutilisées. Une clé privée bitcoin ne possède qu'une seule clé publique, mais elle peut être dans différents formats, compressés ou non compressés. Par exemple, la clé privée e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

a une clé publique non compressé correspondant de 04a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea235

et une clé publique comprimé de 03a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd

les Hachage entraînera l'adresse 1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN et 1F3sAm6ZtwLAUnj7d38pGFxtP3RVEvtsbV respectivement.

Vous ne devez utiliser que des clés publiques compressées en tant que clés publiques non compressées qui enflent la chaîne de blocs. Cela étant dit, puisque vous ne devez utiliser qu'une de ces adresses pour une clé privée, cela signifie que vous devez également utiliser une clé privée différente pour chaque transaction. Maintenant, cela crée une foule d'autres problèmes, comme la gestion des clés devient beaucoup plus difficile, car vous devez générer une nouvelle clé privée chaque fois que vous voulez faire une transaction. Vous devriez regarder dans les portefeuilles déterministes hiérarchiques car c'est une norme établie qui est destinée à traiter certains de ces problèmes.

+0

Merci pour les conseils. Essayer de programmer tout cela révèle beaucoup de problèmes de main agitant. Je pensais en fait qu'un serveur clé fournirait la clé publique (toujours en sortant du papier de 9 pages et en sautant directement sur la façon dont je le programmerais) je pense que mon choix de l'algorithme de RSA explique la bonne version courte d'une clé publique et de la signature probable dont vous avez fourni des exemples. Merci encore. – BabblingREnthusiast