본문으로 건너뛰기

코인조인

코인조인(CoinJoin)은 여러 사람이 하나의 비트코인 거래에 함께 참여해, 누구의 자금이 어느 출력으로 갔는지 추정하기 어렵게 만드는 방법입니다. 거래 하나에 입력도 여러 개이고 출력도 여러 개이므로, 밖에서 입력과 출력을 일대일로 맞추기 어려워집니다.

코인조인의 목표는 거래 기록을 지우는 것이 아니라 연결을 흐릿하게 만드는 것입니다.

여러 입력과 출력으로 짝을 흐리기​

일반적인 거래는 입력과 출력의 수가 적습니다. 그래서 어떤 자금이 어느 주소로 이동했는지 비교적 쉽게 짐작할 수 있습니다. 잔돈이 돌아오는 주소까지 보이면 입력과 출력의 관계가 더 뚜렷해질 수 있습니다.

코인조인에서는 여러 참여자가 각자의 입력과 출력을 하나의 거래에 넣습니다. 같은 금액의 출력이 여러 개라면 어느 출력이 어느 참여자에게 돌아갔는지 고르기 어려워집니다. 분석하는 사람에게 가능한 후보를 여러 개 남기는 방식입니다.

다섯 사람이 같은 금액을 넣은 똑같은 봉투를 한 상자에 넣고 섞는 상황을 생각할 수 있습니다. 다시 꺼냈을 때 봉투가 모두 같다면 어느 봉투가 누구 것인지 단정하기 어렵습니다. 반대로 한 사람만 다른 금액을 넣으면 그 봉투는 쉽게 구분됩니다. 그래서 참여자들은 가능한 한 같은 금액의 출력으로 맞추고, 남는 금액은 별도의 출력으로 처리합니다.

돈을 맡기지 않고 함께 서명하기​

코인조인 거래는 참여자들이 함께 만듭니다.

  1. 각 참여자가 자신의 입력을 거래에 넣습니다.
  2. 각자 받을 주소와 출력 금액을 정합니다.
  3. 완성된 거래에서 자신의 반환 출력, 금액, 수수료 등 내용을 확인합니다.
  4. 내용을 확인한 뒤 각자가 자신의 입력에 서명합니다.
  5. 필요한 서명이 모두 모이면 거래가 전파되고, 이후 네트워크의 검증과 블록 포함 절차를 거칩니다.

거래를 조율하는 곳이 있더라도 참여자가 비트코인을 그곳에 미리 맡기는 방식일 필요는 없습니다. 서명 전에는 자금이 움직이지 않으며, 자신의 출력·금액·수수료를 확인한 뒤 서명하지 않으면 해당 거래를 진행하지 않을 수 있습니다. 반대로 내용을 확인하지 않고 잘못된 거래에 서명하면 자금 손실을 승인할 수 있으므로, 비수탁 구조가 서명만으로 자동 안전해지는 것은 아닙니다.

조율자가 사라지더라도 서명하지 않은 자금이 조율자에게 넘어가는 구조는 아닙니다. 다만 서명된 거래가 곧바로 온체인에 확정되었다는 뜻은 아니며, 전파와 블록 포함 여부도 따로 확인해야 합니다.

같은 금액과 잔돈의 문제​

같은 금액의 출력이 많을수록 어느 출력이 누구의 것인지 추정하기가 어려워집니다. 반대로 특정 참여자만 다른 금액을 받으면 그 출력이 눈에 띌 수 있습니다.

입력 금액과 출력 금액이 정확히 맞지 않으면 남는 금액이 생깁니다. 이 잔돈은 별도의 출력으로 나올 수 있지만, 다시 입력과 출력의 연결을 추정하는 단서가 되기도 합니다. 따라서 코인조인은 단순히 여러 사람의 자금을 한 거래에 넣는 것만으로 모든 연결을 없애는 방법이 아닙니다.

한 번 참여하는 것만으로 부족하다고 판단해 여러 번 참여할 수도 있습니다. 참여가 반복되면 분석자가 고려해야 할 후보가 늘어날 수 있지만, 시간과 수수료도 추가로 필요합니다. 흐릿함을 얻는 데 비용을 지불하는 셈입니다.

