비트코인 개선 제안 BIP 0069란 무엇인가요?
BIP(비트코인 개선 제안)는 비트코인 코드를 발전시키기 위해 제안되는 수정안이에요. 누구나 이런 제안을 제출할 수 있고, 커뮤니티에서 논의와 승인을 거치면 채택되어 적용될 수 있어요. BIP는 주로 중요한 업데이트를 다루며, 버그와 같은 소규모 수정은 별도의 대규모 논의 없이 처리돼요.
이번에는 일련번호 0069를 가진 특정 BIP를 살펴보고, 왜 중요한지 알아볼게요. 이 업데이트는 비트코인 거래의 보안을 강화하고, 분석에 대한 저항성을 높이기 위해 도입됐어요.
어떤 데이터가 분석 대상이 되나요?
BIP 0069가 무엇을 제안하는지 이해하려면, 비트코인 네트워크에서 자산이 어떻게 이동하는지 알아야 해요. 각 거래에는 입력과 출력이 있지만, 실제로 자산이 흐르는 건 아니에요. 입력과 출력은 비트코인이 어디서 어디로 이동하는지를 기록하는 역할을 해요. 입력은 이전 거래의 출력(미사용 거래 출력, UTXO)과 연결돼요. 조금 복잡하게 느껴질 수 있어서 예시로 설명할게요.
비트코인 거래를 현금 결제와 비교해 볼 수 있어요. 예를 들어, 친구에게 15 BTC로 물건을 사고 싶다고 해요. 이전에 각각 10 BTC씩 두 번의 거래를 받아서, 지갑에는 액면가 "10"이 적힌 두 장의 지폐가 있다고 가정해요. 각각의 "지폐"에는 출처가 연필로 적혀 있고, 이게 새 거래의 입력이 돼요. 두 장이 있으니 입력도 두 개예요.
이제 이 지폐에 "Charlie가 Peter에게"라고 적어서 친구에게 건네줄 수 있어요. 이 메시지가 거래의 첫 번째 출력이 돼요. 친구가 거스름돈을 돌려줘야 하니, 자신의 지갑에서 5 BTC를 꺼내 "Charlie가 Peter에게 거스름돈"이라고 적고, 또 다른 출력으로 만들어 돌려줘요.
실제 거래 과정은 훨씬 복잡하지만, 여기서는 세 장의 지폐만 등장해요. 만약 20 BTC를 여러 번에 걸쳐 소액으로 받았다면, 두 번이 아니라 여러 번의 거래가 생기고 입력과 출력도 더 많아져요.
보안 문제
문제는 입력과 출력이 정렬되는 방식에 있어요. 이 데이터를 기록하는 표준이 없어서, 각 지갑은 자체적인 정렬 방식을 사용해요. 어떤 지갑은 먼저 사용된 입력을, 그다음에 거스름돈 출력을 나열하기도 하고, 어떤 지갑은 입력을 추가된 날짜순으로 정렬하기도 해요. 이런 차이 때문에 분석을 통해 특정 지갑이나 서비스만의 패턴을 식별할 수 있어요.
또 다른 잠재적 문제도 있어요. BIP 0069의 작성자인 Kristov Atlas는 만약 지갑 코드에 접근할 수 있는 공격자(예: 개발자)가 입력과 출력을 개인 키의 비트에 따라 정렬하도록 코드를 수정한다면, 거래를 추적하는 것만으로 개인 키를 알아낼 수 있다고 가정했어요. 이런 "임플란트"는 발견하기도 매우 어려워요.
어떻게 해결할 수 있을까요?
입력과 출력을 특정 패턴 없이 정렬하면 이런 취약점을 막을 수 있어요. BIP 0069는 입력값만으로는 예측할 수 없는 비결정적 정렬 방식을 제안해요. 복잡한 알고리즘이 필요한 게 아니라, 데이터를 사전순(알파벳 오름차순)으로만 정렬하면 돼요.
Tangem Wallet은 이미 이 방식을 적용하고 있어요. iOS와 Android 기기에서 모두 사용할 수 있어요.