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