코인조인이 보장하지 않는 것​

코인조인을 사용해도 거래 자체는 장부에 그대로 남습니다. 섞였다는 사실도 대체로 확인할 수 있습니다. 코인조인은 기록을 삭제하거나 흔적을 없애는 기능이 아닙니다.

또한 코인조인 뒤의 사용 방식에 따라 연결이 다시 생길 수 있습니다. 섞은 여러 출력을 한 거래에서 다시 합치면 주소와 자금의 관계가 묶일 수 있습니다. 섞은 뒤 특정 출력으로 보이는 금액을 신원이 확인된 거래소에 입금하면, 그 입금 출력이 해당 고객 계정과 연결될 수 있습니다. 그러나 이것만으로 코인조인 이전 입력까지 자동으로 신원과 연결되는 것은 아닙니다. 잔돈, 출력 병합, 금액, 시간, 외부 기록 같은 추가 단서를 바탕으로 이전 연결이 추정될 수 있습니다.

따라서 중요한 것은 섞는 행위 자체뿐 아니라 그 뒤에 어떤 출력을 함께 사용하고, 어디로 보내며, 어떤 정보를 공개하는지입니다. 코인조인은 익명성을 자동으로 보장하는 장치가 아닙니다.

스패로우의 월풀 코인조인 흐름​

영상은 2024년 3월에 공개되었습니다. 그 뒤인 2024년 4월 미국 뉴욕 남부지검이 사무라이 월렛 공동 창업자들을 기소하고 서비스 도메인을 압수했고(미국 법무부 발표), 스패로우는 1.9.0(2024년 4월 25일)에서 월풀 클라이언트를 제거했습니다(스패로우 1.9.0 배포 노트). 따라서 아래 절차는 지금의 스패로우에서 따라 할 수 없으며, 같은 금액 출력과 잔돈이 실제로 어떻게 다뤄졌는지 보여 주는 기록으로 읽어야 합니다.

영상의 발언자는 테스트넷에 연결한 스패로우(Sparrow)에서 사무라이(Samourai)의 월풀(Whirlpool) 코인조인을 실행해 보여 줍니다. 테스트넷의 비트코인은 가치가 없는 시험용이라고 발언자는 밝힙니다. 먼저 UTXO 탭에서 섞을 UTXO를 여러 개 골라 섞기(Mix Selected) 버튼을 누릅니다.

그러면 안내 화면이 나옵니다. 발언자의 설명에 따르면 안내 화면은 월풀이 사무라이의 코디네이터를 통해 제공되고, 스패로우의 월풀 클라이언트가 블라인드 입력으로 코디네이터와 통신한다고 적고 있습니다. 토르를 쓰도록 설정했다면 코디네이터와의 통신도 토르를 거칩니다. 월풀 수수료와 채굴 수수료는 섞을 UTXO에서 빠지며, 섞기 전에 모든 수수료를 검토할 수 있도록 표시됩니다.

첫 코인조인을 시작하면 기존 묶음에 프리믹스(Premix), 포스트믹스(Postmix), 배드뱅크(Badbank) 세 계정이 추가됩니다. 영상이 옮긴 안내에 따르면 각 계정의 역할은 다음과 같습니다.

  • 프리믹스: 같은 금액으로 나뉘어 첫 라운드를 기다리는 UTXO를 담습니다.
  • 포스트믹스: 한 번 이상 섞인 UTXO를 담습니다.
  • 배드뱅크: 프리믹스 거래에서 나온 잔돈을 담습니다.

그다음 화면에서 수수료율을 정합니다. 발언자는 수수료율이 너무 낮으면 거래가 오래 확인되지 않고, 빨리 끝내려면 높게 잡으면 된다고 말합니다. 이어서 풀(pool) 크기를 고르면 그 금액 단위의 출력으로 나뉘고, 나머지는 배드뱅크로 갑니다. 발언자는 100만 사토시 풀을 골라 입력이 같은 크기의 출력 세 개로 나뉘는 것을 보여 줍니다. 풀을 더 작게 고르면 출력이 훨씬 많이 쪼개지고 배드뱅크로 가는 몫이 달라질 것이라는 추정도 덧붙입니다.

