Seed фраза (мнемоническая фраза) – что такое и как работает
Сид фраза («мнемонический код», «SEED») – это список последовательности слов для генерации приватных ключей в кошельке криптовалюты.
Мнемоническая фраза - это группа слов, часто из 12 или более, сгенерированная при создании нового кошелька для хранения криптовалюты. Большинство людей переписывают свои фразы на лист бумаги, а затем хранят его в надежном месте.
«Мнемоника» представляет собой вспомогательное средство для запоминания, такое как рифмы, сокращения и песни, которые помогут вам вспомнить нужную комбинацию. Это и есть ключ к кошельку.
Другими словами, ваш кошелек использует большое случайное число для генерации приватных ключей и адресов, а мнемоническая фраза дает нам удобный способ сохранить это число.
Мнемоническая фраза обычно составляет от 12 до 24 слов. А в словаре для генерации сид-фразы существует 2048 слов.
Существует несколько стандартов (BIP), используемых различными кошельками для взаимодействия с сид фразой:
BIP32 - это метод генерации дерева приватных ключей из главного закрытого ключа (мастер-ключа).
BIP39 – это метод для кодирования 128-256 бит случайных данных в 12-24 слова из списка в словаре, а затем преобразования этих фраз в 64-байтовый хэш.
BIP44 - это метод структурирования дерева приватных ключей определенным образом, который облегчит использование /восстановление / обнаружение нескольких учетных записей для различных целей.
Обязательно читайте смежные статьи для того, чтобы лучше понимать о чем идет речь:
Private Key Ethereum: Приватный ключ от Эфириума примеры
Восстановление кошелька Electrum с помощью seed-фразы
Как восстановить кошелек из seed - Импорт бумажного кошелька (на примере Монеро)
Для безопасной генерации SEED-фразы ОФФЛАЙН используйте этот сервис
Как генерируется мнемоническая фраза технически?
Существует три шага:
- Случайное число (энтропия)
- Энтропия переводится в слова (мнемонику)
- Из мнемонических слов создается фраза
Упрощенная схема генерации сид-фразы
1. Создание случайных чисел (энтропии)
Энтропия должна быть от 128 до 256 бит.
Чтобы создать мнемоническую фразу, прежде всего нужно сгенерировать случайные числа (энтропию), которые являются нашим источником для сид-фразы.
Энтропия - это очень большое случайное число, которое никто никогда не генерировал раньше или никогда не будет генерировать в будущем.
Лучше всего думать об этом числе как о последовательности битов (например 10011010010001...), как компьютеры хранят числа.
Примечание: бит (0 или 1) является наименьшей единицей хранения информации на компьютере.
Генерируемая энтропия должна быть кратна 32 битам, поскольку это позволит разделить энтропию на четные порции и преобразовать ее в слова в дальнейшем.
Кроме того, энтропия должна составлять от 128 до 256 бит, так как этого достаточно, чтобы два человека не смогли сгенерировать одинаковую энтропию.
Осторожно! Всегда используйте безопасный генератор случайных чисел для вашей энтропии. Не используйте «случайную» функцию вашего языка программирования по умолчанию, поскольку числа, которые он выдает, не достаточно случайны для криптографии.
2. Энтропия переводится в слова (мнемонику)
Теперь, когда у нас есть энтропия, мы можем закодировать ее в слова.
Прежде всего, мы добавляем контрольную сумму к нашей энтропии, чтобы помочь обнаружить ошибки (делая последнюю фразу более удобной для пользователя). Эта контрольная сумма создается путем хеширования энтропии через безопасный алгоритм хеширования SHA256, что дает нам уникальный отпечаток нашей энтропии.
Затем мы берем 1 бит этого хеша контрольной суммы на каждые 32 бита энтропии и добавляем его в конец нашей энтропии.
Затем мы разбиваем это на группы по 11 битов, преобразуем их в десятичные числа и используем эти числа для выбора соответствующих слов.
В словаре есть 2048 слов.
И теперь у нас есть мнемонический код.
Примечание: 11- битное число может содержать десятичное число между 0-2047 (именно поэтому в словаре 2048 слов).
Примечание: добавляя 1 бит контрольной суммы к каждым 32 битам энтропии, мы всегда получим кратное 33 битам, которое можно разделить на равные 11-битные порции.
3. Из мнемонического кода создается SEED-фраза
Теперь, когда у нас есть наш мнемонический код, мы можем преобразовать его в нашу SEED-фразу.
Чтобы создать СИД, нужно поместить мнемонический код в функцию PBKDF2. Эта функция, в основном, многократно хэширует мнемоническое предложение (+ необязательную парольную фразу), пока не получит окончательный 64-байтовый (256-битовый) результат.
Необязательная парольная фраза (passphrase) позволяет изменять конечный результат.
Этот 64-байтовый результат является вашей финальной СИД-фразой, которая может быть использована для создания мастер ключа для иерархического детерминированного кошелька.
Иерархия ключей в криптовалюте
PBKDF2 - это, по сути, хеш-функция, которая разработана для медленной работы (путем хеширования данных несколько раз до получения результата). Преимущество этого состоит в том, что кому-то еще сложнее использовать мнемоническую фразу, чтобы попытаться получить сид, который люди уже когда-то использовали.
Кроме того, PBKDF2 также позволяет вам предоставить второй ввод, называемый «фразой-паролем» или «seed extension» вместе с данными, которые вы хотите хэшировать. Это позволяет вам создавать совершенно разные начальные числа из одной и той же мнемонической фразы.
Слова в мнемоническом предложении происходят из фиксированного списка из 2048 слов (они определяются BIP39). Первые 4 буквы каждого слова уникальны в списке.