Как importprivkey может поставить под угрозу безопасность кошелька при импорте общеизвестного закрытого ключа?

На Reddit был задан вопрос, на который я дал ответ: https://www.reddit.com/r/Bitcoin/comments/3khrvm/how_do_i_use_private_keys_to_receive_bitcoin/

Однако Люк-младший отвечает :

Не делай этого. Вы ставите под угрозу безопасность своего кошелька, чтобы импортировать закрытый ключ, который знают другие.

без дополнительной проработки. Кто-нибудь может объяснить, о чем он говорит?

Ответы (2)

Проблема довольно тонкая и возникает из-за сочетания поведения.

Прежде всего, совершенно безопасно использовать чужой закрытый ключ, по крайней мере, в автономном смысле. Предположим, закрытый ключ — P , а публичный адрес — A , и предположим, что вы хотите потратить их деньги. Затем вы сканируете блокчейн на наличие выходных данных транзакций , адресованных A. Когда вы видите такую, вы создаете новую транзакцию на желаемый выходной адрес B (независимо от того, платите ли вы себе или кому-то еще) и подписываете ее закрытым ключом P. Здесь нет проблем.

Проблема начинается, когда мы говорим о программном обеспечении кошелька. Если вы «импортируете» закрытый ключ P в свой кошелек, он добавляется в ваш личный пул закрытых ключей (и связанные с ними общедоступные адреса). Всякий раз, когда вы совершаете исходящую транзакцию, некоторая сумма почти всегда будет отправлена ​​вам обратно в качестве сдачи. Если сдача идет на адрес A (со связанным закрытым ключом P ), то другие люди, знающие закрытый ключ P , также могут потратить эти деньги. В конечном счете это означает, что если вы импортируете чужой закрытый ключ, вы можете потерять контроль над своими деньгами при некоторых обстоятельствах.

Как упоминали другие люди, безопасный способ справиться с этой ситуацией — «переместить» монеты, связанные с адресом A (используя закрытый ключ P ), на адреса, над которыми вы имеете исключительный контроль. Другими словами, используйте этот закрытый ключ, чтобы заплатить себе, но никогда не используйте адрес в качестве выхода для сдачи.


В качестве аналогии: предположим, вы находитесь в холле с пронумерованными шкафчиками. Всегда можно положить деньги в любой шкафчик (нужен только адрес, а не закрытый ключ). Шкафчик #0 может открыть как ваш друг, так и вы сами. Шкафчик №1 и №2 можете открыть только вы.

Если у вас есть наличные в шкафчиках №1 и №2, они принадлежат вам и только вам. Теперь, когда вы совершаете транзакцию, вы берете наличные из одного или обоих этих шкафчиков, а затем возвращаете часть в качестве сдачи. Вы также можете взять наличные из шкафчика № 0, без проблем. Но если вы вернете сдачу в шкафчик №0, вы потеряете исключительный контроль над этими деньгами. Таким образом, вы должны возвращать сдачу только в свои шкафчики №1 и №2, а не в общий шкафчик №0.

Если Ева дает вам закрытый ключ, содержащий биткойны, в обмен на кучу золотых монет, у нее все еще есть копия закрытого ключа, и она может забрать биткойны, оставив ей и золотые монеты, и биткойны.

Вместо этого попросите Еву отправить биткойны на ваш адрес.