프리믹스 거래를 미리 보고 전파하면 프리믹스로 들어간 출력이 시간이 지나 라운드를 거치면서 하나씩 빠져나가 포스트믹스로 옮겨집니다. 진행 중에는 진행 상태 표시줄이 나타나고, 섞기 중지(Stop Mixing)와 재시작(Start Mixing) 버튼으로 멈췄다가 다시 시작할 수 있습니다.

발언자는 배드뱅크의 잔돈을 어떻게 다뤄야 하는지도 짚습니다. 자신이 참고한 해외 영상들은 배드뱅크의 잔돈에 섞지 말라는 라벨을 붙여 두고, 이를 포스트믹스 출력과 합치지 말라고 권한다고 합니다. 배드뱅크의 잔돈은 섞기 전의 입력과 연결된 채 남아 있으므로, 포스트믹스 출력과 한 거래에서 함께 쓰면 섞은 출력이 다시 그 입력과 연결될 수 있다는 이유입니다. 이는 앞의 "같은 금액과 잔돈의 문제"와 "코인조인이 보장하지 않는 것"에서 설명한 잔돈과 출력 병합의 문제를 실제 화면에서 다룬 사례입니다.

발언자는 테스트넷 탐색기에서 월풀의 프리믹스 거래를 열어 보이며, 거래에 OP_RETURN 값이 들어 있는 것도 확인합니다. 발언자는 특정 채굴풀이 이런 거래를 걸러 내서 논란이 된 적이 있다고 말합니다.

마지막으로 발언자는 섞은 출력을 따로 관리하는 방법을 보여 줍니다. 섞은 출력을 별도의 묶음으로 옮길 수 있고, 정해진 횟수만큼 섞은 뒤 지정한 묶음으로 곧바로 보내는 기능도 있다고 합니다. 다만 테스트넷에서는 진행이 느려 중단했고 화면 캡처만 남겼다고 합니다.

발언자가 꼽는 고려 사항은 다음과 같습니다.

  • 사무라이 쪽에 적지 않은 수수료를 내야 합니다.
  • OP_RETURN 때문에 일부 채굴자가 거래를 걸러 낼 수 있습니다.
  • 앞으로 거래소가 섞은 흔적이 있는 비트코인을 받지 않을 수 있습니다.
  • 정교한 분석 소프트웨어가 나올 수 있습니다.

마지막 두 가지는 누구도 알 수 없다는 점을 발언자 스스로 밝히며, 자신의 추측이라고 말합니다. 발언자는 섞기에 나서기 전에 테스트넷에서 충분히 연습하고, 자기 보관과 풀노드 운영, 계정 분리를 먼저 익혀 두라고 권합니다.

법적·사회적 논쟁​

코인조인을 바라보는 방식은 지역과 기관, 시점에 따라 다를 수 있습니다. 한쪽에서는 공개 장부에서 개인의 거래와 재산을 보호하는 사생활의 수단으로 봅니다. 다른 쪽에서는 자금 흐름을 추적하기 어렵게 만드는 기능을 우려합니다.

서비스를 이용할 때는 해당 지역의 규정과 이용하려는 거래소·수탁형 서비스의 당시 입출금 정책을 따로 확인해야 합니다. 서비스별 정책은 바뀔 수 있으므로, 확인되지 않은 특정 서비스의 거절 여부를 일반화해서는 안 됩니다. 기술 자체에 대한 설명과 실제 이용 환경에서 발생할 수 있는 제약은 구분해야 합니다.

코인조인은 여러 사람의 거래를 한데 모아 입력과 출력의 짝을 어렵게 만드는 도구입니다. 돈을 다른 사람에게 맡기지 않고 각자 서명할 수 있다는 점이 구조의 중요한 특징입니다. 그러나 거래 기록은 남고, 금액과 잔돈, 반복 사용 방식, 이후의 거래 습관에 따라 연결이 다시 추정될 수 있습니다.

프라이버시와 주소 연결에 관한 배경은 프라이버시와 가명성에서 함께 볼 수 있습니다.

영상​

원본 영상: 스패로우 활용 믹싱 (공개일: 2024-03-11)

링크 복사하기X에 공유페이스북에 공유쓰레드에 공유