Концепция программного кошелька
Программный кошелек использует случайное число для генерации главного приватного ключа.
Затем детерминированный, необратимый алгоритм генерирует произвольное количество подприватных ключей на основе главного приватного ключа.
Зачем нам нужен "детерминированный, необратимый" алгоритм? Потому что "детерминированный" гарантирует, что все подприватные ключи могут быть сгенерированы из главного приватного ключа, в то время как "необратимый" гарантирует, что главный приватный ключ не может быть восстановлен по подприватному ключу.
Причина, по которой он называется иерархически детерминированным кошельком, заключается в том, что структура вывода приватного ключа представляет собой древовидную структуру, где родительский ключ может быть выведен из серии дочерних ключей, а каждый дочерний ключ может быть выведен из серии ключей внуков и так далее, до бесконечности.
Когда мы впервые создаем HD-кошелек или делаем резервную копию кошелька, генерируется вспомогательное слово. Вспомогательное слово — это последовательность английских слов, и эта последовательность слов создает начальный сид (seed), который, в свою очередь, создает все приватные ключи. Последовательность слов также является резервной копией кошелька, которую можно восстановить. А начальный сид соответствует случайному числу всех детерминированных кошельков.
Преимущество HD-кошельков заключается в том, что требуется только главный публичный ключ для генерации любого количества подпубличных ключей. Другими словами, новые (публичные) адреса могут быть сгенерированы на основе главного публичного ключа без вмешательства приватного ключа (главного и подприватных ключей), и эти адреса фактически могут контролироваться главным приватным ключом.
Есть преимущества и недостатки: когда мы раскрываем вспомогательное слово, это также равносильно тому, что мы отдаем все приватные ключи, и безопасность ваших цифровых активов становится нулевой.
Зачем нужно так много приватных ключей
Причина, по которой пользователю нужно так много приватных ключей, иллюстрируется механизмом сдачи в транзакции Биткойна.
Биткойн-транзакция — это структура данных, содержащая входное и выходное значение. Эта структура данных содержит информацию о коде, перемещающем актив из исходной точки (входное значение) по адресу назначения (выходное значение).
Когда речь заходит о входных и выходных данных транзакции Биткойна, важно понимать термин UTXO (Unspent Transaction Output — неистраченный выход транзакции), который является основной единицей транзакции Биткойна и представляет собой неиспользованный выход транзакции. Один использованный биткойн распределяется по сотням транзакций и сотен блоков как UTXO. В реальности нет места для хранения адреса или баланса USD, только децентрализованный UTXO, заблокированный владельцем.
UTXO может иметь любое значение, но как только он создан, он неделим, как монета, которую нельзя разрезать пополам. Если UTXO больше, чем требуется для транзакции, он все равно будет потреблен целиком, но будет создан как часть транзакции.
Вот пример того, что это означает. Если у вас есть UTXO в 20 рупий, и вы хотите заплатить 1 рупию, ваша транзакция должна потребить весь UTXO в 20 рупий и создать два выходных значения: одно, которое отправляет 1 рупию получателю, и другое, которое отправляет 19 рупий в качестве сдачи обратно в ваш кошелек. В этом случае большинство транзакций по обменному курсу генерируют сдачу.
Возникает вопрос, должна ли сдача возвращаться на исходный адрес или на новый адрес. Когда Сатоши Накамото разрабатывал Биткойн, он использовал механизм нулевого возврата, который создает новый адрес для каждой транзакции. Преимущество этой конструкции заключается в защите конфиденциальности пользователя транзакции и избежании некоторых рисков безопасности.
В реальной жизни это похоже на открытие нескольких банковских счетов в разных банках с разными именами и удостоверениями личности. Даже если кто-то знает денежный поток по каждому счету, он не сможет отследить денежный поток до реального владельца цифровой валюты, что и является так называемой анонимностью Биткойна.
Вот почему вы должны знать, зачем пользователю кошелька нужно так много приватных ключей: публичные и приватные ключи всегда появляются парами, каждая транзакция может генерировать адрес для сдачи, а хранение и резервное копирование приватных ключей, соответствующих этим адресам, стало технической проблемой цифровых транзакций. HD-кошелек благодаря одному публичному ключу может генерировать любое количество подпубличных ключей, что значительно решает проблему использования цифровых кошельков.
