63 / 736CJ

CoinJoin

공동 거래로 프라이버시 높이기

비트코인 결제 기록은 공개되지만, 새 출력의 소유자가 누구인지까지 항상 드러나는 것은 아닙니다. CoinJoin은 이 차이를 활용해 여러 사람이 하나의 거래를 만듭니다. 자금 흐름을 추적하기 어렵게 할 수 있지만, 과거 기록을 지우거나 익명성을 보장하지는 않습니다.

CoinJoin은 여러 사람의 자금을 하나의 비트코인 거래에 모으는 방식입니다. 각자는 자신의 키를 보관하고 서명할 내용을 확인합니다. 거래는 참여자나 그들이 지정한 수취인에게 새 출력을 만들며, 관찰자는 원래 소유자와 새 출력의 관계를 파악하기 어려워질 수 있습니다. 효과는 거래 구조와 프로토콜, 관찰자가 가진 다른 정보에 달려 있습니다.

안나는 서비스 요금을 내면서 수취인이 자신의 다른 자금까지 쉽게 추적하지 못하기를 바랍니다. 하지만 비트코인에는 비공개 은행 명세서가 없습니다. 거래 이력은 공개되어 있습니다. 거래는 이전에 만들어진 미사용 출력, 즉 UTXO를 소비하고 새 출력을 만듭니다. 출력에는 금액과 그 금액을 쓰기 위해 충족해야 할 조건이 기록됩니다. 일반 결제가 이런 출력을 여러 개 사용하면 분석가는 흔히 한 사람이 모두 관리한다고 추정합니다. 이는 유용한 경험칙인 휴리스틱이지 증거는 아닙니다. CoinJoin은 여러 소유자가 같은 거래에 참여하게 해 이 전제를 깨뜨립니다. 과거를 바꾸는 것이 아니라 공개 기록에서 관계를 추론할 때의 확실성을 바꾸는 것입니다. [1]

간단한 예에서 안나와 파벨은 각각 100 500 sat짜리 출력을 갖고 있습니다. sat는 비트코인의 최소 단위인 satoshi의 약자입니다. 두 사람은 각자 100 000 sat짜리 새 출력을 받는 거래를 만들고, 남은 합계 1 000 sat를 네트워크 수수료로 냅니다. 이 예에서는 별도의 서비스 이용료는 제외합니다. 조정자나 서로 통신하는 지갑들이 거래 초안을 준비합니다. 디지털 서명은 개인 키로 만든, 검증 가능한 승인 증명입니다. 개인 키는 서명을 만드는 데 필요한 비밀 데이터이며, 서명할 때 키 자체를 공개하지는 않습니다. 각자는 자신의 입력에 서명하기 전에 자신이 받을 출력 주소, 금액, 수수료와 전체 조건을 확인합니다. 조정자 혼자서는 다른 사람의 키도, 자금을 쓸 권한도 갖지 못합니다. 필요한 서명이 빠지면 이 거래는 유효하게 완성될 수 없습니다. 다만 올바른 소프트웨어와 초안 확인이 전제입니다. 사기범의 주소로 보내는 거래에 서명하면 이런 보호는 소용이 없습니다. [1] [5]

예시의 블록체인만 보는 관찰자에게는 같은 금액의 새 출력 두 개가 보입니다. 금액만으로는 어느 것이 안나의 것인지, 파벨의 것인지 알 수 없습니다. 그렇다고 소유 확률이 자동으로 반반이 되거나 익명성이 보장되는 것은 아닙니다. 관찰자가 한 주소를 이미 알거나 다른 단서를 가지고 있을 수 있습니다. 실제 거래에서는 식별 가능한 잔돈, 금액 차이, 출력 유형이나 시점이 관계를 드러낼 수 있습니다. 익명성 집합은 관찰자가 구분하지 못하는 후보들의 집합이며, 단순히 한 회차에 등록한 사람 수가 아닙니다. 지갑이 표시하는 점수도 특정 모델에 따른 추정일 뿐, 모든 관찰자가 나에 대해 아는 범위를 보장하지 않습니다. [1] [4]

돈을 훔칠 수 있는 능력과 정보를 알아낼 수 있는 능력은 다릅니다. 단순한 조정자는 입력과 출력의 관계를 알 수 있지만, 다른 프로토콜은 암호학적 기법으로 그 관계를 숨깁니다. IP 주소와 접속 시각 같은 네트워크 정보도 중요합니다. Sybil Attack이라는 문제도 있습니다. 한 공격자가 여러 참여자인 척하면서 자신의 출력을 제외해 나머지 소유 관계의 불확실성을 줄이는 공격입니다. 참여자가 서명을 거부해 회차 전체를 중단시킬 수도 있습니다. 그래서 구체적인 참여 규칙과 요청 폭주나 고의적 방해, 즉 DoS에 대한 방어가 중요합니다. 입력 수가 많다는 사실만으로 이런 문제를 판단할 수는 없습니다. [1] [4]

나중에 안나가 새 출력과 신원을 알고 있는 거래소에서 인출한 자금을 함께 사용한다고 해봅시다. 관찰자는 안나가 흐릿하게 만들려던 연결을 다시 발견할 수 있습니다. 주소 재사용이나 여러 출력을 하나로 합치는 통합도 비슷한 결과를 낳을 수 있습니다. Coin Control은 지갑이 사용할 UTXO를 직접 선택하게 해 서로 다른 맥락의 자금을 분리하는 데 도움이 됩니다. 완전한 프라이버시를 켜는 버튼은 아닙니다. 수취인이 지급인을 알 수도 있고, 서비스가 별도의 기록을 보관할 수도 있습니다. 따라서 회차가 성공한 뒤에도 프라이버시는 계속 고려해야 합니다. 거래 하나의 모양만으로 결정되지 않습니다. [5]

