BIP-322 v2.0.0 formats не взаимозаменяемы
VariantPrefixОбъект proofОсновная граница
LegacyБез нового prefixRecoverable ECDSA signatureMAY только для legacy P2PKH; новые proofs SHOULD использовать новый формат
SimplesmpConsensus-encoded witness stackNative P2WPKH/P2WSH/P2TR без timelock scripts
FullfulПолная виртуальная to_sign transactionПоддерживает общий script path и time constraints
Full Proof of FundspofFinalized PSBT с дополнительными UTXO inputsПоказывает выбранный набор, не полноту; нужен current UTXO-set check
BIP-322 v2.0.0 formats не взаимозаменяемы
Variant
Legacy
Prefix
Без нового prefix
Объект proof
Recoverable ECDSA signature
Основная граница
MAY только для legacy P2PKH; новые proofs SHOULD использовать новый формат
Variant
Simple
Prefix
smp
Объект proof
Consensus-encoded witness stack
Основная граница
Native P2WPKH/P2WSH/P2TR без timelock scripts
Variant
Full
Prefix
ful
Объект proof
Полная виртуальная to_sign transaction
Основная граница
Поддерживает общий script path и time constraints
Variant
Full Proof of Funds
Prefix
pof
Объект proof
Finalized PSBT с дополнительными UTXO inputs
Основная граница
Показывает выбранный набор, не полноту; нужен current UTXO-set check

Запрос фиксирует message bytes, script и момент проверки

До контакта с signer проверяющий формирует сообщение с целью, доменом или контекстом, уникальным challenge и временем либо сроком принятия. BIP-322 hash использует сообщение как есть: другая кодировка, перенос строки или пробел создают другой результат. Отдельно фиксируют Bitcoin network, полный адрес и полученный из него scriptPubKey. Адрес — удобное представление, но проверка удовлетворяет именно script challenge.

Минимальный паспорт verification request
ПолеПример содержания без реальных данныхЗачем
PurposeПодтверждение контроля для конкретной заявкиНе даёт переносить proof в другой процесс
Nonce/challengeСлучайное одноразовое значениеСнижает риск replay старого proof
Time windowСоздано и принимается до указанного UTCОпределяет freshness вне самой подписи
Address/scriptТочная mainnet/testnet строка и scriptPubKeyЗакрепляет policy, которую должен удовлетворить signer
Variant/versionBIP-322 v2.0.0 smp, ful или pofИсключает догадки decoder и старый draft flow
Минимальный паспорт verification request
Поле
Purpose
Пример содержания без реальных данных
Подтверждение контроля для конкретной заявки
Зачем
Не даёт переносить proof в другой процесс
Поле
Nonce/challenge
Пример содержания без реальных данных
Случайное одноразовое значение
Зачем
Снижает риск replay старого proof
Поле
Time window
Пример содержания без реальных данных
Создано и принимается до указанного UTC
Зачем
Определяет freshness вне самой подписи
Поле
Address/script
Пример содержания без реальных данных
Точная mainnet/testnet строка и scriptPubKey
Зачем
Закрепляет policy, которую должен удовлетворить signer
Поле
Variant/version
Пример содержания без реальных данных
BIP-322 v2.0.0 smp, ful или pof
Зачем
Исключает догадки decoder и старый draft flow

Proof выглядит как spend, но его challenge input не существует в сети

Спецификация строит to_spend с несуществующим prevout и output, содержащим message_challenge, затем to_sign тратит этот виртуальный output в нулевой OP_RETURN. Signer удовлетворяет input так, как удовлетворил бы Bitcoin Script. Это позволяет использовать witness, multisig и Taproot-механики, не создавая broadcastable transaction и не перемещая bitcoin. Verifier реконструирует те же виртуальные objects и запускает consensus checks с перечисленными BIP-322 ограничениями. До подтверждения важно видеть, что именно подписывает кошелёк.

Workflow signer → verifier

  1. 1
    Заморозить request

    Сохранить UTF-8 bytes сообщения, network, address/script, BIP-322 version и допустимый variant до подписи.

  2. 2
    Проверить implementation

    Убедиться, что wallet и verifier явно поддерживают нужный script и финальный v2.0.0 format; слова sign message без version недостаточно.

  3. 3
    Показать challenge signer

    Устройство должно отобразить сообщение и challenge address/script как message signing, а не неизвестную отправку средств.

  4. 4
    Получить prefixed proof

    Не отрезать smp, ful или pof и не менять base64 payload. Для multisig собрать требуемые partial signatures до финализации.

  5. 5
    Проверить independently

    Verifier использует исходные bytes и script, декодирует variant, выполняет script checks и фиксирует valid, invalid либо inconclusive.

