Глоссарий / Адреса и ключи
Формат импорта кошелька (WIF)
Другие названия: WIF.
- Что такое формат импорта кошелька (WIF)?
- Формат импорта кошелька означает кодировку Base58, которая служит для переноса одного приватного ключа между кошельками: к 32 байтам ключа в исходном виде добавляются байт сети и контрольная сумма.
Строка WIF означает один ключ, а не кошелек: при ее импорте переносятся ровно те биткоины, которые закреплены за этим ключом, и ничего больше. Ключи основной сети начинаются с 5, если соответствующий публичный ключ несжатый, или с K либо L, если он сжатый, и содержат 51 или 52 символа. Обращайтесь со строкой так же, как с сид-фразой, потому что тот, кто ее прочитает, сможет потратить средства.
Как это работает
Формат импорта кошелька существует, чтобы необработанный секрет можно было перенести без опечаток. Возьмите 32 байта ключа, поставьте впереди байт версии (0x80 для основной сети, 0xEF для тестовой), добавьте 0x01, если ключ должен использоваться со сжатым публичным ключом, затем присоедините четыре байта контрольной суммы и закодируйте весь набор в Base58Check. Именно байт версии задает узнаваемый первый символ, а необязательный флаг сжатия удлиняет строку с 51 до 52 символов.
Эти два варианта важнее, чем кажется. Завершающий 0x01 вообще не меняет ключ; он сообщает импортирующему кошельку, какую форму публичного ключа выводить и, следовательно, на какой адрес смотреть. Если ошибиться, кошелек покажет нулевой баланс, а биткоины будут в безопасности лежать на другом адресе.
Контрольная сумма выявляет ошибки переноса до того, как они чего-то стоят. Кошелек, который декодирует строку WIF и обнаруживает несовпадение контрольной суммы, отвергает ее сразу, поэтому один неверный символ дает сообщение об ошибке, а не пустой кошелек. Чего не может ни одна контрольная сумма, так это защитить ключ, который кто-то другой уже прочитал.
Где это встречается
Ничего из того, что создает современный кошелек, не выдается в виде строки WIF. Кошельки на сид-фразах по BIP-32 хранят тысячи ключей и не имеют причин экспортировать один, поэтому WIF встречается почти исключительно в старых материалах: бумажные кошельки, напечатанные браузерными генераторами, ключи, извлеченные из настольного программного обеспечения до 2013 года, красивые адреса, полученные перебором ключей, и строки, скрытые под голограммами физических монет Casascius.
Есть два способа перенести такой ключ в текущий кошелек, и разница не косметическая.
Импорт добавляет ключ в ваш кошелек и оставляет его в работе. Теперь кошелек может потратить эти биткоины, но это может сделать и любой другой, кто когда-либо видел распечатку, ее фотографию или машину, которая ее создала. Перенос (sweep) строит транзакцию, которая отправляет весь баланс на новый адрес, выведенный из вашей собственной сид-фразы, после чего старый ключ ничем не управляет. Выполняйте перенос, если у вас нет особой причины этого не делать, и исходите из того, что любой ключ, который существовал на бумаге, на скриншоте или в облачной резервной копии, уже скомпрометирован.
Стоит сохранить еще одну привычку: строка WIF, введенная на сайте, потеряна. Страницы-генераторы, проверки баланса и «валидаторы кошельков», которые запрашивают ее, существуют, чтобы собирать ключи, и биткоины обычно уходят за считанные секунды.
Формат импорта кошелька vs сид-фраза
Строка WIF несет один ключ, а сид-фраза несет корень целого кошелька. По BIP-39 фраза из 12 слов кодирует 128 бит энтропии, а фраза из 24 слов кодирует 256 бит, и из этого корня кошелек выводит каждый ключ, который когда-либо будет использован, по всем путям вывода, навсегда. Восстановление фразы возвращает весь кошелек, включая адреса, которые вы никогда не записывали. Восстановление WIF возвращает один ключ и его биткоины, поэтому экспорт ключа является инструментом восстановления старых средств, а не стратегией резервного копирования.