2015-04-20 6 views
0

Я воспитываю себя в криптотерминах, а тема внутри этого сообщества заключается в использовании отдельных «адресов» для каждой транзакции. Поскольку я интерпретирую адрес как хэш открытого ключа для отдельного лица, это заставляет меня думать, что вы можете генерировать несколько открытых ключей для закрытого ключа. Я полностью новичок в этом вопросе, и я использую пакет R PKI как отправную точку для этого самостоятельного учебника.Несколько открытых ключей Пакет PKI [R]

Эта линия мышления противоречит обсуждению на 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 

ответ

0

Вы правильно говорите, что адреса биткойнов не должны использоваться повторно.

Личный ключ биткойна имеет только один открытый ключ, но он может быть в разных форматах, сжат или несжатый. Например, закрытый ключ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

имеет соответствующий несжатого открытый ключ 04a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea235

и сжатая открытый ключ 03a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd

HASHING их приведет к адресу 1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN и 1F3sAm6ZtwLAUnj7d38pGFxtP3RVEvtsbV соответственно.

Вы должны использовать сжатые ключи публики, поскольку несжатые открытые ключи раздувают блок-цепочку. Это, как говорится, поскольку вы должны использовать только один из этих адресов для закрытого ключа, это означает, что вы должны также использовать другой закрытый ключ для каждой транзакции. Теперь это создает множество других проблем, таких как управление ключами становится намного более неприятным, поскольку вы должны генерировать новый закрытый ключ каждый раз, когда хотите совершить транзакцию. Вы должны изучать иерархические детерминированные кошельки, поскольку это стандарт установления, который предназначен для решения некоторых из этих проблем.

+0

Спасибо за руководство. Пытаясь запрограммировать это, вы обнаружите много проблем с размахами рук. Я на самом деле думал, что ключевой сервер предоставит открытый ключ (все еще просто уходит с 9-страничного документа и прыгает прямо, как мне его запрограммировать). Я думаю, что мой выбор ключа RSA-ключа Elliptic Curve Digital Signature Algorithm объясняет хорошую короткую версию открытого ключа и, вероятно, подписи, которую вы представили. Еще раз спасибо. – BabblingREnthusiast