Совместимость проверяют по версии продукта, script и completed flow

BIP-322 Complete не означает, что каждый кошелёк уже реализовал все variants. На дату проверки официальная документация COLDCARD описывает completed-flow BIP-322 PSBT для Mk4/Mk5 начиная с 5.5.1 и Q с 1.4.1Q; более ранние draft-запросы передавали message отдельно и не являются текущим flow. Это пример точной границы, а не универсальный список совместимости. Для любого другого signer, включая аппаратный кошелёк, нужны его официальный version note, поддерживаемый script и формат export; для verifier — явная поддержка prefix и test vectors v2.0.0.

Proof of Funds раскрывает выбранные UTXO, но не весь баланс

В pof signer добавляет к виртуальному challenge реальные UTXO inputs и удовлетворяет их scripts. Проверяющий с доступом к актуальному UTXO set может установить, что перечисленные outputs существуют и не потрачены на момент проверки. Сам proof не доказывает, что это все средства адреса или организации; offline verifier способен проверить cryptographic witness, но не current unspent state. Публикация pof также связывает выбранные coins, scripts, public keys и иногда wallet structure — существенная граница для Proof of Reserves.

Что означает успешная проверка — и что остаётся неизвестным
ПровереноДопустимый выводНедопустимый вывод
Message proofScript удовлетворён для точного challengeПодписант — конкретный человек или владелец по закону
Fresh nonce/time policyProof принят в заданном внешнем окнеКонтроль гарантирован после окна
pof witnessSigner удовлетворил scripts выбранных UTXOПоказан полный баланс или чистое происхождение средств
pof + current chain checkУказанные UTXO unspent на момент queryСредства не будут потрачены сразу после проверки
Valid scriptVerifier понимает и принимает policyРанее отправленная транзакция создана этим signer
Что означает успешная проверка — и что остаётся неизвестным
Проверено
Message proof
Допустимый вывод
Script удовлетворён для точного challenge
Недопустимый вывод
Подписант — конкретный человек или владелец по закону
Проверено
Fresh nonce/time policy
Допустимый вывод
Proof принят в заданном внешнем окне
Недопустимый вывод
Контроль гарантирован после окна
Проверено
pof witness
Допустимый вывод
Signer удовлетворил scripts выбранных UTXO
Недопустимый вывод
Показан полный баланс или чистое происхождение средств
Проверено
pof + current chain check
Допустимый вывод
Указанные UTXO unspent на момент query
Недопустимый вывод
Средства не будут потрачены сразу после проверки
Проверено
Valid script
Допустимый вывод
Verifier понимает и принимает policy
Недопустимый вывод
Ранее отправленная транзакция создана этим signer

Invalid и inconclusive исправляют сверкой контекста, не новой подписью вслепую

Recovery при несовместимом proof

  1. 1
    Сравните bytes

    Проверить UTF-8 encoding, пробелы, переносы, Unicode normalization и одноразовый challenge с сохранённым request.

  2. 2
    Сравните script

    Пересчитать scriptPubKey из точного address в правильной сети; не подменять wrapped SegWit, native SegWit и Taproot.

  3. 3
    Сравните variant

    Сохранить prefix smp/ful/pof и убедиться, что verifier декодирует именно BIP-322 v2.0.0, а не pre-final draft.

  4. 4
    Проверьте support

    Найти официальный version note signer/verifier и повторить test vector. Inconclusive означает недостаток поддержки, а не valid.

  5. 5
    Создайте новый request

    Если freshness window истёк или message был неверен, отозвать старый challenge и подписать новый после визуальной сверки.

Остановитесь, если устройство показывает обычный spend, адрес или message не совпадают, координатор просит seed, либо proof предлагается как доказательство личности, права собственности или отсутствия других UTXO. Корректный handoff содержит request bytes/hash, network, address/script, variant/version, proof и timestamp проверки. Эти данные позволяют воспроизвести технический результат, не расширяя его смысл.

Источники

Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.

  1. BIP-322 v2.0.0 — Generic Signed Message Format Bitcoin BIPs · Проверено 21 августа 2026 г. в 22:03 GMT+5
  2. COLDCARD — BIP-322 Signing Coinkite / COLDCARD · Проверено 21 августа 2026 г. в 22:03 GMT+5
  3. COLDCARD — Version History Coinkite / COLDCARD · Проверено 21 августа 2026 г. в 22:03 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.