코인 믹싱과 코인조인(CoinJoin)이란?

· 5 min read

비트코인은 흔히 디지털 화폐라고 불리지만, 이 비유에는 논란의 여지가 있습니다. 앨리스가 밥에게 현금 10달러를 건네면 밥은 그 돈이 어디서 왔는지 알 수 없습니다. 나중에 밥이 그 돈을 캐럴에게 주더라도, 캐럴은 그 돈을 앨리스가 먼저 갖고 있었다는 사실을 알아낼 수 없습니다.

비트코인은 그 공개적인 성격 때문에 다릅니다. 어떤 코인(즉 미사용 거래 출력값, UTXO)의 이력은 누구나 쉽게 들여다볼 수 있습니다. 비트코인을 쓸 때마다 거래 금액과 받는 사람의 이름을 영수증에 적어 두는 것에 더 가깝습니다.

다만 공개 주소에 이름이 없기 때문에 사용자의 신원이 쉽게 드러나지는 않습니다. 그렇다고 비트코인이 완전히 사적인 것은 아닙니다. 블록체인 분석 기술은 갈수록 정교해지면서 주소와 신원을 더 성공적으로 연결하고 있습니다. 추적 기법 외에도, 이런 목적으로 활동하는 전문 조직이 암호화폐 사용자의 신원을 밝혀낼 수도 있습니다. 이를 막기 위해 거래의 연결 고리를 끊는 기법들이 수년에 걸쳐 등장했습니다.

코인 믹싱이란?

일반적으로 코인 믹싱은 자금을 다른 자금과 뒤섞어 그 출처를 감추려는 거래를 가리킵니다. 다만 암호화폐 세계에서 코인 믹싱은 제3자가 제공하는 서비스를 가리킬 때 많이 쓰입니다. 서비스 제공자는 사용자의 코인(과 소액의 수수료)을 받고, 보내온 코인과 아무 연결이 없는 다른 코인을 사용자에게 돌려줍니다. 이런 서비스는 텀블러 또는 믹서라고도 불립니다.

물론 이런 중앙화된 서비스의 보안과 프라이버시에는 의문이 따릅니다. 믹서가 사용자에게 코인을 돌려준다는 보장도, 돌려받은 코인에 골치 아픈 거래 이력이 없다는 보장도 없습니다. 믹서를 쓸 때 또 하나 생각할 점은 IP와 비트코인 주소가 제3자에게 기록될 수 있다는 것입니다. 결국 사용자는 연결이 끊긴 코인을 받기를 바라며 자신의 자금을 남의 손에 맡기는 셈입니다.

더 흥미로운 접근은 상당한 수준의 '합리적 부인 가능성'을 만들어 내는 코인조인 거래입니다. 즉 코인조인 거래가 이루어진 뒤에는 사용자와 그 사용자의 이전 거래 사이의 연결을 확정적으로 입증하는 증거를 만들 수 없습니다. 많은 코인조인 방식은 믹서보다 더 탈중앙화된 대안을 제공합니다. 과정에 코디네이터가 관여할 수는 있지만, 사용자가 자기 자금의 관리 권한을 넘길 필요는 없습니다.

코인조인이란?

코인조인 거래는 2013년 비트코인 개발자 그레고리 맥스웰이 처음 소개했습니다. 그는 자신의 글에서 이 거래가 어떤 구조로 이루어지는지, 그리고 프로토콜을 바꾸지 않고도 어떻게 프라이버시를 크게 끌어올릴 수 있는지 짧게 설명했습니다.

핵심만 말하면 코인조인은 서로 다른 사용자들의 입력값을 하나의 거래 안에 함께 담는 것입니다. 어떻게(그리고 왜) 이렇게 하는지 설명하기 전에 기본적인 거래 구조를 짚어 보겠습니다.

비트코인 거래는 입력값과 출력값으로 이루어집니다. 사용자가 거래를 하려 할 때는 자신의 UTXO를 입력값으로 쓰고, 출력값을 정한 뒤 입력값에 서명합니다. 여기서 중요한 점은 각 입력값에 저마다 독립적으로 서명이 이루어지고, 사용자가 출력값을 여러 개(서로 다른 주소로 나가는) 만들 수 있다는 것입니다.

입력값 네 개(각 0.2 BTC)와 출력값 두 개(0.7 BTC와 0.09 BTC)로 이루어진 거래를 살펴보면 몇 가지를 짐작할 수 있습니다. 첫째는 결제가 이루어졌다는 것입니다. 보낸 사람이 출력값 중 하나는 상대에게, 거스름돈은 자기 자신에게 보낸 것입니다. 입력값을 네 개나 썼으니 딱 떨어지는 큰 출력값이 받는 사람에게 갔을 가능성이 큽니다. 출력값 합계에서 0.01 BTC가 비어 있다면 그것은 채굴자에게 지불한 거래 수수료입니다.

