Что такое детерминированный кошелек?

Звучит так, как будто это процесс, который позволяет восстановить кошелек из парольной фразы или из нескольких разбросанных фрагментов. Может ли кто-нибудь дать подробное техническое объяснение?

Ответы (5)

Вы попали в самую точку. Детерминированный кошелек — это любая система, которая использует кодовую фразу или другой фрагмент данных для создания повторяющейся пары ключей. Пока вы помните кодовую фразу, пара ключей может быть повторно сгенерирована из нее, поэтому хранение больше не является проблемой безопасности. Существует несколько методов создания детерминированных кошельков, но мой любимый — это генератор биткойн-адресов от Casascius (C#, Windows, бинарники здесь ) .

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

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

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

afaik, webcoin.ch использует эту концепцию. Нынешнего "официального" клиента нет.

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

Детерминированный кошелек — это любой кошелек, для которого данный закрытый ключ может быть предсказуемо восстановлен с помощью всего лишь:

  • оригинальное секретное семя
  • идентификатор/порядковый номер нужной пары ключей

Существует два типа детерминированных кошельков:

  • последовательные детерминированные кошельки
  • иерархические детерминированные кошельки

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

Например, если я использую парольную фразу:

'shepherd mais pack rate enamel horace diva filesize maximum really roar mall'

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

hex(sha256('shepherd mais pack rate enamel horace diva filesize maximum really roar mall 0'))
hex(sha256('shepherd mais pack rate enamel horace diva filesize maximum really roar mall 1'))
...

И пока я придерживаюсь того, как я изменяю исходную фразу-пароль, я могу легко восстановить любую фразу-пароль, которую захочу.

Иерархический детерминированный кошелек, с другой стороны, начинается с одной пары ключей в качестве главной пары ключей. Закрытый ключ этой пары ключей является секретным начальным числом.

У каждой пары ключей есть дети. И открытый ключ данного дочернего элемента данного родительского узла в дереве генерируется путем умножения на эллиптическую кривую открытого ключа родителя.

Закрытый ключ дочернего элемента может быть восстановлен владельцем путем выполнения той же мультипликативной операции над закрытым ключом родителя. Это связано с тем, что m Pubkey/Pubkey = m Privkey/Privkey.

Самое классное в этом то, что вы можете дать серверу открытый ключ, и этот сервер может генерировать для вас новые адреса, даже не зная вашего закрытого ключа.

...

Если вы ищете реализацию последовательных детерминированных кошельков на Python, я собрал ее здесь: https://github.com/blockstack/pybitcoin (или просто выполните «pip install pybitcoin»).

У меня пока нет рабочей реализации иерархических детерминированных кошельков, но для этого я бы проверил эту реализацию Python или эту реализацию Ruby .

Очень хорошо. Немного выше моей головы, но полезно для меня в данный момент. Не могли бы вы подумать над ответом на этот вопрос: что такое «начальное слово» кошелька, которое обычно используется в популярных клиентах кошельков и что оно делает?
@Ryan, так что это означает, что родитель всегда знает открытый и закрытый ключ ребенка, но обратное неверно.
Является ли эта функция (получение дочернего закрытого ключа из главного закрытого ключа) односторонней функцией?

Другим примером использования детерминированных кошельков является BCCAPI, библиотека для создания облегченных безопасных биткойн-клиентов. http://code.google.com/p/bccapi/

Первичные предложения по улучшению биткойнов (BIP), связанные с детерминированными, в частности, иерархическими детерминированными (HD) кошельками для облегчения переноса между реализациями, чтобы избежать привязки к поставщику, — это BIP 32, 39, 44. BIP касаются технических деталей. Возможно, вы захотите изучить libbitcoin на наличие примеров интерфейса командной строки для применения BIP 32, 39 и 44.