본문으로 건너뛰기
buybitcoinsmart

용어집 / 프라이버시와 보안

이중 지출

별칭은 Double spend입니다.

이중 지출이란 무엇입니까?
이중 지출은 동일한 비트코인으로 서로 다른 두 사람에게 지급하려는 시도로, 같은 코인을 소비하는 두 번째 트랜잭션이 첫 번째 트랜잭션 대신 확인되도록 하는 것입니다.

디지털 화폐는 본질적으로 복제가 가능하며, 그 복제를 막는 것이 비트코인이 해결하기 위해 만들어진 문제입니다. 모든 코인은 정확히 한 번만 소비될 수 있는 출력이며, 원장은 한쪽 버전을 블록 아래에 묻어 분쟁을 정리합니다. 확인 6회, 대략 1시간이 지나면 그것을 되돌리는 것은 네트워크 전체를 능가하는 채굴을 해야 한다는 뜻입니다. 결제가 확인될 때까지는 수령한 돈이 아니라 약속으로 취급하십시오.

작동 방식

비트코인을 지출한다는 것은 특정 출력을 소비한다는 뜻이며, 각 출력은 그것을 생성한 트랜잭션과 그 트랜잭션 안에서의 위치로 식별됩니다. 풀 노드는 미사용 출력 전체의 집합을 유지하며, 검증은 그 집합에서의 조회입니다. 여러분의 트랜잭션이 지정한 출력이 그 집합에 없다면, 그 트랜잭션은 서명이 아무리 잘 되어 있어도 무효이며 폐기됩니다.

그 덕분에 확인된 이중 지출은 구조상 불가능합니다. 흥미로운 사례는 모두 확인 이전에 일어나며, 세 가지가 있습니다.

흔한 것은 대체입니다. 같은 출력을 소비하는 두 트랜잭션은 충돌하며, 살아남을 수 있는 것은 하나뿐입니다. 노드는 먼저 도착한 쪽을 받아들이고 보통 두 번째는 무시하지만, 더 높은 수수료를 지급하는 대체 트랜잭션은 전달합니다. 2024년 10월에 출시된 Bitcoin Core 28.0 이후 -mempoolfullrbf 설정은 기본적으로 켜져 있으며, 이는 원본이 대체 가능을 요청했는지와 무관하게 노드가 더 높은 수수료를 지급하는 충돌 트랜잭션을 중계한다는 뜻입니다. 확인되지 않은 것은 무엇이든 대상이 됩니다.

두 번째는 경쟁입니다. 공격자는 같은 순간에 판매자의 노드에는 한 트랜잭션을, 네트워크의 나머지에는 충돌하는 트랜잭션을 전파하며, 자신에게 지급하는 버전이 채굴업자에게 먼저 도달하기를 겁니다. 수수료를 더 낼 필요는 없고, 더 나은 연결성만 있으면 됩니다.

세 번째는 재구성으로, 과반의 해시 파워를 필요로 하며 51% 공격 항목에서 다룹니다. 이미 블록에 들어간 결제를 되돌릴 수 있는 유일한 방법입니다.

비트코인 자체의 코드가 이 문제에 대해 공개적으로 틀린 것은 정확히 한 번입니다. 2018년 9월에 공개된 CVE-2018-17144는 트랜잭션이 같은 입력을 두 번 소비하면서 그것을 검사하는 노드를 중단시키지 않게 해 주던 버그였습니다. Bitcoin Core 0.16.3은 며칠 안에 수정본을 배포했고 체인에 손상은 없었지만, 이 보장이 사람들이 계속 감사해야 하는 소프트웨어로 강제된다는 점을 일러 주는 유용한 사례입니다.

비트코인을 구매할 때 이것이 중요한 이유

구매자는 이중 지출의 피해자가 되는 경우가 거의 없습니다. 거래소에 달러나 유로를 보내고 비트코인을 받을 때, 결제 위험은 거래소가 부담합니다. 그래서 거래소는 출금을 처리하기 전에 확인을 기다리며, 입금에는 진행 표시가 나타납니다. 코인이 여러분이 관리하는 주소에 도착하면, 지출에는 여러분의 서명이 필요하므로 아무도 그것을 다시 소비할 수 없습니다.

여러분이 비트코인을 받는 쪽이 되는 순간 위험은 뒤집힙니다. 이는 사람들이 생각하는 것보다 자주 일어납니다. 개인 간 거래(P2P)로 코인을 매도할 때, 프리랜서 작업 대가로 비트코인을 받을 때, 결제를 받는 가게를 운영할 때입니다. 어느 경우든 확인되지 않은 트랜잭션을 근거로 상품, 현금, 계좌 이체를 내주는 것이 실수입니다. 최소 1개 블록을 기다리고, 금액이 크면 여러 블록을 기다리십시오.

