BIP324는 Bitcoin 노드끼리 주고받는 메시지를 암호화하는 방법을 설명합니다. 노드는 거래와 블록을 검증하고 네트워크의 다른 참여자와 통신하는 소프트웨어입니다. 네트워크 참여자 사이의 이런 직접 연결을 P2P 연결이라고 하며, 암호화된 방식은 v2 transport라고 부릅니다. 연결을 수동적으로 엿듣는 사람이 내용을 쉽게 읽지 못하게 하는 것이 목적입니다. 다만 암호화만으로 실제 어느 노드와 통신하는지 확인되지는 않습니다. 공개 블록체인과 거래 유효성 규칙은 바뀌지 않습니다.
블록은 비트코인의 공통 기록에 추가되는 거래 묶음입니다. 블록은 공개되어 있지만 전파 과정을 관찰하는 일은 완성된 체인을 읽는 것과 다릅니다. 암호화되지 않은 연결에서는 메시지 순서와 요청, 노드가 거래를 전달한 시각도 보입니다. 이는 네트워크 활동을 특정 사람과 연결하는 단서가 될 수 있습니다. 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은 2023년에 v2 지원을 추가했으며 처음에는 기본적으로 꺼져 있었습니다. 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년에 배정되었고 2026년 10월 17일 확인 당시 상태는 Deployed입니다. 도입에 Soft Fork나 비트코인 공급량 변경은 필요하지 않습니다. 노드 통신을 점진적으로 개선하며, 효과는 올바른 구현과 실제 사용하는 연결에 달려 있습니다. [1]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Full Node, Eclipse Attack, Bitcoin 프라이버시, Bitcoin Core. 다음 항목에서도 이 글을 참조합니다 Mix Network.