비트코인 주소 추적을 위한 클러스터링과 휴리스틱 알고리즘
Blog/외부 Blog

비트코인 주소 추적을 위한 클러스터링과 휴리스틱 알고리즘

※ 본 게시물은 'PLAINBIT' 재직 당시 작성한 블로그 글을 공유하는 것입니다.

원문 참고 : https://blog.plainbit.co.kr/bitcoin-clustering-and-heuristics/


1. 주소 식별과 클러스터링

암호화폐 트랜잭션 추적이 가능하기 위해서 먼저 수행되어야 하는 것은 암호화폐 주소에 대한 그룹 식별과 클러스터링이다. 블록체인 네트워크 상의 데이터인 on-chain 데이터와 OSINT, HUMINT를 통해 얻을 수 있는 데이터가 적절하게 조화될 수록 암호화폐 추적이 용이해진다.

OSINT, HUMINT 정보를 통해 특정 그룹에 속한 주소를 식별하는 경우는 다음의 예시로 들 수 있다.

  • 랜섬웨어 공격 과정 분석을 통해 특정 그룹으로 식별했을 경우, 몸값 주소
  • SNS, 웹 등에 특정 집단이 소유한 것으로 공개된 주소
  • VASP의 협조를 통해 획득한 주소
  • ...

위와 같은 정보를 통해 동일한 그룹에 포함되는 주소끼리 클러스터링 할 수 있을 것이다.​

[그림 1] 클러스터링이 적용되지 않은 그래프
[그림 2] 클러스터링이 적용된 그래프

[그림 1]과 달리 [그림 2]처럼 클러스터링이 적용되었을 경우, 분석 시 유의미한 차이가 있다. 클러스터링에 따라 홉 수의 차이가 발생하기 때문에 자금 출처를 분석할 때, 특정 주소와 이전 트랜잭션에서 확인할 수 있는 주소가 강한 연관성을 가지고 있는지 판단하는데 영향을 미치기 때문이다.

[그림 1]에서는 Victim으로부터 Exchange까지의 홉 수가 4이기 때문에 Exchange에 전송된 자금이 범죄에 사용된 주소의 사용자가 속한 조직으로부터 받은 금액인지, 중간 트랜잭션에서 희석되어 정당한 사용자로부터 받은 금액인지 판단하기 어려울 수 있다.

하지만, [그림 2]와 같이 클러스터링이 적용되었을 때는 홉 수가 2로 줄어들기 때문에 같은 조직으로부터 전송된 자금으로 쉽게 판단할 수 있다. 불법 조직으로 널리 알려진 클러스터에 포함된 주소로부터 자금이 전송되었을 경우, 거래소는 해당 자금을 동결시킬 수도 있을 것이다.

​비교적 정확한 정보를 얻을 수 있는 OSINT, HUMINT를 통한 방법과 달리, on-chain 상에서의 클러스터링은 그 사실이 100% 보장되지 않는 휴리스틱에 의존한다.

UTXO 모델을 기반으로 하는 비트코인은 트랜잭션을 수행했을 때, 지불 금액과 전송할 UTXO의 크기가 일치하지 않을 때, 차액에 해당하는 UTXO를 돌려받는다. 현재 비트코인 생태계에서는 차액으로 인한 UTXO를 돌려받을 때, 주소 하나를 새로 생성해서 해당 주소로 돌려받는 것을 권장하고 있으며(HD Wallet의 특징 중 하나), 대부분의 시스템이 이를 지원하고 있다.

이 때 생성되는 주소를 잔금(change) 주소라고 한다. 그리고 사용자의 의도로 인해 비트코인을 전송받는 주소를 지불(payment) 주소라고 한다.

본 글에서는 change 주소와 payment 주소를 합쳐서 출력(output) 주소라고 하겠다. 비트코인을 전송하는 주소는 input, source, send 등 다양한 방법으로 표현할 수 있는데, 입력(input) 주소라고 하겠다.​

[그림 3] 가장 일반적인 비트코인 트랜잭션 형태

가장 일반적인 비트코인 트랜잭션의 형태 중 하나는 입력 주소 1개, 지불 주소 1개, 잔금 주소 1개를 가지는 형태이며, 위와 같은 그래프로 표현될 수 있다. 이와 같은 트랜잭션 형태는 최근 블록에 포함된 트랜잭션들 중에서 50%에 가까운 비중을 차지하고 있다.(transactionfee.info)

위 그래프는 다음과 같이 2가지 방법으로 해석할 수 있을 것이다.

  • bc1qvjg4ctfsvqgjr4e3rkstz7ve52g98ame3azxm8 주소로부터 0.00490078 BTC가 1FVtPvTnUuiDr6ZZubj9yZgkV3YRBkMB4o 주소로 전송되고, 수수료를 제외한 차액인 0.00007654 BTC가 bc1qel2agpm8cxktt86mqzr599ejg5yqpfkxp8v9w4 주소로 전송되었다.
  • bc1qvjg4ctfsvqgjr4e3rkstz7ve52g98ame3azxm8 주소로부터 0.00007654 BTC가 bc1qel2agpm8cxktt86mqzr599ejg5yqpfkxp8v9w4 주소로 전송되고, 수수료를 제외한 차액인 0.00490078 BTC가 1FVtPvTnUuiDr6ZZubj9yZgkV3YRBkMB4o 주소로 전송되었다.​

첫 단추를 잘 끼워야 한다는 말이 있듯이, 잔금 주소를 어떤 주소로 식별하는지에 따라 이후 트랜잭션 분석에서 올바른 결과가 도출될지, 완전히 잘못된 결과가 도출될지 결정된다.

위와 같은 이유로 비트코인의 익명성을 강화하기 위해서 주소 재사용(잔금 주소로 입력 주소를 사용하는 것;address reuse)을 방지하고, 새 주소를 생성하거나 기존에 생성한 주소 pool에 포함된 주소 중 하나를 잔금 주소로 활용하는 것이다.

따라서, on-chain 데이터를 통한 비트코인 트랜잭션 분석의 첫 걸음은 잔금 주소를 식별하는 것으로부터 시작된다.​

2. 비트코인 휴리스틱​

본 글에서는 비트코인 on-chain 데이터를 가지고 적용할 수 있는 잔금 주소 식별을 포함한 몇 가지 휴리스틱을 소개하고자 한다.​

2-1) 주소 재사용

[그림 4] 비트코인 휴리스틱 1 - 주소 재사용

잔금 주소를 새로 생성하는 것을 권장하고 있지만, 일부 지갑 프로그램에서는 입력 주소를 재사용하고 있다.

[그림 4]를 보면 입력 주소와 2번째 출력 주소가 같은 것을 알 수 있다. 이 때, 첫 번째 출력 주소를 지불 주소로 판단할 수 있다.

 


이어지는 내용은 회사 블로그를 참고해주세요^^