이 표현을 바탕으로 한 사기 유형도 통째로 존재합니다. 메시지 앱과 동영상 사이트의 판매자들은 "double spend software", "flash BTC" 또는 수수료를 받고 쓸 수 있는 코인을 생성한다는 도구를 내겁니다. 그들이 파는 것 중 작동하는 것은 없습니다. 무효 트랜잭션은 네트워크의 모든 노드에서 거부되며, 실제 상품은 여러분이 지급한 수수료입니다. 이 사이트의 보안 가이드에서 이 사기가 속한 부류를 다룹니다.

라이트닝 네트워크는 문제를 없애기보다 형태를 바꿉니다. 결제는 채널 잔액에 대해 몇 초 만에 정산되므로 판매자는 블록을 기다릴 필요가 없고, 이중 지출 문제는 채널 상대방이 이전 상태를 전파하려 하는지의 문제로 옮겨가며, 이를 처벌하기 위해 감시탑(watchtower)이 존재합니다.

확인되지 않은 결제를 대체하기, 단계별로

확인되지 않은 결제의 대체는 공격의 저렴한 버전이며, 실제 숫자로 짚어 볼 가치가 있습니다.

Alice는 노트북을 사고 0.01 BTC를 지급합니다. 그녀의 지갑은 입력 1개, 출력 2개짜리 약 141 가상 바이트의 SegWit 트랜잭션을 만들고 3 sat/vB, 즉 423 사토시의 수수료를 붙입니다. 가게의 단말기는 결제가 수령된 것으로 표시하고 노트북은 문 밖으로 나갑니다.

블록이 도착하기 전에 Alice는 같은 입력을 소비하는 두 번째 트랜잭션을 전파하며, 이번에는 코인을 자신의 주소로 보내고 수수료를 20 sat/vB, 즉 2,820 사토시로 붙입니다. 채굴업자들은 자신들에게 더 이익이 되는 버전을 택합니다. 블록이 들어오면 가게의 결제는 멤풀에서 사라지고 결코 확인되지 않습니다. Alice는 추가로 2,397 사토시를 썼는데, 대부분의 시세에서 1 달러에 한참 못 미치는 금액이며, 노트북과 코인을 모두 챙겼습니다.

그 과정에서 특별한 것은 없고 해시 파워도 개입되지 않았습니다. 방어에도 비용이 들지 않습니다. 1개 블록, 평균 약 10분을 기다리면 대체 가능 창이 닫힙니다.

이중 지출 vs 수수료 기반 대체

수수료 기반 대체는 같은 메커니즘을 정직하게 사용하는 것입니다. 자신의 결제가 막혔을 때 같은 수령인에게 더 높은 수수료로 다시 전파하면, 네트워크는 이전 버전을 기꺼이 대체합니다. 이중 지출은 그 장치를 이용해 누가 지급받는지를 바꿉니다. 중계 정책은 둘을 구별할 수 없습니다. 차이는 출력에 표현된 의도이기 때문이며, 그래서 확인되지 않은 결제를 받아들이는 판매자들은 이제 그 모든 결제가 대체 가능하다고 가정합니다.

이중 지출 vs 트랜잭션 가단성

가단성은 트랜잭션이 지급하는 내용을 바꾸지 않고 식별자만 바꿉니다. 코인은 여전히 의도한 수령인에게 가며, 추적하던 txid만 무효가 됩니다. 이는 과거에 거래소 회계와 2014년 2월의 Mt. Gox 출금 시스템을 망가뜨렸습니다. 2017년 8월에 활성화된 SegWit은 서명을 txid로 해시되는 데이터 밖으로 옮겨 제3자 가단성을 제거했습니다. 가단성의 영향을 받은 트랜잭션은 회계 문제이고, 이중 지출은 사라지는 결제입니다.

혼동하기 쉬운 용어

자주 묻는 질문

이미 받은 비트코인을 누군가 이중 지출할 수 있습니까?

확인된 후에는 그럴 수 없습니다. 블록에 이미 기록된 결제를 되돌리려면 전체 네트워크보다 더 많은 채굴 능력을 투입해야 하며, 비트코인에서 이런 일은 발생한 적이 없습니다. 아직 확인되지 않고 멤풀에 남아 있는 결제는 별개의 문제이며 대체될 수 있습니다.

확인 횟수가 0인 결제를 받아도 안전합니까?

아닙니다. 그리고 Bitcoin Core 28.0에서 전체 수수료 기반 대체(full replace-by-fee)가 기본 릴레이 정책이 되면서 안전성은 더 낮아졌습니다. 확인되지 않은 트랜잭션은 더 높은 수수료를 지불하는 충돌 트랜잭션으로 대체될 수 있으므로, 상품이나 현금을 넘기기 전에 최소 1개 블록을 기다리셔야 합니다.

온라인에서 판매되는 이중 지출 도구는 실제로 작동합니까?

아닙니다. 이중 지출 소프트웨어, 플래시 비트코인, 가짜 트랜잭션 생성기로 광고되는 모든 제품은 사기입니다. 그들이 만들어 내는 트랜잭션은 네트워크의 모든 노드에서 거부되며, 실제로 오가는 돈은 판매자에게 지불한 수수료뿐입니다.

다음에 읽을 글

관련 용어

프라이버시와 보안 분야의 다른 용어

이 페이지를 영어로 읽기