보낸 사람이 작은 UTXO들을 모아 큰 UTXO 하나를 만들고 싶었을 수도 있습니다. 그래서 작은 입력값들을 합쳐 원하는 0.7 BTC를 만든 것입니다.

또 하나 짐작해 볼 수 있는 것은 각 입력값에 독립적으로 서명이 이루어진다는 사실에 바탕을 둡니다. 이 거래는 네 명의 서로 다른 사람이 각자 입력값에 서명하는 방식으로 이루어졌을 수도 있습니다. 바로 이 원리가 코인조인을 효과적으로 만들어 줍니다.

코인조인은 어떻게 작동할까?

핵심 아이디어는 여러 참가자가 각자의 입력값과 원하는 출력값을 밝히며 함께 하나의 거래를 만드는 것입니다. 모든 입력값이 하나로 합쳐지면 어떤 출력값이 어떤 사용자의 것인지 확실히 말할 수 없게 됩니다. 아래 그림에서 그 과정을 볼 수 있습니다.

여기 거래 사이의 연결을 끊고 싶어 하는 네 명의 사용자가 있습니다. 이들은 자기들끼리(또는 코디네이터를 통해) 조율하며 거래에 넣고 싶은 입력값과 출력값을 알립니다.

코디네이터는 이 정보를 모두 모아 하나의 거래를 만들고, 네트워크에 전파하기 전에 참가자 각자에게 서명을 받습니다. 사용자들이 서명한 뒤에는 이 거래를 무효로 만들지 않고서는 수정할 수 없게 됩니다. 그래서 코디네이터가 자금을 훔쳐 갈 위험은 사라집니다.

이 거래는 코인을 뒤섞는 블랙박스처럼 작동합니다. 새 UTXO를 만들려면 옛 UTXO가 소멸되어야 합니다. 옛 UTXO와 새 UTXO를 잇는 유일한 연결 고리는 그 거래 자체인데, 이 시점에서는 참가자들을 서로 구분해 낼 수 없습니다. 잘해야 어떤 입력값 하나를 어떤 참가자가 넣었고 그 참가자가 결과로 나온 출력값의 새 주인일 수도 있다는 정도만 말할 수 있습니다.

하지만 이조차 완전한 보장은 아닙니다. 위 거래에서 참가자가 네 명이라고 결론지을 수 있을까요? 한 사람이 자기 소유의 서로 다른 주소 네 곳으로 자금을 보낸 것은 아닐까요? 두 사람이 각각 다른 물건을 사고 0.2 BTC씩을 자기 주소로 돌려받은 것은 아닐까요? 네 사람이 새로운 상대에게, 혹은 자기 자신에게 자금을 보낸 것일까요? 우리는 이 질문들에 확실한 답을 줄 수 없습니다.

부인 가능성을 통한 프라이버시

코인조인 앱이 존재한다는 사실만으로도 거래 분석에 쓰이는 방법들을 의심하게 만들기에 충분합니다. 많은 거래에서 코인조인이 쓰였다고 결론지을 수는 있어도, 그 출력값의 주인이 누구인지는 여전히 알 수 없습니다. 이런 앱의 인기가 높아지면서 모든 입력값이 같은 사용자의 것이라는 가정은 힘을 잃었고, 이는 생태계 전반의 프라이버시를 향한 큰 걸음이 되었습니다.

앞선 예에서 그 거래의 익명성 집합(anonymity set)은 4입니다. 즉 출력값의 주인은 그 거래에 참여한 네 사람 중 하나일 수 있습니다. 익명성 집합이 클수록 거래와 원래 주인을 연결하기가 어려워집니다. 다행히 최근의 코인조인 구현 덕분에 사용자들은 신뢰가 필요 없는 방식으로 수십 명의 다른 사용자와 입력값을 섞을 수 있어 높은 수준의 부인 가능성을 확보할 수 있습니다. 가까운 과거에는 100명이 참여한 거래가 성공적으로 이루어지기도 했습니다.

마치며

코인을 섞는 도구들은 프라이버시를 중요하게 여기는 모든 사용자가 쓸 수 있는 중요한 수단입니다. 다른 프라이버시 개선책(예를 들어 컨피덴셜 트랜잭션)과 달리, 이 도구들은 현재 프로토콜을 그대로 둔 채로도 활용할 수 있습니다.

제3자의 진정성과 방식을 믿는 사용자에게는 믹싱 서비스가 손쉬운 해법이 되어 줍니다. 검증 가능하고 자금을 맡기지 않는 대안을 선호하는 사용자에게는 코인조인 쪽이 더 낫습니다. 이 작업은 기술에 밝은 사용자가 직접 할 수도 있고, 복잡한 구조를 다룰 필요 없게 해 주는 소프트웨어 도구로 할 수도 있습니다. 이런 도구는 이미 여럿 나와 있으며, 사용자들이 더 큰 프라이버시를 찾으면서 인기도 높아지고 있습니다.

코인 믹싱 코인조인 비트코인 프라이버시 UTXO 블록체인 분석 믹서 서비스