Introduce CoinJoin

비트코인은 트랜잭션이 남아 조회나 추적이 가능하기 때문에 익명성에 한계가 있다. 익명성을 유지하기 위해 프라이버시 코인(Privacy Coin), 스텔스 주소(Stealth Address), 믹싱(Mixing)을 활용한 코인조인(CoinJoin), 코인셔플(CoinShuffle)과 같은 프로토콜을 사용하는 등의 방법을 선택할 수 있다. 여기서는 믹싱을 활용한 프로토콜 중 코인조인을 살펴보겠다.

코인조인(CoinJoin) 이란 ?

코인조인은 비트코인 코어 담당 그레고리 맥스월(Gregory Maxwell)에 의해 제안된 익명화 구현 방식이다. 비트코인을 전송할 때 혼자 전송하지 않고, 여러 사용자가 같이 전송해서 누가 누구에게 전송했는지 모르게 거래 내역을 섞는 방식을 사용한다. 따라서, 코인조인을 사용하면 한 트랜잭션에 여러 개의 입력과 여러 개의 출력이 생겨 사용자 추적이 어려워지기 때문에 거래 내역을 익명화할 수 있고 개인정보 보호를 강화할 수 있다.

코인조인은 여러 명이 모여서 비트코인을 전송해 누가 누구에게 전송했는지 모르게 거래 내역을 익명화하는 방법이다. 즉, 여러 개의 거래 내역을 묶어서 섞는 개념이라고 볼 수 있다.

코인조인 작동 원리

비트코인 전송에는 송금 행위를 나타내는 트랜잭션과 사용자의 서명을 나타내는 시그니처가 있다. 트랜잭션은 하나 이상의 입력을 받고 하나 이상의 출력을 생성할 수 있다. 이를 이용해 여러 명이 같은 트랜잭션 안에 사용자의 시그니처를 넣게 되면 한 트랜잭션 안에 여러 시그니처가 존재하기 때문에 거래 추적이 어려워진다. 이 때, 사용자들로부터 일정 금액 이상을 입력 받아 동일하거나 비슷한 금액으로 출력해 누가 누구에게 전송했는지 추적하는 것을 더욱 어렵게 만든다.

[그림 1] 코인조인을 사용하지 않은 트랜잭션과 코인조인을 사용한 트랜잭션

코인조인을 사용하지 않고 거래하는 경우 왼쪽 그림과 같이 Bob과 Ted의 거래와 Alice와 Carol의 거래가 각각 트랜잭션A와 트랜잭션B로 저장된다. 이 경우 누가 누구에게 보냈는지 알기 쉽고, 추적도 쉽게 할 수 있다.

하지만 오른쪽 그림처럼 코인조인을 사용해 Bob과 Ted의 거래와 Alice와 Carol의 거래를 묶어서 한 트랜잭션으로 실행했을 경우, Bob이 Ted에게 보내는지 Carol에게 보내는지 알기 어려워지고 추적이 복잡해진다.

코인조인을 위해 필요한 것

비트코인 네트워크는 P2P 네트워크라 거래 릴레이를 확인해 IP주소를 기록하고, 추적하는 것이 가능하다. 이 문제를 피하기 위해 TOR 같은 privacy system을 이용해야 한다. 또한, 많은 사람이 모일수록 추적이 복잡해지므로 코인조인을 이용할 사람들을 찾아야 한다. 이런 과정을 직접 하지 않고 와사비 월렛과 같은 프로그램을 사용해 코인조인을 한다.

와사비 월렛(Wasabi Wallet)

와사비 월렛은 프라이버시에 중점을 둔 비트코인 암호화폐 지갑 앱으로, 오픈소스로 되어있어 누구나 사용할 수 있다. 와사비 월렛은 TOR로 임의의 노드로 트랜잭션을 브로드캐스트해 노드가 IP주소를 감지할 수 없도록 만들어 추적을 피할 수 있도록 한다. 또한, 코인조인에 참여할 수 있는 기능이 내장되어 있어 코인조인에 참여할 적절한 수의 사용자가 등록되면 코디네이터에 의해 트랜잭션이 구성되고 60초 동안 모든 참가자에게 제공된다. 이 시간 동안 등록된 모든 참가자는 코인조인에 서명해야 하며, 사용자 중 한 명이 입력에 서명하지 않으면 전체 코인조인을 다시 시작한다.

이런 방식으로 와사비 월렛을 사용하면 TOR를 따로 다운로드하지 않고, 코인조인 사용자들을 따로 구하지 않아도 코인조인이 가능하다.

아래 홈페이지 주소에서 각 운영체제에 맞는 프로그램을 다운로드 받을 수 있다.

[그림 2] 와사비 월렛 홈페이지 (출처 : https://www.wasabiwallet.io/#download)

와사비 월렛 사용 예시

QLUE를 사용해 와사비 월렛을 사용한 트랜잭션을 살펴보았다.

아래 그림들은 출발지인 [주소 bc1qkeapugke8andwt68ksqefdplhr6xxn7dzu629j]에서 [주소 bc1qrn6prdrjxwq58xv43h0hhn5fknsejjmwl5u3w6]로 한 번 트랜잭션을 거친 후 와사비 월렛으로 목적지인 [주소 bc1ql5q770zx87twyyg34mta3myetvyexy7ezfdyts]로 송금한 경로이다.

[그림 3] Transaction 1 : 코인조인을 사용하지 않은 트랜잭션

[그림 3]은 bitpay 지갑을 사용해 [주소 bc1qkeapugke8andwt68ksqefdplhr6xxn7dzu629j]에서 [주소 bc1qrn6prdrjxwq58xv43h0hhn5fknsejjmwl5u3w6]로 전송한 모습이다. 코인조인을 사용하지 않은 트랜잭션이라 입력과 출력이 한 개씩 존재하기 때문에 사용자가 어디로 보냈는지 확인하기 쉽다.

[그림 4] Transaction 2 : 와사비 월렛을 사용해 코인조인 방법을 이용한 트랜잭션

[그림 4]는 와사비 월렛에서 코인조인을 사용해 비트코인을 [주소 bc1qrn6prdrjxwq58xv43h0hhn5fknsejjmwl5u3w6]에서 [주소 bc1ql5q770zx87twyyg34mta3myetvyexy7ezfdyts]로 전송한 모습이다. 중간에 한 트랜잭션에서 여러 입력이 들어오고 여러 출력이 나가는 모습을 볼 수 있다. 이 부분은 아래 [그림 5]에서 자세하게 살펴보겠다.

[그림 5] Transaction 2 : 와사비 월렛

[그림 5]는 와사비 월렛에서 코인조인을 사용한 트랜잭션 부분만 확대한 것이다. 트랜잭션에서 다수의 입력과 다수의 출력이 보인다. 사용자의 입력 주소를 알고 있더라도 한 트랜잭션에서 다수의 출력이 생성되기 때문에 사용자가 여러 출력 중 어느 주소로 보냈는지 추적하는데 어려움이 생긴다. 코인조인에 참여하는 사용자가 많아질수록 입력과 출력의 수가 많아지기 때문에 프라이버시가 더욱 강화된다.

You've successfully subscribed to PLAINBIT
Great! Next, complete checkout to get full access to all premium content.
Error! Could not sign up. invalid link.
Welcome back! You've successfully signed in.
Error! Could not sign in. Please try again.
Success! Your account is fully activated, you now have access to all content.
Error! Stripe checkout failed.
Success! Your billing info is updated.
Error! Billing info update failed.