이 글은 프라이버시 옹호자이자 “Opt Out Podcast”의 진행자인 Seth For Privacy의 의견 기고문입니다.
비트코인에서 프라이버시를 개선하는 가장 기본적인 방법 중 하나는 여러 결제를 위해 주소를 재사용하지 않는 것입니다. 요즘 대부분의 지갑이 각 결제마다 새로운 주소를 자동으로 생성하기 때문에 그렇게 하는 것이 간단해 보일 수 있지만, 여러 사람으로부터 반복적으로 결제를 수락해야 하거나 복잡한 인프라 없이 결제를 수락해야 할 때는 어떻게 해야 할까요?
이때 “재사용 가능한 결제 코드”라는 개념이 등장합니다. 때때로 “스텔스 주소”라고도 불리는 이 개념은 반복 결제를 위해 간단한 정적 주소를 사용할 수 있게 하여 결제를 서로 연결하기 어렵게 만들어 온체인 프라이버시를 유지합니다.
비트코인은 왜 재사용 가능한 결제 코드가 필요할까요?
현재 BTCPay Server가 제공하는 결제 처리 시스템과 같은 더 복잡한 인프라를 사용하여 주소를 재사용하지 않고 기부나 결제를 수락할 수 있지만, 비트코인 노드와 함께 완전히 별도의 서버를 설정해야 하므로 결제를 수신하기 위한 더 간단한 사용 사례는 대부분의 사람들에게 너무 복잡합니다.
기부 캠페인을 운영하거나 친구들에게 비트코인을 반복적으로 보내거나 다른 사람들이 당신의 작업에 대해 팁을 주도록 하고 싶다면, 현재 일반적으로 복잡한 인프라를 운영하거나 정적 비트코인 주소를 사용하여 매우 낮은 프라이버시를 가지는 것 중 하나를 선택해야 합니다.
재사용 가능한 결제 코드가 등장했습니다. 이 개념은 2015년 Peter Todd가 만든 원래의 스텔스 주소 BIP로 거슬러 올라갑니다. 원래 제안은 공식적으로 제안된 BIP가 되지 않았지만(BIP 번호 63이 부여되었음에도 불구하고), 후속 제안인 BIP47은 최근 몇 년 동안 Samourai Wallet 및 Sparrow Wallet과 같은 지갑에서 사용이 증가하고 있습니다. 이 두 지갑은 훌륭하고 프라이버시 중심의 비트코인 지갑입니다.
우리는 어떻게 조용한 결제에 도달하게 되었나요?
불행히도 BIP47에는 심각한 단점이 있습니다. 수신자가 거래를 받고 있다는 것을 알기 위해(따라서 이를 사용할 수 있게 하려면!) 발신자는 수신자가 자금을 찾을 수 있도록 온체인에서 “알림 거래”라는 특별한 거래를 생성해야 합니다. 이는 의도한 결제를 별도로 보내는 것과 함께 이루어져야 합니다. 이는 발신자당 한 번만 수행하면 되며 BIP47의 경량 지갑 사용을 가능하게 하는 핵심 기능이지만, 이는 심각한 수수료, 확장성 문제 및 재사용 가능한 결제 코드의 적대적인 사용 사례에 대한 프라이버시 문제를 초래합니다.
다행히도 Ruben Somsen은 2022년 3월 13일 “조용한 결제”라는 제목의 GitHub Gist 형태로 매우 유망한 제안을 발표했습니다. 여기서 주요 거래는 알림 거래(문제가 있는 결과를 초래하는)에서 수신자 측의 더 복잡한 스캔 프로세스로 이동합니다. 조용한 결제는 원래 “스텔스 주소” 제안의 또 다른 반복이지만 비트코인 스캔, 스크립트 유형(즉, Taproot) 및 몇 가지 멋진 트릭의 많은 발전을 활용합니다.
조용한 결제의 기원과 제안된 기능에 대해 더 깊이 파고들고 싶다면 Shinobi의 훌륭한 기사 “비트코인 조용한 결제 및 비밀 블라인딩 키”를 읽어보는 것을 강력히 추천하지만, 아래에서 매우 간단한 방식으로 설명하겠습니다.
조용한 결제가 작동하는 방식, 간단히 설명
조용한 결제에 대해 왜 흥미로운지 깊이 들어가기 전에, 발신자와 수신자 모두에게 조용한 결제가 어떻게 작동하는지 매우 단순한 수준에서 이해하는 것이 중요합니다.
발신자를 위한
누군가 조용한 결제 주소로 자금을 보내고 싶을 때, 실제로 그들이 해야 할 일은 결제 코드를 스캔하거나 복사/붙여넣기하여 좋아하는 지갑에 넣고 평소처럼 결제를 보내는 것입니다. 하지만 배경에서 정확히 무슨 일이 일어나고 있을까요?
발신자가 조용한 결제 주소를 지갑에 입력하면, 지갑은 세 개의 키를 결합하여 오직 의도된 수신자만 사용할 수 있는 고유한 일회성 주소를 생성합니다. 이 고유한 주소는 발신자가 수신자에게 지출하고자 하는 입력의 공개 키(일반적인 용어로 “주소”)와 수신자의 공개 키(조용한 결제 주소에 포함됨), 발신자가 생성한 “공유 비밀” 키를 결합하여 생성됩니다. 이 공유 비밀 키는 발신자와 수신자만 알고 있습니다. 암호학에서 “교환 가능” 속성 덕분에 발신자는 이 키들을 결합할 수 있지만, 수신자의 개인 키를 모르기 때문에 결과 주소에서 지출할 수는 없습니다.
발신자가 이 세 개의 키를 결합하면 새로운 공개 키(또는 주소)가 생성되고, 의도된 자금이 수신자가 제어하는 이 새로운 주소로 전송됩니다. 온체인에서 이 거래는 유사한 유형과 스크립트의 다른 지출과 정확히 동일하게 보이며, 외부 관찰자에게 조용한 결제가 사용되었다는 것을 분별할 수 있는 요소가 없고, 조용한 결제 주소의 소유자가 누구인지도 알 수 없습니다.
수신자를 위한
수신자에게 도달하면 조용한 결제의 주요 거래가 어디에 있는지 알 수 있습니다. 발신자가 고유한 일회성 주소를 생성하기 위해 지출되는 입력의 공개 키를 사용한다는 점을 기억한다면, “수신자는 어떻게 자금을 받았는지, 어떤 주소로 받았는지 어떻게 알까요?”라는 질문을 할 수 있습니다.
이 질문은 조용한 결제 제안의 핵심이며, 수신자가 조용한 결제 주소를 생성한 후 비트코인 블록체인에서 모든 거래를 상대적으로 비용이 많이 드는 스캔을 수행해야 함을 의미합니다. 이 스캔을 통해 수신자는 입력 공개 키와 조용한 결제 주소를 사용하여 생성된 공유 비밀 및 거래의 출력 공개 키가 자신의 개인 키와 제대로 일치하는지 확인할 수 있으며, 일치할 경우 이를 지갑에 추가할 수 있습니다.
이 스캔은 표준 비트코인 지갑 스캔에 비해 상당히 비용이 많이 드는 작업입니다. 지갑에서 파생된 주소 목록과 거래 출력 목록을 단순히 비교하여 지갑 잔액을 얻을 수는 없기 때문입니다. 대신, 모든 거래를 살펴보고 각 입력에 대한 공유 비밀을 계산하고 출력을 비교해야 하며, Somsen은 이를 “모든 서명을 두 번 확인하는 것”에 비유했습니다.
이 스캔은 초기 블록 다운로드(비트코인 블록체인을 처음으로 동기화할 때) 또는 지갑과 비트코인 노드의 스캔을 오프로드하는 독립 실행형 소프트웨어를 통해 수행되는 것이 이상적입니다.
수신자를 위한 스캔 시간 최적화
이 스캔은 상당히 계산 비용이 많이 들지만, 프라이버시나 대체 가능성을 희생하지 않고 세 가지 주요 최적화를 통해 더 효율적으로 만들 수 있습니다:
- 조용한 결제 주소를 생성할 때 “생일” 날짜를 생성하고 저장하여 복원할 때 체인에서 해당 블록부터 스캔을 시작할 수 있도록 합니다.
- 현재 체인에서 Pay-to-Taproot(“P2TR”)인 출력은 매우 적으므로 Taproot 출력을 확인하기만 하면 됩니다. 이는 많은 거래를 제거하고 스캔 시간을 크게 줄입니다. 이상적으로는 Taproot가 더 많이 사용됨에 따라 덜 유용해지겠지만, 당분간 매우 효과적인 최적화가 될 것입니다.
- 모든 과거 거래를 스캔하는 대신 UTXO 집합만 확인합니다. 조용한 결제 주소로 향하는 새로운, 수신되지 않은 출력만 관심이 있기 때문입니다. 이는 거래 이력을 제공하지 않는 단점이 있으며, 일반적인 방법보다 추가 데이터베이스가 필요합니다.
조용한 결제가 PayNyms보다 더 적합한 경우
이제 문제의 핵심으로 넘어갑니다: 이미 PayNyms(BIP47)가 있고 현재 채택이 증가하고 있다면, 왜 새로운 것이 필요할까요? 불행히도 BIP47의 지속적인 문제는 두 가지 주요 이유로 알림 거래가 있으며, 이 문제로 인해 조용한 결제가 적대적인 사용 사례에 대해 우수하다고 생각합니다.
첫째, 알림 거래를 요구하면 단일 결제가 매우 비효율적이 됩니다. 단일 결제를 보내기 위해 두 개의 거래를 보내야 하기 때문입니다. 재사용 가능한 결제 코드의 일반적인 사용 사례 중 많은 경우, 이는 온체인 수수료를 크게 증가시키고 블록체인을 부풀리기 때문에 금지적인 단점입니다. 둘째, 이 알림 거래는 막대한 프라이버시 단점을 가지고 있습니다. 전 세계의 누구나 인터넷 연결이 있으면 비트코인 블록체인을 살펴보고 특정 PayNym에 “연결된” 지갑 클러스터(및 그 수)를 파악할 수 있습니다.
예를 들어, 올해 2월 캐나다에서 발생한 “자유 행진” 트럭 시위 상황을 생각해봅시다. 만약 시위자들을 위해 비트코인 기부금을 모으고 배포한 사람들이 BIP47 PayNym을 사용했다면, 어떤 지갑 클러스터가 PayNym에 연결되었는지 온체인에서 명백하게 드러나므로, 각 지갑이 “자유 행진”에 기부했을 가능성이 높아 정부와 거래소가 기부자들을 단속할 수 있게 됩니다.
비트코인은 기부자의 자금을 간단히 압수하는 것을 방지하지만(GoFundMe와는 달리), 만약 이 기부자들이 KYC 거래소 계정이나 자신의 신원과 함께 온체인에서 지갑을 연결한 적이 있다면, 그들의 지역 정부가 설명을 요구하거나 심지어 직접 기소할 수 있습니다.
이러한 중요한 문제들로 인해, BIP47 PayNyms는 재사용 가능한 결제 코드의 일반적인 적대적 사용 사례에 대해 충분하지 않다고 생각하며, 그래서 이 새로운 제안에 대해 매우 흥미롭게 생각합니다. 조용한 결제는 PayNym보다 재사용 가능한 결제 코드 수신의 복잡성을 증가시킬 것이지만, 그로 인해 얻는 프라이버시, 효율성 및 비상호작용의 이점은 그만한 가치가 있으며, 대부분의 사용 사례에서 비트코인에서 재사용 가능한 결제 코드의 이상적인 발전을 이룹니다. 이는 절실히 필요합니다.
그렇다고 해도, PayNyms는 매우 특정한 사용 사례를 충족합니다. 즉, 비트코인 전체 노드를 실행하지 않고도 재사용 가능한 결제 코드를 허용합니다. 추가 거래 및 프라이버시 문제가 전체 노드를 실행하는 비용보다 덜 관련성이 있는 상황에서는, PayNyms는 훌륭한 재사용 가능한 결제 코드 방법으로서 유용한 목적을 여전히 수행할 수 있으며, 경량 지갑의 사용자 경험 이점을 유지합니다. 알림 거래를 처리하는 대체 미래 방법이 탐색되고 있으며, 이는 알림 거래를 제3자에게 오프로드하여 일부 온체인 프라이버시 문제를 줄이는 가능성도 있습니다.
Samourai Wallet은 현재 알림 거래 없이 협업 거래를 위해 PayNyms를 활용하기 위해 이 변형을 사용하고 있습니다.
다음 단계는 무엇인가요?
조용한 결제가 매우 흥미롭지만, 이 제안이 아직 초기 단계에 있다는 것을 이해하는 것이 중요합니다. GitHub의 제안 Gist는 광범위한 검토와 댓글을 받고 있으며, 많은 사람들이 이 공간에서 이를 테스트하고 최적화하며 개선하기 위해 주요 접근 방식을 살펴보고 있습니다. 조용한 결제에 대한 주요 탐색 항목은 다양한 접근 방식의 세부 벤치마크와 프라이버시나 대체 가능성 손실 없이 스캔을 더 잘 최적화하는 방법을 찾는 것입니다.
더 기술적인 사용자나 개발자라면: 이 제안의 생애 주기 초기에 개념을 테스트하고 벤치마크하며 검토하는 사람들이 많을수록 장기적으로 더 나아질 것입니다. 따라서 기술적인 성향이 있다면 GitHub에서 Gist를 꼭 확인해 보세요.
기술적이지 않은 경우, 비트코인 매거진에서 향후 기사에 주목하고, 조용한 결제에 대한 “비트코인, 설명됨”의 훌륭한 설명 에피소드와 Ruben Somsen의 조용한 결제 발표를 시청하거나 청취하여 이 모든 것이 어떻게 작동하는지와 취해지는 접근 방식을 더 자세히 이해해 보세요.
마지막으로, 비트코인 프라이버시를 발전시키기 위한 추가 개발 및 연구가 이루어지는 것을 보는 것은 항상 흥미롭습니다. 이는 종종 “섹시하지 않다”고 여겨지지만, 검열 저항을 가능하게 하고 비트코인을 진정한 “자유 돈”으로 만드는 데 절대적으로 필수적입니다.
이 글을 검토하고 피드백을 제공한 Samourai Wallet의 Ruben Somsen과 TdevD에게 특별히 감사드립니다.
이 글은 Seth For Privacy의 게스트 포스트입니다. 표현된 의견은 전적으로 그들의 것이며 BTC Inc 또는 비트코인 매거진의 의견을 반드시 반영하지는 않습니다.