오늘은 비트코인 코어 0.21.0의 공식 출시일로, 사토시 나카모토가 약 12년 전 출시한 비트코인의 원래 소프트웨어 클라이언트의 21번째 주요 릴리스입니다.
비트코인 코어의 주요 유지 관리자인 블라디미르 반 더 라안의 감독 하에, 이번 최신 주요 릴리스는 약 6개월 동안 100명 이상의 기여자에 의해 개발되었습니다. 600개 이상의 병합된 풀 리퀘스트의 결과로, 비트코인 코어 0.21.0은 최근 몇 년간 가장 큰 비트코인 코어 릴리스 중 하나로, 다양한 새로운 기능과 함께 프라이버시 및 성능 개선을 도입하며, 슈너/탭루트 프로토콜 업그레이드를 향한 큰 걸음을 내디뎠습니다.
아래는 몇 가지 주목할 만한 변경 사항입니다.
디스크립터 지갑
비트코인 주소로 코인이 전송될 때, 실제로 발생하는 일은 그것들이 사용되지 않은 거래 출력(UTXO)에 “잠겨” 있다가, UTXO에 숨겨진 조건이 충족되면 나중의 거래에서 “잠금 해제” (사용됨)되는 것입니다. 일반적인 조건은 특정 공개 키에 해당하는 유효한 서명의 포함입니다. 그러나 조건은 예를 들어 비밀 코드의 포함, 시간 잠금의 경과 또는 서명의 조합(다중 서명)으로도 구성될 수 있습니다.
지금까지 비트코인 코어는 해당 개인 키에 따라 UTXO를 관리하도록 설계되었습니다. 비트코인 코어 0.21.0은 대신 “디스크립터 지갑”을 도입합니다. 디스크립터 지갑은 사용자가 지출하기 위해 필요한 조건의 유형에 따라 UTXO를 분류할 수 있게 해줍니다. (예: 유효한 서명만 필요한 UTXO를 위한 하나의 지갑과 다중 서명 UTXO를 위한 하나의 지갑.)
디스크립터 지갑은 비트코인 코어 위에 소프트웨어를 설계하는 응용 프로그램 개발자에게 특히 유용합니다. 특정 응용 프로그램은 이제 다중 서명 UTXO와 같은 특정 유형의 UTXO만 활용하도록 쉽게 설계될 수 있으며, 비다중 서명 UTXO는 무시할 수 있습니다.
일반 사용자도 이제 디스크립터 지갑이 구현됨에 따라 차이를 느낄 수 있습니다. 아마도 가장 주목할 만한 점은 새로운 비트코인 코어 노드가 시작될 때 기본 지갑이 생성되지 않는다는 것입니다. 대신 사용자가 특별히 선택할 때만 새로운 지갑이 생성되어, 원하는 유형의 지갑만 생성할 수 있게 됩니다. 디스크립터 지갑은 또한 특정 UTXO를 추적하는 Watch Only 지갑을 더 잘 지원합니다: 노드가 이를 지출하는 데 필요한 개인 키를 가지고 있지 않더라도 특정 UTXO를 추적하는 지갑입니다.
비트코인 코어 사용자는 비트코인 코어 0.21.0으로 업그레이드하더라도 현재로서는 기존 지갑을 계속 사용할 수 있습니다. (기존 지갑은 결국 사용 중단될 예정이며, 사용자는 기존 지갑을 디스크립터 지갑으로 마이그레이션해야 하지만, 이는 향후 비트코인 코어 릴리스까지 엄격히 필요하지는 않을 것입니다.)
피어 투 피어 네트워크를 통한 컴팩트 블록 필터 제공
“라이트 클라이언트”는 전체 비트코인 블록체인을 다운로드하고 검증하지 않고, 대신 자신에게 관련된 블록과 거래의 일부만 다운로드하고 검증하는 비트코인 지갑 및 응용 프로그램입니다. 이는 최적의 보안은 아니지만, 자원 소모가 훨씬 적습니다.
이를 수행하는 인기 있는 방법 중 하나는 블룸 필터를 사용하는 것입니다. 간단히 말해, 블룸 필터는 네트워크의 무작위 피어 노드에서 관련 데이터를 요청하기 위한 암호화 트릭입니다. 그러나 불행히도, 수년 동안 블룸 필터가 프라이버시 친화적이지 않다는 것이 분명해졌습니다: 본질적으로 사용자의 모든 주소를 (무작위) 피어 노드에 노출시켜, 이는 물론 프라이버시를 침해하는 감시자가 운영할 수 있습니다.
블룸 필터 솔루션에 대한 더 새롭고 훨씬 더 프라이버시를 보호하는 대안은 “컴팩트 클라이언트 측 블록 필터링” (BIP 157/158)이라고 불립니다. 컴팩트 클라이언트 측 블록 필터링은 본질적으로 블룸 필터 트릭을 뒤집습니다. 라이트 지갑이 전체 노드에 보낼 필터를 생성하는 대신, 전체 노드는 각 블록에 대한 필터를 생성하고 요청 시 이를 라이트 클라이언트에 보냅니다. 라이트 클라이언트는 이러한 필터를 사용하여 자신에게 관련된 거래가 블록에 포함되었는지 확인합니다. 만약 그렇다면, 라이트 지갑은 전체 블록을 가져와 그 안에서 관련 거래 데이터를 추출합니다. (일부 잘못된 긍정이 있을 수 있습니다; 필터가 포함될 수 있다고 제안했지만 실제로는 관련 거래 데이터가 없는 블록입니다.)
기존 비트코인 코어 릴리스는 이미 필터를 로컬에서 생성하고, 노드 위에서 실행되는 응용 프로그램(예: 지갑)을 위해 원격 프로시저 호출(RPC)을 통해 이를 제공할 수 있었습니다. 비트코인 코어 0.21.0은 이제 요청 시 비트코인의 피어 투 피어 네트워크를 통해 이러한 필터를 제공하는 옵션도 포함합니다. 이를 통해 블룸 필터를 사용하는 독립형 라이트 클라이언트를 운영할 수 있게 되었습니다.
재전송 시도 감소
블룸 필터 외에도, 감시자는 네트워크 분석을 통해 비트코인 사용자의 프라이버시를 침해할 수 있습니다. 특정 거래가 어떤 노드에서 발생했는지를 파악할 수 있다면, 해당 노드의 비트코인 주소는 IP 주소와 연결될 수 있으며, 이는 다시 실제 신원과 연관될 수 있습니다.
지금까지 비트코인 코어 노드가 비트코인 네트워크에 거래를 방송할 때, 거래가 블록에 포함될 때까지 15분마다 거래를 재전송하려고 했습니다. 이는 이러한 비트코인 코어 노드가 감시 피어에 연결되어 있다면, 특정 거래를 15분마다 재전송하려고 하는 비트코인 코어 노드가 그 거래가 발생한 노드라는 것이 감시자에게 명백해진다는 것을 의미했습니다.
비트코인 코어 0.21.0은 거래를 재전송하려고 시도하는 빈도를 크게 줄입니다: 이제는 12시간에서 36시간마다 한 번만 시도합니다. 덜 자주 재전송해야 하므로, 초기 방송 이후 거래가 확인되었을 가능성이 훨씬 높아지므로, 노드가 전혀 재전송해야 할 가능성이 줄어듭니다.
향후 비트코인 코어 릴리스에서는 이 프라이버시 누수가 완전히 수정될 것입니다. 비트코인 코어 노드는 이제 자신의 메모리 풀 및 수수료 계산을 기반으로 확인되었어야 하는 거래만 재전송할 것입니다. 또한, 자신의 거래뿐만 아니라 다른 거래도 재전송할 것입니다.
Tor V3 지원
최근 프라이버시를 보호하는 Tor 프로토콜의 업그레이드로 인해, 새로운 V3(버전 3) Tor 주소는 이전의 V2(버전 2) 주소보다 길어졌습니다. V2 주소는 여전히 사용되고 있지만, 약 1년 후에는 사용 중단될 예정입니다.
V2 주소의 사용 중단은 비트코인을 프라이버시 네트워크를 통해 사용하고자 하는 비트코인 코어 사용자에게 문제를 일으킬 수 있습니다. 비트코인 코어 노드는 서로 알려진 Tor 사용 비트코인 노드의 Tor 주소를 공유하여 피어를 찾습니다. 그들은 다른 노드의 일반 IP 주소를 공유하는 데 사용하는 동일한 메시지를 통해 이를 공유했습니다. Tor V2 주소는 일반 IP 주소 형식(IPV6)에서 “숨길” 수 있었지만, Tor V3 주소는 너무 길어서 그렇지 않습니다. 즉, 현재 메시지는 Tor 업그레이드와 호환되기에 너무 제한적입니다.
비트코인 코어 0.21.0은 따라서 피어와 IP/Tor 주소를 공유하기 위한 새로운 형식을 도입합니다. 이러한 메시지는 Tor V3 주소를 공유할 수 있을 만큼 충분히 클 수 있습니다.
슈너/탭루트 코드 및 시그넷/레그테스트 배포
슈너/탭루트는 2017년 8월 세그리게이티드 위트니스(SegWit) 이후 비트코인의 첫 번째 프로토콜 업그레이드가 될 것으로 예상됩니다. 2년 이상 개발 중인 슈너 서명 알고리즘은 비트코인의 현재 ECDSA 서명 알고리즘에 비해 전반적으로 개선된 것으로 간주됩니다. 탭루트와 결합되어 — 코인을 지출하기 위한 다양한 조건을 암호 해시 트리에서 숨기는 영리한 트릭 — 이 업그레이드는 확장 가능하고 프라이버시를 보호하는 방식으로 더 많은 스마트 계약 유연성을 제공할 것을 약속합니다.
슈너/탭루트 코드는 이제 비트코인 코어 0.21.0에 포함되어 있습니다. 예상치 못한 발전이 없다면, 이는 더 이상 변경되지 않을 것이며, 예를 들어 응용 프로그램 개발자가 업그레이드를 기반으로 소프트웨어를 설계할 수 있음을 의미합니다. 또한, 슈너/탭루트는 이제 시그넷(개발자가 새로운 비트코인 소프트웨어를 테스트하는 데 사용하는 더 새롭고 신뢰할 수 있는 테스트넷 변형)과 잠재적으로 레그테스트(추가 로컬 테스트넷 변형)에서도 사용할 수 있습니다.
그러나 슈너/탭루트는 비트코인의 메인넷에서는 아직 사용할 수 없습니다. 이를 위해 업그레이드가 먼저 활성화되어야 하며, 이는 현재 비트코인 코어 릴리스에 포함되지 않은 활성화 로직이 필요합니다. 활성화 로직은 향후 몇 달 내에 있을 수 있는 소규모 비트코인 코어 릴리스에 포함될 것으로 예상됩니다.
기타…
위의 변경 사항 외에도 비트코인 코어 0.21.0은 일반 사용자에게는 그리 눈에 띄지 않는 다양한 버그 수정 및 성능 개선을 포함합니다. 예를 들어 비트코인 코어 지갑은 Berkeley DB에서 SQLite 데이터베이스로 전환되어, 응용 프로그램 데이터 파일에 더 적합하고 호환성, 지원 및 테스트와 관련하여 여러 보장을 제공합니다. 또한 비트코인 코어 0.21.0은 거래 요청 개편을 포함하는데, 비트코인 노드가 새로운 거래에 대해 배우는 데 사용하는 새로운 메시지 프로토콜은 더 잘 테스트되고, 더 잘 명세화되며, 유지 관리 및 검토가 더 쉬워졌습니다.
업그레이드에 대한 더 광범위한 목록은 비트코인 코어 0.21.0 릴리스 노트를 참조하거나, 비트코인 코어 기여자인 앤드류 차우의 이 블로그 게시물을 참조하여 디스크립터 지갑(및 기존 지갑) 및 SQLite(및 Berkeley DB)에 대한 보다 광범위한 설명을 확인하십시오.
정보 및 피드백을 제공한 존 뉴베리에게 감사드립니다.