Вы здесь

Как работают Seed-фразы кошельков эфириума?

Количество разнообразных аппаратных, программных и web-кошельков для хранения эфира на сегодняшний день не поддается подсчету. И подавляющее большинство из них в качестве основного идентификатора использует так называемые seed-фразы, которые позволяют восстановить приватный ключ даже если вы потеряли кошелек. Но как именно из seed-фраз получаются ключи?

Как работают Seed-фразы кошельков эфириума?

Ключи приватные и ключи публичные

Для работы с любой криптовалютой используются пары из приватных и публичных ключей (также называемых закрытыми и открытыми).

Для обеспечения доступа к средствам на балансе кошелька и подписи исходящих транзакций используется приватный ключ. Потеряли его - потеряли свою криптовалюту. Закрытый ключ - это случайное число определенного размера. Так, для Ethereum - 256-битное.

Теоретически возможно подобрать это число и перевести монеты на какой-нибудь другой кошелек, но вероятность этого настолько низка, что “угадывающий” скорее умрет от старости, чем что-то заработает - вариантов ключей слишком много.

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

HD-кошельки

Сегодня существуют два основных типа кошельков - недетерминированные и детерминированные.

Если недетерминированные кошельки просто создают ряд случайных пар закрытых и открытых ключей, то детерминированные выводят пары ключей из “зерна” (seed) - случайного числа определенного размера. Поскольку при такой схеме работы кошелька для создания резервной копии достаточно один раз скопировать “зерно”, упрощается и восстановление доступа к монетам, и “миграция” на другие устройства и платформы.

Большинство современных кошельков относятся к так называемым иерархически детерминированным (они же HD-кошельки). Они используют древообразную структуру в качестве “корня” которой служит зерно, а каждый полученный из него ключ имеет свои производные ключи. Благодаря возможности создания неограниченного числа открытых ключей даже без доступа к приватным ключам (храня их, например. на не подключенном к интернету носителе), такие кошельки значительно более безопасны.

Криптовалютные кошельки

При этом “зерно”, как правило, кодируется при помощи тех самых, интересующих нас мнемонических seed-фраз. Вдобавок, поскольку приватные и публичные ключи Ethereum и Bitcoin работают одинаково, разработчики кошельков для эфира не стали изобретать велосипед и использовали “предложения по улучшению биткоина” BIP32, BIP44 (описывающие создание иерархически детерминированных кошельков) и BIP39 (описывающий мнемонические фразы). Хотя в случае BIP39 многие “эфирные” кошельки используют другие наборы слов и хэш-функции, но сам механизм работы остается неизменным.

Мнемонические seed-фразы

Мнемоническая фраза - это последовательность слов, используемая для кодирования числа. Такую фразу гораздо проще запомнить, чем само число. Этой фразы достаточно для того, чтобы восстановить “зерно”, приватные ключи и кошелек целиком на любом устройстве при наличии совместимого ПО.

Процедура получения мнемонической фразы, согласно BIP39, выглядит следующим образом:

  1. Создается случайное число (энтропия). В случае Эфириума наиболее логично создание 256-битной энтропии. так как тогда безопасность seed-фразы будет соответствовать безопасности закрытого ключа Эфириума.
  2. Создается контрольная сумма энтропии. Для этого берется первая часть (в случае BIP39 - 1/32) битов ее хэш-суммы.
  3. В конец исходной энтропии добавляется полученная контрольная сумма.
  4. Полученная энтропия делится на части по 11 бит.
  5. Эти 11-битная числа служат индексами для таблицы, содержащей 2048 слов.
  6. В результате получается мнемоническая seed-фраза из 12-24 (24 в случае эфира) слов.

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

Также, для удобства использования кошельков, таблицы слов должны соответствовать нескольким правилам:

  • быть закодированными в UTF-8;
  • не использовать сходные слова. например “woman” и “women” - это усложняет запоминание и увеличивает вероятность ошибок;
  • слова должны быть подобраны таким образом, чтобы узнать слово можно было по первым четырем буквам.

В ряде кошельков работа, можно сказать, начинается с “восстановления” кошелька. Пользователь (или генератор) создает seed-фразу из слов, указанных в таблице, которая декодируется в “зерно”.

Приватные ключи из “зерна”

Для создания закрытого мастер-ключа “зерно” обрабатывается с помощью хэш-функции HMAC-SHA512 (функция односторонняя). Результат - 512-битное число - делится на 2 части по 256 бит в каждой: собственно закрытый мастер-ключ (он же родительский закрытый ключ) и “код цепи”.

Создание приватного мастер-ключа

Дочерние ключи, в свою очередь, получаются из комбинации расширенного ключа (сочетание ключа и “кода цепи”) и 32-битного индекса (порядкового номера)с помощью все той же HMAC-SHA512. Результат разделяется на дочерние закрытый ключ и код цепи.

Дочерние ключи

Размер индекса (32 бита) достаточен для создания 2 миллиардов дочерних ключей из каждого родительского. Затем процедуру можно повторить с полученным дочерним ключом, использовав его в качестве “родителя” нового поколения ключей. Ограничения на число поколений не существует - весь кошелек все равно можно будет восстановить из зерна.

“Размножение” открытых ключей

Помимо “традиционного” способа генерации - из приватных ключей - дочерние публичные ключи в HD-кошельке можно получить из родительского публичного ключа, используя процедуру, аналогичной приведенной выше. Только вместо расширенного закрытого ключа применяется расширенный открытый. Это позволяет создавать неограниченное число публичных ключей, даже не имея доступа к приватному ключу.

Размножение открытых ключей

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

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

Категория: 
Криптовалюты
Монета: 
Технология: 
5
Ваша оценка: Нет Средняя: 5 (2 оценок)
34388 / 1
Аватар пользователя Леонид Иванов
Публикацию добавил: Леонид Иванов
Дата публикации: пт, 02/23/2018 - 17:09

Что еще почитать:

Комментарии:

Анонимус

Сид-фразы в эфире работают точно также, как и в битке. В последнем они и были изначально реализованы, а потом Виталик скопипастил.

пт, 02/23/2018 - 23:43

Seed-фразы - это отличное решение для криптовалютных кошельком, и использовать их для безопасности стоит обязательно.

пн, 11/26/2018 - 12:52