BIP324 описывает шифрование сообщений, которыми обмениваются узлы Bitcoin. Узел — программа, которая проверяет транзакции и блоки и обменивается данными с другими участниками сети. Такие прямые соединения между участниками сети называют P2P, а их зашифрованный вариант — v2 transport. Тот, кто лишь прослушивает соединение, не должен легко читать его содержимое. Однако само шифрование не подтверждает, с каким узлом вы действительно общаетесь. Публичная цепочка блоков и правила действительности транзакций не меняются.
Блок — пакет транзакций, добавленный в общую историю Bitcoin. Блоки публичны, но наблюдать их распространение — не то же самое, что читать готовую цепочку. В незашифрованном соединении видны также порядок сообщений, запросы и момент передачи транзакции узлом. Это помогает связывать сетевую активность с людьми. BIP324 ограничивает такое простое чтение содержимого пассивным наблюдателем. [1] [2] [7]
Два совместимых узла согласуют ключи при подключении и дальше общаются зашифрованно. Им не нужно заранее знать личность друг друга или иметь сертификат центрального органа. Поэтому зашифрованный не значит заслуживающий доверия. Другой узел, конечно, читает сообщения и по-прежнему может принадлежать атакующему. [1]
В начале соединения, во время процедуры handshake, оба узла создают временные ключи. Приватный ключ — секретное числовое значение; соответствующий открытый ключ можно передавать другим. С помощью ECDH каждый вычисляет один и тот же общий секрет, не передавая приватные ключи. Из него выводятся ключи защиты передачи. ElligatorSwift кодирует открытые ключи так, чтобы эта часть обмена напоминала случайные данные и её было сложнее распознать по постоянному шаблону. Это исключительно ключи сетевого соединения. Они не являются приватными ключами для расходования биткоинов или seed — секретным исходным значением, из которого выводятся ключи кошелька. Включение шифрованной передачи не требует раскрывать резервную копию кошелька. [1] [8]
Представьте, что кто-то перехватил сообщение по пути и изменил его содержимое. BIP324 использует ChaCha20Poly1305: шифрование с проверкой того, что сообщение соответствует ключу соединения и не было изменено. Без этого ключа атакующий не может просто переписать данные и получить корректное сообщение. Но проверка не доказывает, что один и тот же ключ есть у вас и именно у нужного узла. Активный посредник может при установлении соединений выдавать себя перед каждой стороной за её собеседника. Тогда у него два отдельных зашифрованных соединения, и он читает и передаёт сообщения между ними. Поэтому защита сообщений и проверка другой стороны — разные задачи. [1]
Ключи меняются по ходу соединения. При правильном удалении прежних секретов позднейшее получение текущих ключей не открывает автоматически всю предыдущую запись. Это свойство называется forward secrecy. Но оно не защищает сообщения, которые другой узел уже прочитал или сохранил. Не помогает оно и против атакующего, постоянно контролирующего компьютер; самая недавняя группа сообщений также может остаться доступной для раскрытия. [1]
Старый v1 transport остаётся доступным ради совместимости. Если соединение v2 не удаётся, программа может попробовать v1. Поэтому активный атакующий может блокировать зашифрованные соединения, пытаясь навязать незашифрованный откат. BIP324 удорожает пассивное наблюдение, но не обещает общей защиты от downgrade или доступности связи. [1] [4]
BIP324 не скрывает IP-адрес и все временные и объёмные характеристики трафика. IP-адрес — сетевой адрес, который устройство использует для связи через интернет. Tor может решать другую часть задачи, но и сочетание не гарантирует анонимности. Каким бы путём ни пришло сообщение, Full Node обязан проверить транзакции, подписи и блоки. Само шифрование не устраняет Eclipse Attack, при котором узел окружают атакующие. [1] [6]
Bitcoin Core 26.0 добавил поддержку v2 в 2023 году, сначала выключенную по умолчанию. Версия 27.0 включила её по умолчанию. Год этой статьи обозначает первую поддержку в Bitcoin Core, а не возникновение предложения. Транспорт согласуется отдельно для каждого соединения: совместимая программа ещё не означает, что все её peers используют v2. [3] [4]
Оператор Bitcoin Core может прочитать состояние командой bitcoin-cli getpeerinfo. Это запрос через RPC, интерфейс управления узлом и получения информации; данная команда не распространяет транзакции в сети Bitcoin и не меняет настройки. Результат показывает каждое соединение отдельно. В transport_protocol_type значение v2 означает зашифрованную передачу, v1 — старую незашифрованную, а detecting — ещё не определённый вариант. Поле session_id содержит идентификатор соединения v2; в остальных случаях оно пустое. Само его наличие не подтверждает другую сторону. Два оператора могут сравнить идентификатор своего взаимного соединения через другой доверенный канал, чтобы обнаружить посредника; обычные соединения не выполняют эту проверку автоматически. Результат описывает это звено, а не весь путь транзакции по сети. Вывод также содержит сетевые данные, которые не требуется публиковать. [5] [1]
BIP324 называет авторами Dhruv Mehta, Tim Ruffing, Jonas Schnelli и Pieter Wuille. Номер присвоен в 2019 году; при проверке 17 октября 2026 года статус — Deployed. Внедрение не требует Soft Fork или изменения предложения биткоинов. Это постепенное улучшение связи, польза которого зависит от правильной реализации и реально используемых соединений. [1]
Для полной картины прочитайте эту статью вместе с Full Node, Eclipse Attack, Приватность в Bitcoin, Bitcoin Core. На эту статью также ссылаются Mix Network.