Управление открытым ключом

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

Новый пользователь биткойнов «U» сначала генерирует закрытый ключ. Он может вычислить несколько открытых ключей из этого закрытого ключа.

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

Если мой пользователь «U» должен получить биткойн от 10 разных людей, он может сгенерировать один общий адрес для этих 10 человек, но они смогут увидеть баланс «U» и увидеть, что он получает 10 транзакций. Решение состоит в том, чтобы сгенерировать 10 разных адресов. С этим решением каждый отправитель увидит только свою транзакцию и не увидит 9 других. Я не прав ?

Итак, для сокращения, можем ли мы сказать, что «U» создает 10 «виртуальных учетных записей», связанных с его закрытым ключом?

Если это так, я не понимаю, как «U» может вычислять свой собственный баланс: есть ли у него способ восстановить все общедоступные/адреса, которые он генерирует из своего закрытого ключа? Или пользователь должен хранить все созданные им адреса в файле?

Спасибо

Ответы (2)

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

Как вы говорите, нормально генерировать новый адрес (т.е. новый набор ключей) для каждой транзакции. Это связано с тем, что все данные о транзакциях являются общедоступными — они хранятся в реплицированном журнале транзакций, который мы называем блокчейном. Любой может видеть все транзакции для определенного адреса, поэтому, если десять человек платят вам по 1 BTC на один и тот же адрес, все они увидят, что вы получили в общей сложности 10 BTC на этот адрес. Это проблема конфиденциальности. Если адреса все разные, они не могут сказать, какие из них принадлежат одному и тому же человеку.

В сети Биткойн нет счетов, виртуальных счетов и балансов.

Кошелек может прочитать весь журнал транзакций и добавить все неизрасходованные суммы в транзакциях, где адрес получателя является тем, для которого кошелек знает, что у него есть соответствующий закрытый ключ. Таким образом, он может представить общую сумму пользователю. Люди называют эту сумму балансом, но это вводит в заблуждение. Сеть Биткойн не ведет учет балансов людей. Сеть Биткойн не знает, сколько денег у кого-либо в общей сложности. Монетный двор США не знает, сколько монет в один цент США лежит у меня в пластиковом пакете на полке, он не отслеживает мой баланс и не имеет счета на мое имя.

Терминология для биткойнов немного запутана. Биткойн был разработан как цифровая наличность. Счета и балансы связаны с банками, а не с кучами долларовых купюр под вашим матрасом или в вашем кожаном кошельке. Если бы вы говорили о наличных деньгах в виде бумажных денег и металлических монет, вы бы не думали о счетах и ​​балансах. Вы просто хотели бы знать общую сумму денег, которую вы имеете в бумажных банкнотах и ​​металлических монетах.

Современные кошельки — это так называемые иерархические детерминированные (HD) кошельки. Из исходного закрытого ключа (или исходной фразы) можно сгенерировать все дочерние ключи и адреса предсказуемым и воспроизводимым образом. Вам не нужно делать резервную копию каждого сгенерированного ключа и сгенерированного адреса.

Новый пользователь биткойнов «U» сначала генерирует закрытый ключ. Он может вычислить несколько открытых ключей из этого закрытого ключа.

Тип закрытого ключа, о котором вы говорите, — это расширенный закрытый ключ, который описан в Предложении по улучшению биткойнов 0032 (BIP32) или, как объяснил RedGrittyBrick, что обеспечивает работу HD-кошельков.

Расширенный закрытый ключ содержит в себе только один «обычный» закрытый ключ и может напрямую генерировать только один расширенный открытый ключ.

Однако эти расширенные закрытые ключи содержат также некоторую другую информацию, которая позволяет им генерировать большое количество других дочерних расширенных закрытых ключей, которые также содержат «обычные» закрытые ключи, и эти дочерние расширенные закрытые ключи могут иметь большое количество собственных дочерних ключей. расширенные закрытые ключи, и это может продолжаться и продолжаться.

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

Это 2 разные вещи. Существуют также разные типы адресов, но, за исключением адресов с несколькими подписями, все они вычисляются путем кодирования хэша открытого ключа. Таким образом, адрес не является открытым ключом, а является производным от него (P2PKH, P2WPKH). Тип адреса позволяет узнать, какую биткойн-технологию вы используете для блокировки BTC.

Если мой пользователь «U» должен получить биткойн от 10 разных людей, он может сгенерировать один общий адрес для этих 10 человек, но они смогут увидеть баланс «U» и увидеть, что он получает 10 транзакций. Решение состоит в том, чтобы сгенерировать 10 разных адресов. С этим решением каждый отправитель увидит только свою транзакцию и не увидит 9 других. Я не прав ?

Именно поэтому был предложен BIP32. Расширенный закрытый ключ также называется мастер-закрытым ключом, который может генерировать все дочерние ключи, необходимые для обеспечения конфиденциальности. Поскольку с помощью главного ключа вы можете сгенерировать бесконечное количество закрытых ключей и, следовательно, открытых ключей, вы можете сгенерировать бесконечное количество адресов.

Итак, для сокращения, можем ли мы сказать, что «U» создает 10 «виртуальных учетных записей», связанных с его закрытым ключом?

Да, но помните, что они будут связаны с основным / расширенным закрытым ключом. Каждый адрес имеет свой собственный закрытый ключ, и закрытый ключ генерируется мастер-ключом.

Если это так, я не понимаю, как «U» может вычислять свой собственный баланс: есть ли у него способ восстановить все общедоступные/адреса, которые он генерирует из своего закрытого ключа? Или пользователь должен хранить все созданные им адреса в файле?

Я думаю, что RedGrittyBrick отлично объясняет, почему мы не должны использовать термин «баланс» или «виртуальный счет» и т. д. Но, я думаю, ваш вопрос заключается в том, как узнать, сколько BTC у вас есть доступ к вашему основному приватному счету. ключ, да? ну это работа кошелька. Кошелек должен иметь возможность хранить или генерировать адреса, которые вы использовали, а затем сканировать блокчейн на наличие неизрасходованных выходов транзакций (UTXO) или, другими словами, неизрасходованных биткойнов, связанных с этими адресами. Затем кошелек суммирует все эти BTC, чтобы предоставить вам эту единственную окончательную сумму, которую некоторые люди ошибочно называют «балансом».

Большое спасибо за ваш ответ. Я чего-то не понимаю: представьте, что я потерял свой кошелек. Я читал, что могу восстановить свои биткойны, если сохраню свой закрытый ключ. Итак, как это работает ? Должен ли я также сделать резервную копию моих UTXO где-нибудь?
Попробуйте найти BIP32, BIP44 и BIP39. Таким образом, в основном кошельки пытаются использовать стандарты для создания адресов, а это означает, что довольно легко узнать, какие адреса кошелек собирается использовать в первую очередь, из иерархического дерева (BIP32), полученного из главного закрытого ключа. Таким образом, если у вас есть главный закрытый ключ или мнемоническая фраза, любой кошелек может сканировать адреса, полученные в соответствии с шаблоном BIP44, чтобы обнаружить ваши UTXO. Не все кошельки одинаковы. Попробуйте придерживаться того, который следует BIP или, по крайней мере, дает вам знать, какой протокол для создания адресов они используют.