본문으로 건너뛰기
buybitcoinsmart

용어집 / 노드와 소프트웨어

BIP-324 암호화 전송

별칭은 v2 전송입니다.

BIP-324 암호화 전송이란 무엇입니까?
BIP-324 암호화 전송은 비트코인의 버전 2 피어 간 연결 프로토콜로, 두 노드 사이에서 주고받는 모든 메시지를 암호화하며 도청자에게는 연결이 무작위 데이터와 구별되지 않게 만듭니다.

BIP-324에 명시되어 있습니다.

BIP-324를 모두 지원하는 두 노드는 어떤 Bitcoin 메시지도 보내기 전에 임시 키 교환을 수행한 뒤, 모든 메시지를 ChaCha20Poly1305로 감쌉니다. 이 규격은 2024년 7월 10일에 최종으로 표시되었으며, 노드는 NODE_P2P_V2 서비스 플래그, 즉 11번 비트로 지원을 알립니다. 보유한 코인에는 달라지는 것이 없습니다. 달라지는 것은 수동적인 관찰자가 이용자의 노드가 중계하는 트랜잭션을 더 이상 읽을 수 없다는 점입니다.

작동 방식

BIP-324는 예전에 비트코인 연결을 열던 고정 매직 바이트를 알아볼 수 있는 형태가 전혀 없는 스트림으로 대체합니다.

연결을 거는 쪽은 일회용 secp256k1 키를 생성하고 자신의 공개 키를 64바이트 ElligatorSwift 인코딩으로 보냅니다. 이 인코딩이 핵심입니다. 일반적인 공개 키는 곡선 위의 점으로 식별할 수 있지만, 모든 512비트 문자열이 유효한 ElligatorSwift 인코딩이므로 시작 바이트는 통계적으로 그저 잡음입니다. 그런 다음 어느 쪽이든 최대 4095바이트의 임의 패딩, 즉 가비지를 덧붙일 수 있어 연결이 반드시 정확히 64바이트로 시작할 필요가 없습니다. 양쪽 끝은 X-only ECDH를 수행하고 그 결과를 HKDF-SHA256에 통과시켜 암호화 키 4개, 16바이트 가비지 종료자 2개, 세션 ID를 도출합니다.

이 시작 바이트는 교환 과정에서 평문으로 전송되는 유일한 부분입니다. 종료자 뒤에 오는 모든 것은 패킷입니다. 패킷은 3바이트 암호화된 길이 필드에 이어 1바이트 헤더와 내용을 포함하는 ChaCha20Poly1305 암호문으로 구성되며, 20바이트에 페이로드를 더한 크기를 차지합니다. 그 헤더의 최상위 비트는 무시 비트이며, 이를 담은 패킷은 미끼입니다. 수신자는 복호화가 되는지 확인한 뒤 폐기하며, 노드가 트래픽을 패딩해 실제 메시지가 나간 시점을 감추는 방식이 바로 이것입니다. 키는 224개 패킷마다 앞으로 넘어가며, 이 간격은 20분 핑만 보내는 거의 유휴 상태의 링크가 대략 3.11일마다 키를 갱신하도록 선택된 것이고, 이렇게 넘어가는 키가 세션에 전방 비밀성을 부여합니다.

이 설계는 상대편이 누구인지 증명하는 단계에서 의도적으로 멈춥니다. 인증서도 신원도 없으므로 작정한 중간자가 두 노드 사이에 여전히 앉아 있을 수 있습니다. 다만 값싸게 또는 눈에 띄지 않게 앉아 있을 수는 없습니다. 세션 ID는 키 교환에서 나오며, 두 운영자가 각자의 값을 서로에게 소리 내어 읽어 주면 누군가 사이에 앉아 있을 때마다 서로 다른 값을 보게 됩니다.

확인할 수 있는 곳

BIP-324는 블록체인에 아무것도 남기지 않으므로, 이것이 나타나는 유일한 곳은 실행 중인 두 노드 사이입니다.

지원 여부는 피어가 addr 및 addrv2 메시지에서 알게 되는 NODE_P2P_V2 플래그를 통해 주소 가십에서 알려집니다. 이 플래그는 신뢰할 수 없는 중계자를 거치며 OR로 합쳐지므로 거짓 광고가 가능하며, 이 BIP는 즉시 연결이 끊긴 v2 클라이언트가 같은 피어에 v1으로 다시 시도하도록 권장합니다. 반대 방향으로, v2 노드는 네트워크가 서로 통신할 수 없는 두 개의 절반으로 갈라지지 않도록 하기 위해 인바운드 v1 연결을 일부러 계속 받아들입니다.

두 번째로 눈에 띄는 효과는 더 짧아진 메시지입니다. 버전 1은 모든 명령 이름에 12 ASCII 바이트를 썼습니다. 버전 2는 지금까지 정의된 28개 메시지 유형에 1바이트 ID를 부여하므로 inv는 단일 바이트 14이고 getblocktxn은 10이며, 짧은 ID를 쓰는 모든 메시지는 v1 형태보다 3바이트 적게 듭니다. ID가 할당되지 않은 것은 13바이트 인코딩, 즉 0바이트 뒤에 예전 ASCII 이름을 붙이는 방식으로 대체되므로 잃는 것은 없습니다.

이 규격은 상태가 Deployed이며, 테스트 벡터와 시연만을 위한 단순한 Python 참조 구현을 포함하고, 여전히 편집되고 있습니다. 2026년 1월 30일의 개정 1.0.2는 다른 BIP가 기본 문서를 편집하지 않고도 ID를 차지할 수 있도록 보조 파일에 메시지 유형 ID 표를 추가했습니다. 머리말은 또한 BIP-324가 BIP-151을 대체한다고 기록합니다.

자주 묻는 질문

BIP-324는 제 비트코인 트랜잭션을 비공개로 만듭니까?

아닙니다. 이 규격은 두 노드 사이의 연결을 암호화하며, 그 노드들이 서로 중계하는 블록체인은 전적으로 공개된 상태로 남습니다. 이것이 없애는 것은 수동적인 네트워크 운영자가 이용자의 특정 노드가 어떤 트랜잭션을 가장 먼저 알렸는지 볼 수 있는 능력이며, 이는 원장의 문제가 아니라 메타데이터의 문제입니다.

v2 전송을 사용하려면 무언가를 켜야 합니까?

지갑 앱에서는 아무것도 켤 필요가 없습니다. 협상은 사용자와 거래소 사이가 아니라 노드 사이에서 이루어지기 때문입니다. 이를 지원하는 노드는 NODE_P2P_V2 서비스 플래그를 알리며, 이 BIP는 즉시 연결이 끊긴 v2 클라이언트가 그 피어에 v1으로 다시 시도하도록 권장하므로 재시도는 사용자가 아니라 노드 소프트웨어의 몫입니다.

관찰자가 제가 비트코인 노드를 운영한다는 사실을 여전히 알 수 있습니까?

그렇습니다. 여러 면에서 그렇습니다. 이 BIP는 패킷의 타이밍과 길이를 분석하면 여전히 v2%토콜이 사용되고 있음을 드러낼 수 있다고 분명히 밝히고 있으며, 연결을 방해할 수 있는 공격자는 피어를 평문 v1으로 되돌릴 수 있습니다. 의사 난수 바이트 흐름은 핑거프린팅을 제거하는 것이 아니라 그 비용을 높입니다.

다음에 읽을 글

출처

마지막 검토일은 2026년 9월 6일입니다.

관련 용어

노드와 소프트웨어 분야의 다른 용어

이 페이지를 영어로 읽기