Глоссарий / Адреса и ключи
Отпечаток ключа
- Что такое отпечаток ключа?
- Отпечаток ключа представляет собой первые 32 бита Hash160 публичного ключа, записанные восемью шестнадцатеричными символами; кошельки используют его, чтобы указать, от какого ключа начинается путь производных ключей.
Определено в BIP-32.
Отпечаток является меткой ключа фиксированной ширины, и его ширина определяется форматом, а не выбором отображения. BIP-380 требует ровно 8 шестнадцатеричных символов внутри квадратных скобок дескриптора, и его собственные тестовые векторы отвергают отпечаток из семи символов, отпечаток из девяти символов и отпечаток, содержащий букву за пределами шестнадцатеричного набора. Если кошелек отказывается импортировать ваш дескриптор, сначала посчитайте символы в этом поле.
Как это работает
BIP-32 дает расширенному ключу две идентичности разной длины, и отпечаток является короткой из них. Идентификатор представляет собой Hash160 сериализованного публичного ключа, RIPEMD-160 от SHA-256, при этом цепной код не учитывается, и только первые 32 бита этого идентификатора называются отпечатком. Остальные 128 бит не отбрасываются: BIP-32 указывает, что полный 160-битный идентификатор может использоваться внутри, а короткая форма служит лишь быстрым способом обнаружения родительских и дочерних узлов, поэтому программное обеспечение должно быть готово иметь дело с коллизиями.
Согласованность между полем отпечатка и окружающим его ключом является правилом действительности, а не условностью. Мастер-ключ не имеет родителя и записывает 0x00000000 в поле отпечатка родительского ключа, а пятый тестовый вектор BIP-32, набор, охватывающий ключи, которые должны распознаваться как недействительные, включает и xprv, и xpub с нулевой глубиной и ненулевым отпечатком родительского ключа. Программное обеспечение, которое импортирует любую из этих строк без возражений, не следует спецификации, и это стоит знать, прежде чем доверить ему восстановление.
Где это встречается
Отпечатки ключей прежде всего встречаются в двух машиночитаемых форматах, дескрипторах выходных скриптов и частично подписанных транзакциях биткоина, и в обоих они стоят непосредственно перед путем производных ключей.
BIP-380 помещает сведения о происхождении ключа в квадратные скобки перед ключом и строг к ширине: ровно 8 шестнадцатеричных символов, затем жесткие и нежесткие шаги. Его список недопустимых выражений называет три ошибки в одном этом поле: deadbef из семи символов, deadbeeef из девяти и gaaaaaaa, начинающийся с буквы, которая не является шестнадцатеричной цифрой. Все три отвергаются сразу, так что опечатка в отпечатке приводит к ошибке импорта, а не к кошельку, который молча следит за неверной ветвью.
BIP-174 связывает отпечаток размером 4 байта с путем, записанным как 32-битные целые числа в порядке little endian, и для записи глобального расширенного публичного ключа количество этих целых чисел должно совпадать с глубиной, которую объявляет сам xpub. Это количество позволяет подписывающему устройству сопоставить указанный путь с ключом, который ему передали, вместо того чтобы полагаться на метку.
На экране устройства те же восемь символов отвечают на один вопрос: какая это сид-фраза. Они не дают ничего, что можно потратить, поскольку усеченный хеш нельзя превратить обратно в ключ или адрес. При этом они остаются идентификатором, поэтому два дескриптора с одинаковыми восемью символами являются видимой связью между этими двумя ветвями.
Отпечаток ключа vs адрес биткоина
Отпечаток ключа и адрес биткоина начинаются с одного хеша и сразу после этого перестают быть сравнимыми. BIP-32 отмечает, что идентификатор расширенного ключа точно соответствует данным, используемым в традиционных адресах биткоина, а затем не советует записывать этот идентификатор в base58, потому что его прочли бы как адрес, а программное обеспечение кошелька не обязано принимать платежи на сам ключ цепочки. Отпечаток сохраняет 4 из 20 байт идентификатора и записывается простым шестнадцатеричным кодом, поэтому он слишком короток, чтобы его даже случайно приняли за адрес получателя. Восемь шестнадцатеричных символов в дескрипторе говорят, с какого ключа начался путь; адрес говорит, куда разрешено отправлять средства.