먼저 어떤 정보를 누구에게서 보호하려는지 정해야 합니다. 호기심 많은 수취인, 조정자, 네트워크 관찰자의 능력은 서로 다릅니다. 이어서 누가 키를 갖는지, 앱이 무엇에 서명하는지, 어떤 비용을 받는지, 새 출력을 어떻게 관리하는지 확인하세요. 먼저 돈을 맡기는 수탁 서비스와 키를 넘기지 않는 CoinJoin은 요구하는 신뢰가 다릅니다. CoinJoin은 비트코인에 특별한 규칙을 추가하지 않습니다. 노드는 일반 거래와 그 조건을 검증합니다. 노드는 비트코인 거래와 블록을 검증하는 소프트웨어를 실행하는 컴퓨터입니다. CoinJoin은 거래소나 수취인의 기록을 지우지도 않으며, 특정 서비스가 결제를 어떻게 취급할지도 보장하지 않습니다. 초보자에게는 앱의 ‘익명’ 표시보다 이런 한계를 이해하는 것이 더 유용합니다. [1] [5]

Gregory Maxwell은 2013년 8월 CoinJoin을 공개적으로 설명했습니다. 네트워크 규칙을 바꿀 필요는 없었지만, 사람들이 서로를 찾고 협력할 방법은 필요했습니다. JoinMarket은 시장 방식의 사례를 보여줬습니다. 공동 거래를 주선하는 사람이 참여 자금을 제공하는 다른 사람들에게 비용을 지급합니다. 조정자를 쓰는 프로토콜은 이를 다른 방식으로 조직합니다. 예를 들어 WabiSabi는 다양한 금액과 익명 자격 증명을 지원해, 입력과의 관계를 그대로 드러내지 않고 출력을 받을 권리를 증명하게 합니다. 따라서 CoinJoin을 하나의 앱과 동일시하거나 모든 방식이 같은 금액의 출력만 요구한다고 생각해서는 안 됩니다. [1] [2] [4]

Maxwell의 글은 기본 발상을, 특정 지갑의 문서는 사용 절차를, WabiSabi 논문은 프로토콜의 성질을 설명합니다. 서로 다른 층위의 자료입니다. 이번 검토 시점에 원래 JoinMarket 클라이언트·서버 저장소는 보관 처리된 상태입니다. 여기서는 역사와 기술 자료로 참고하며 설치를 권하는 것이 아닙니다. BIP 78의 PayJoin은 지급인과 수취인이 모두 입력을 제공하는 관련 협력 방식입니다. 보통 같은 금액의 출력으로 큰 집단을 만드는 것이 목적은 아닙니다. 방식을 비교할 때는 ‘프라이버시’라는 공통 단어보다 누가 협력하고, 무엇을 알 수 있으며, 사용자와 지갑이 서명 전에 실제 어떤 내용을 확인하는지 살펴보세요. [1] [2] [3] [4] [5] [6]

예시 · CJ

공동 트랜잭션은 단일 소유자를 입증하지 않습니다

Alice와 Bob은 공동 트랜잭션의 서로 다른 입력을 통제하고 각자 출력을 받습니다. 모든 입력이 한 사람 소유라는 가정은 여기서 틀립니다. 입력을 합치는 것만으로 출력 소유 관계가 숨겨진다는 보장은 없으며 금액, 다른 정보와 이후 지출이 연결을 드러낼 수 있습니다.

더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Bitcoin, Bitcoin 프라이버시, 가명성, 지갑, UTXO, 트랜잭션. 다음 항목에서도 이 글을 참조합니다 Change Address, Bitcoin 프라이버시, 가명성, KYC.

01CoinJoin 코디네이터가 입력의 자금을 훔칠 수 있나요?

올바르게 설계된 비수탁 CoinJoin에서는 참여자가 자신의 키를 계속 보관합니다. 서명 전에는 거래 전체, 특히 자신의 출력, 금액과 수수료를 확인합니다. 필요한 서명 없이 코디네이터는 유효한 지출을 만들 수 없지만 라운드를 방해하거나 참여를 거절할 수 있습니다. 하지만 참여자가 자신의 돈을 사기범에게 보내는 거래에 서명하면 그 지급을 스스로 승인하는 셈입니다.

02CoinJoin 이후 출력은 영원히 익명인가요?

아닙니다. 기록은 공개된 채로 남습니다. 주소 재사용, 통합, 알려진 상대에게 지급, 식별 가능한 지갑 동작과 네트워크 메타데이터는 소유 관계의 불확실성을 줄이거나 없앨 수 있습니다. 결과는 프로토콜과 이후 출력 처리에 달려 있습니다.

DOC · 001Gregory Maxwell — CoinJoin: Bitcoin privacy for the real world1차 출처 DOC · 002JoinMarket client/server1차 출처 DOC · 003JoinMarket — Architecture Notes (archived)문서 DOC · 004WabiSabi: Centrally Coordinated CoinJoins with Variable Amounts1차 출처 DOC · 005Wasabi Wallet — CoinJoin documentation문서 DOC · 006BIP 78 — Payjoin명세
개정일: 1차 출처 우선 · 투자 조언이 아닙니다