저자: 아르민 사부리
출처: https://payjoin.org/blog/2026/03/25/wallet-fingerprints-payjoin-privacy/
거래를 생성할 때 지갑 소프트웨어는 입력 순서, 통화 선택, 거래 수수료 추정, 서명 인코딩 등 수십 가지의 미세한 결정을 내립니다. 이러한 결정들이 만들어내는 패턴을 "지갑 지문"이라고 하며, 이는 소프트웨어 구현마다 체계적으로 달라지기 때문에 온체인 해당 거래를 생성한 지갑 소프트웨어를 식별하는 데 사용할 수 있습니다.
일부 지갑 지문은 결정론적입니다. 예를 들어, ECDSA 서명을 생성할 때 Bitcoin Core 최종 서명의 "낮은 r 값"(서명 길이 단축)을 보장하기 위해 다양한 난수를 지속적으로 시도합니다("그라인딩"). 따라서 서명 길이가 72바이트인 경우 비트코인 코어는 서명 생성자가 아니라는 것을 즉시 확인할 수 있습니다 . 다른 지갑 지문은 확률론적입니다. 서로 다른 지갑 소프트웨어의 거래 수수료율은 전형적인 분포를 보입니다. 버그 또한 지갑 지문이 될 수 있습니다. 각 유지보수 작업은 독립적인 증거를 제공하며, 이러한 증거들을 종합하면 매우 유리한 결과를 얻을 수 있습니다. 이샤나 미스라는 지갑 지문에 대한 포괄적인 연구를 수행했습니다( 중국어 번역 ).
지갑 지문은 지갑 클러스터링 분석의 효율성을 높일 수 있습니다. 지갑 클러스터링 분석은 행동 단서를 이용하여 관련 거래 출력(코인)을 그룹화하는 방식입니다. 클러스터링 분석에 대한 배경 정보는 유발 코그먼의 블로그 게시물( 중국어 번역본 )에서 확인할 수 있습니다. 최근 지갑 지문을 활용하여 기존 단서 분석(예: 잔돈 출력 식별 )을 지원하는 연구는 기존의 단순한 휴리스틱 방식보다 훨씬 향상된 성능을 보여주었습니다. 카포스 외 연구진은 인접 거래의 지문을 수치 분석과 결합하면 클러스터링 분석의 정확도를 높일 수 있음을 입증했으며, 실제 데이터를 사용하여 이를 검증했습니다. 이는 페이조인(Payjoin) 거래의 개인정보 보호 모델을 직접적으로 위협합니다. 페이조인의 개인정보 보호 모델은 송신자와 수신자의 입력을 구분할 수 없다는 점에 기반하고 있기 때문입니다. 입력 소스를 구분할 수 있는 지갑 지문은 페이조인이 무력화하려 했던 클러스터링 분석을 다시 활성화시킵니다.
(역자 주: 본 기사에서 "휴리스틱"은 "단서 분석" 또는 "휴리스틱 분석"으로 번역되었습니다.)
이 글에서는 이러한 관점을 사용하여 실제 페이조인 거래를 살펴봅니다.
두 단계의 연관성
이론적으로 페이조인 거래는 일반적인 일방적 거래와 차이가 없어 보입니다. 전통적인 휴리스틱을 사용하는 분석가들은 송금인과 수취인의 입력값(금액)을 동일한 범주로 묶어 이러한 거래를 잘못 분류할 수 있습니다. 따라서 페이조인 거래를 파악하는 첫 번째 단계는 이러한 협업 거래에서 인간의 개입을 감지하는 것입니다.
Simin Ghesmati 외 연구진의 연구는 입력 선택의 특이점(특히 중복 입력의 배열 방식)을 이용하여 페이조인 거래를 탐지하고 입력과 출력의 소유자를 구분하는 방법을 보여주었습니다. 지갑 지문 인식은 동일한 작업을 위한 또 다른 신호를 제공합니다.
송신자와 수신자가 서로 다른 지갑 소프트웨어를 사용하는 경우, 지문을 통해 어떤 입력과 출력이 누구에게 속하는지 파악할 수 있습니다. 소유권 구분이 이루어지면, 표준 "입력 소유권 식별(CIOH)" 클러스터링 방법을 각 참여자의 입력에 적용할 수 있으므로, 분석적 관점에서 페이조인은 일반적인 (일방적 결제) 거래 쌍과 동일합니다.
지갑의 지문 신호는 두 가지 수준의 정보를 전달합니다.
- 단일 거래 내에서 : 이러한 신호는 단일 거래 내에서 다양한 입력과 출력의 소유자를 구분하는 데 도움이 됩니다. 어떤 출력이 거스름돈(송금인에게 반환)이고 어떤 출력이 지불금(수취인에게 전송)인지 명확히 구분할 수 있습니다. 거스름돈 출력을 정확하게 식별하는 것은 송금인의 현재 거래와 다음 거래를 연결하는 데 매우 중요합니다. 지문 분석을 통해 이를 직접적으로 확인할 수 있습니다. 송금인이 사용하는 지갑 소프트웨어에 따라 거스름돈 출력이 특정 입력과 마찬가지로 동일한 특성을 공유할 수 있기 때문입니다.
- 거래 사이 : 거래 차트에 표시되는 신호의 의미:
- 역방향 : 각 입력은 이전의 거래들을 기반으로 생성되며, 이러한 거래들은 고유한 특징을 지니고 있을 수 있습니다.
- 향후 : 모든 출력값은 미래에 사용될 수 있으며, 해당 출력값을 사용하는 거래에는 고유한 정보가 포함될 수 있습니다.
따라서 페이조인 거래에 대한 블록체인 분석의 목표는 다음과 같습니다.
- 공동 거래의 흔적이 발견되었습니다.
- 거래 내 신호와 거래 간 신호를 사용하여 송신자와 수신자를 구분하십시오.
- 차별화된 클러스터에 표준 휴리스틱이 적용됩니다.
사례 1: 사무라이 페이조인
거래 번호 : 8dba6657...
이 거래의 각 필드 값을 살펴보면 의심스러운 점은 발견되지 않습니다. 두 입력의 nSequence (필드의 숫자 값)는 동일하고, 둘 다 P2WPKH 스크립트 공개 키 유형을 사용하며, 증명 데이터 스택도 유사합니다. 문제는 서명의 길이(바이트 수)에서 발생합니다.
입력 0에 대한 DER 인코딩(ECDSA) 서명은 71바이트(낮은 r 값)이고, 입력 1에 대한 서명은 72바이트(높은 r 값)입니다. 연산 작업을 하는 지갑은 낮은 r 값의 서명만 생성하고, 연산 작업을 하지 않는 지갑은 50% 확률로 낮은 r 값의 서명만 생성합니다. 따라서 거래에서 낮은 r 값/높은 r 값 서명 쌍이 존재한다고 해서 반드시 협력의 강력한 증거가 되는 것은 아닙니다. 그러나 입력 중 하나가 항상 연산 작업을 하는 클러스터에서 나왔고, 이번에 높은 r 값의 입력과 함께 나타난다면, 두 입력이 서로 다른 지갑 클러스터에 속할 확률이 훨씬 높아집니다.
서명의 비대칭성을 식별 기준으로 사용해 보겠습니다. 참가자 A는 낮은 r 값을 입력했고, 참가자 B는 높은 r 값을 입력했습니다. 전자의 입력값은 50,000 사토시이고, 후자는 3,999,216 사토시입니다. 두 가지 가능한 출력 시나리오를 테스트할 수 있습니다.
사례 1 : 출력 0(9752 사토시)은 A에 속하고, 출력 1(4039216 사토시)은 B에 속합니다.
- 참가자 A: 유입 50,000명, 유출 9,752명; 순 유출 40,248명.
- 참가자 B: 399,9216명 가입, 403,9216명 탈퇴; 순 유입 40,000명.
- 의미: A는 B에게 40,000 사토시를 지불했습니다 (나머지 248 사토시는 거래 수수료였습니다).
사례 2 : 출력 0(9752 사토시)은 B에 속하고, 출력 1(4039216 사토시)은 A에 속합니다.
- 참가자 A: 유입 50,000 사토시, 유출 4,039,216 사토시; 순 유입 약 4백만 사토시.
- 참가자 B: 399,9216명 유입, 9,752명 유출; 순 유출액 398,9464명.
- 의미: A는 B에게 40,000 사토시를 지불했습니다 (나머지 248 사토시는 거래 수수료였습니다).
시나리오 1은 지불액이 정확히 40,000 사토시임을 의미하고, 시나리오 2는 3,989,216 사토시임을 의미합니다. 정수 휴리스틱은 시나리오 1을 선호하는 경향이 있습니다. 이후의 지출 거래들도 이러한 결론을 뒷받침합니다. 출력 0 은 낮은 r 서명(이 거래에서 A의 입력과 일치)으로 지출되었고, 출력 1은 높은 r 서명(이 거래에서 B의 입력과 일치)으로 지출되었습니다.
이로써 페이조인(Payjoin)은 해체되었고, 투입물과 산출물 간의 소유권 구분이 도출되었으며, 지불 금액이 결정되었습니다.
사례 2: PDK 데모 페이조인
거래 번호 : 3c5436f1...
두 입력 모두 P2TR 키 경로 비용을 사용합니다. P2TR에 대한 Taproot 비용 규칙 에 따르면 기본 sighash 레이블은 SIGHASH_ALL 이며, 이 sighash 바이트는 생략할 수 있습니다. 생략하는 것이 일반적인 형식이지만, 생략하지 않는 것도 합의에 유효합니다. 입력 0의 증명 데이터는 64바이트 이며, sighash 바이트가 생략되어 있습니다. 그러나 입력 1의 증명 데이터는 65바이트 이며, 0x01 ( SIGHASH_ALL 명시적으로 나타내는 바이트)이 포함되어 있습니다. 이 바이트가 나타나는 것은 일반적으로 의도적인 것이 아니라 구현상의 버그입니다.
동일한 지갑(동일한 지갑 소프트웨어 사용)에서 생성된 두 입력은 일관된 시그해시(sighash) 전략을 사용해야 합니다. 이 불일치는 두 입력을 구분하는 기준이 됩니다. 참여자 A는 시그해시 바이트가 생략된 입력을 보유하고, 참여자 B는 시그해시 바이트가 명시적으로 포함된 출력을 보유합니다.
사례 1과 달리, 이 경우에는 숫자 단서만으로는 출력물의 소유자를 구분할 수 없습니다. 두 가지 귀속 시나리오는 의미적으로 동일합니다.
사례 1 : 출력 0(59014 사토시)은 A에 속하고, 출력 1(864506 사토시)은 B에 속합니다.
- 참가자 A: 51,514명 가입, 59,014명 탈퇴; 순 유입 7,500명.
- 참가자 B: 87,2224명 가입, 86,4506명 탈퇴; 순유출 7,718명.
- 의미: B는 A에게 7500 사토시를 지불했습니다 (나머지 218 사토시는 거래 수수료였습니다).
사례 2 : 출력 0(59014 사토시)은 B에 속하고 출력 1(864506 사토시)은 A에 속합니다.
- 참가자 A: 51,514명 가입, 864,506명 탈퇴; 순 유입 812,992명.
- 참가자 B: 87,2224명 유입, 5,9014명 유출; 순 유출 813,210명.
- 의미: B는 A에게 81,2992 사토시를 지불했습니다 (나머지 218 사토시는 거래 수수료입니다).
정수 단서는 시나리오 1을 지지하는 경향이 있지만, 이 접근 방식이 완벽한 것은 아닙니다. 지갑 지문이 존재하기 때문에 여러 당사자가 참여한 거래일 가능성이 높지만, 소유권 구분은 불확실합니다. Sighash의 처리 방식의 일관성 부족은 여전히 남아 있는 취약점이지만, 그 외에는 별다른 문제가 없습니다.
그러나 이후 두 번째 출력의 비용 거래에는 두 번째 입력과 일관되게 SIGHASH_ALL 명시적으로 나타내는 바이트가 다시 포함되었습니다. 이는 두 번째 출력과 두 번째 입력이 동일한 거래에 속한다는 것을 강력하게 시사하며, 시나리오 1의 가능성을 더욱 높입니다.
사례 3: 케이크 월렛 → 불 비트코인 모바일 페이조인
거래 번호 : 8fb80573...
가장 먼저 눈에 띄는 것은 두 입력 모두 nSequence 필드에 0x01 값이 있다는 점입니다. Cake Wallet은 BIP-68에 따라 상대 시간 잠금을 설정하고, Bull Bitcoin Mobile 또한 동일한 값을 사용하므로 두 입력 간에 거래 비대칭성은 없습니다. 서명 또한 동일합니다. 두 입력 모두 낮은 r 값을 가진 서명과 동일한 sighash 레이블을 사용합니다. 이 거래만을 기준으로 판단할 때, 지문 분석은 더 이상 진행되지 않습니다.
하지만 자금 출처를 살펴보면 차이점을 구분할 수 있습니다. 두 가지 시나리오는 다음과 같습니다.
사례 1 : 출력 0(29358 사토시)은 B에 속하고, 출력 1(429919 사토시)은 A에 속합니다.
- 참가자 A: 유입 44,0337명, 유출 42,9919명; 순 유출 10,418명.
- 참가자 B: 유입 19,538명, 유출 29,358명; 순 유출 10,000명.
- 의미: A는 B에게 10,000 사토시를 지불했습니다 (나머지 418 사토시는 거래 수수료였습니다).
사례 2 : 출력 0(29358 사토시)은 A에 속하고, 출력 1(429919 사토시)은 B에 속합니다.
- 참가자 A: 44,0337명 유입, 29,358명 유출; 순 유출 410,979명.
- 참가자 B: 19,538명 유입, 429,919명 유출; 순 유입 410,561명.
- 의미: A는 B에게 41,0561 사토시를 지불했습니다 (나머지 418 사토시는 거래 수수료였습니다).
지불 금액이 정수라는 가정은 사례 1을 압도적으로 지지합니다. 더욱이, 수신자의 입력 금액(19358 사토시)은 송신자의 거스름돈(429919 사토시)보다 적으며, 이는 UIH2(중복 입력) 가정과 일치합니다. 즉, 송신자는 적절한 액면가의 화폐가 부족하여 큰 금액을 입력하고 큰 거스름돈을 발생시키는 반면, 수신자의 자금은 지불 금액을 충당하기에 충분하기 때문입니다. 한 가지 가능한 구분은 다음과 같습니다. 출력 0(29358 사토시)은 지불 금액, 입력 1(19358 사토시)은 수신자의 UTXO, 출력 1(429919 사토시)은 송신자의 거스름돈입니다.
교차 거래 분석 또한 이러한 결론을 뒷받침합니다. 입력 0에 대한 이전 거래에는 nSequence 값이 0x01 인 입력 하나와 0xfffffffd 인 입력 하나가 있습니다. 이러한 비대칭성은 이 거래의 입력을 구분하여, 액면가 44 0337을 가진 출력이 nSequence 값이 0x01 인 참여자에게 속한다는 것을 알 수 있게 해줍니다. 이 출력은 입력 0으로서 우리가 검토 중인 payjoin 거래에 들어갑니다.
또한, 입력 1에 대한 이전 거래의 모든 출력은 nSequence 값으로 0xfffffffd 만 사용합니다. 게다가 출력 1을 사용하는 거래 역시 nSequence 값을 0xfffffffd 로 설정합니다. 이는 Bull Bitcoin Mobile의 일반적인 동작과 일치하므로 출력 1과 입력 1이 동일한 지갑에 속한다는 강력한 증거가 됩니다.
┌──────────────────────────┐│ PRIOR TX (9ecd77...) ││ ││ in_0 [seq=1] ││ in_1 [seq=MAX-2] ││ ──────────────────────── ││ out_0: 204,326 ││ out_1: 440,337 ──────────────────┐└──────────────────────────┘ │ │ ┌──────────────────────────┐ │ │ PAYJOIN TX (8fb805...) │ │ │ ──────────────────────── │ └──►│ in_0 [seq=1] │ ┌──►│ in_1 [seq=1] │┌──────────────────────────┐ │ │ ──────────────────────── ││ PRIOR TX (3fbe17...) │ │ │ out_0: 29,358 ││ │ │ │ out_1: 429,919 ──────────────────┐│ in_0 [seq=MAX-2] │ │ └──────────────────────────┘ ││ in_1 [seq=MAX-2] │ │ ││ ──────────────────────── │ │ ││ out_0: 430,856 │ │ ┌──────────────────────────┐ ││ out_1: 19,358 ──────────────────┘ │ SUBSEQUENT TX (9232d5...)│ │└──────────────────────────┘ │ ──────────────────────── │ │ │ in_0 [seq=MAX-2] ◄───────────────┘ │ ... │ └──────────────────────────┘ 두 입력 지문 모두 거래 그래프에 지속적으로 나타납니다. Cake의 0x01 이전 거래까지 추적할 수 있으며, Bull Bitcoin Mobile의 0xfffffffd 앞뒤로 모두 추적할 수 있습니다. 이 단일 페이조인 거래만으로는 많은 것을 알 수 없을 수도 있지만, 인접한 거래들을 살펴보면 명확해집니다.
결론적으로
이러한 관찰 결과는 Payjoin의 개인정보 보호가 참여자 지갑의 지문이 동일할 때만 유지된다는 것을 보여줍니다. 거래 수준의 지문 동일성은 필요조건이지만 충분조건은 아닙니다. 송신자와 수신자 간의 어떤 측면에서든 차이가 발생하면 이들을 구별하는 신호가 될 수 있습니다. 분석가의 작업은 지갑 활동에서 이러한 차이점을 찾는 것으로 단순화되며, 거래 그래프는 분석가가 이러한 차이점을 찾는 데 사용할 수 있는 다양한 관찰 데이터를 제공합니다.
일부 지갑 지문은 비교적 쉽게 지울 수 있지만 , 다른 지문들은 지갑의 특정 설계 선택 및 목표에 내재되어 있어 쉽게 "수정"할 수 없습니다. 지갑 개발자는 Payjoin을 소프트웨어에 통합할 때 잠재적인 개인정보 침해 가능성을 인지해야 합니다.
본 논문의 분석은 개별 페이조인(payjoin) 거래에 초점을 맞추지만, 이 방법은 일반화될 수 있습니다. 지갑 지문의 분포는 클러스터의 속성이 될 수 있으며, 일관된 지문을 가진 클러스터는 호환되지 않는 내부 특징을 가진 클러스터보다 더 신뢰할 수 있습니다. 이는 페이조인 개인정보 보호에 대한 광범위한 공격 유형을 시사합니다. 향후 연구에서는 지문 분포를 사용하여 클러스터의 신뢰도를 평가하는 자동화된 대규모 분석 도구를 개발할 것입니다. 저희는 개인정보 보호 측정 프레임 의 일환으로 이러한 도구를 개발하고 있습니다.
(위에)



