비트코인 개선 제안 BIP 0069란 무엇인가요?
BIP(비트코인 개선 제안)는 비트코인 코드를 더 좋게 만들기 위해 제안하는 변경안이에요. 누구나 이런 제안을 낼 수 있고, 커뮤니티에서 논의와 승인을 거치면 실제로 채택되고 적용돼요. BIP는 주로 중요한 업데이트를 다루며, 단순 버그나 소규모 수정은 대규모 논의 없이 처리돼요.
이번에는 BIP 0069라는 특정 제안이 왜 중요한지 살펴볼게요. 이 업데이트는 비트코인 거래의 보안을 높이고, 분석에 대한 저항성을 강화하는 것을 목표로 해요.
어떤 데이터가 분석 대상이 될까요?
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 모두에서 사용할 수 있답니다.