Fingerprint BIP32 состоит из первых 4 байтов HASH160 сжатого публичного ключа. HASH160 означает SHA-256, а затем RIPEMD-160 — две функции, вычисляющие числовые отпечатки данных. Полученные 32 бита обычно показывают как 8 шестнадцатеричных символов, то есть цифр и букв. Chain code, дополнительные данные для получения следующих ключей, в этот короткий отпечаток не входит.
Представьте, что у вас есть записи о нескольких кошельках и нужно их различать. Fingerprint служит короткой меткой, вычисленной из публичного ключа в строго определённом представлении. Это не прямой хеш резервных слов или приватного ключа. Сама метка не является адресом для получения, не подписывает платежи и не позволяет восстановить ключи. Поэтому её сохранение не заменяет копию, из которой кошелёк действительно можно восстановить. [1]
BIP32 создаёт дерево ключей: от главного ключа получают другие, словно ветви от общего ствола. Запись расширенного публичного ключа xpub или приватного xprv содержит fingerprint родительского ключа, расположенного уровнем выше. У главного ключа родителя нет, поэтому это поле содержит 00000000. Но это не его собственный fingerprint. Приложение может показывать именно собственный отпечаток главного ключа; перед сравнением выясните, какое значение вы читаете. [1]
Главный ключ из публичного тестового вектора BIP32 номер 1 имеет собственный fingerprint 3442193e. При этом родительское поле его главного xpub содержит 00000000. Противоречия нет: одно значение описывает сам ключ, другое — его отсутствующего родителя. Тестовый вектор — опубликованный набор входов и ожидаемых результатов для проверки программы. Никогда не используйте эти общеизвестные данные как основу кошелька для собственных денег. [1]
PSBT — пакет данных транзакции, который можно передать устройству для подписи. По BIP174 он связывает главный fingerprint с путём получения ключа, то есть последовательностью шагов к конкретному публичному ключу. Происхождение ключа может хранить и Output Descriptor — текстовое описание ключей и правил расходования. Когда подписывающее устройство проверяет сдачу от платежа, одного совпадения отпечатков недостаточно. Оно должно получить и сравнить настоящий ключ и соответствующие условия, чтобы не принять чужой выход за свой. [2] [3]
Короткий отпечаток экономит место, но имеет ограниченный диапазон: 32 бита допускают только 4294967296 значений. Поэтому разные ключи могут иметь одинаковый fingerprint. Это называется коллизией, и BIP32 прямо требует, чтобы программы её учитывали. Совпадение не проверяет все счета, пути получения ключей или типы скриптов, то есть правила расходования. Оно также не доказывает наличие нужных приватных ключей. [1] [3]
Сначала убедитесь, что сравниваете один и тот же тип отпечатка на одном уровне дерева. Отличие может указывать на другой seed, секретную основу ключей, или другую passphrase, дополнительный пароль. Прежде чем делать вывод, исключите путаницу между главным и родительским полями. Дополните совпадение проверкой известных адресов, путей получения ключей и правил расходования. Fingerprint — полезная частичная проверка, но не замена надёжно сохранённой копии и проверенной процедуре восстановления. [1] [3]
Для полной картины прочитайте эту статью вместе с HD Wallet, PSBT, BIP39 passphrase, Output Descriptor. На эту статью также ссылаются SeedQR.