이중 지불(Double spending) 문제는 단일 화폐 단위가 동시에 두 번 이상 소비되는 현상입니다. 이는 지출 기록과 사용 가능한 화폐량 사이의 불일치를 발생시킵니다. 이중 지불은 주로 Bitcoin 과 관련하여 언급되는데, 이는 블록체인 프로토콜의 작동 방식에 익숙한 숙련된 프로그래머가 디지털 정보를 더 쉽게 조작하거나 복제할 수 있기 때문입니다. 또한 Bitcoin은 어떠한 중개자나 기관을 거치지 않는 피어 투 피어(P2P) 교환 매체이기 때문에 절도범들의 이중 지불 공격 대상이 되기도 합니다.[1]
예를 들어, 누군가 셔츠가 10벌뿐인 의류 매장에 들어가서 이미 계산대에서 결제한 10벌을 추가로 더 사는 상황을 가정해 보겠습니다. 실물 화폐의 경우 최근 거래 내역과 현재 소유주를 실시간으로 쉽게 확인할 수 있어 이러한 행위가 어렵지만, 디지털 화폐에서는 이를 시도할 기회가 더 많습니다. 비트코인의 완전한 디지털 화폐 네트워크는 탈중앙화되어 있으며, 이는 도둑이나 해커를 감시할 중앙 당국, 규제 기관 또는 관리 기구가 없음을 의미합니다. 전통적인 보안 기관이 이중 지불에 대해 Bitcoin 네트워크를 모니터링하지는 않지만, 네트워크의 합의 메커니즘과 거래 장부를 위협할 수 있는 공격에 맞서기 위해 다른 네트워크 방어 수단들이 구현되어 있습니다. 이를 통해 Bitcoin에 투자하는 사람들에게 신뢰를 제공합니다.
근본적으로 이중 지불은 악의적인 행위자가 하나의 거래 복사본을 보내어 그 복사본이 정당한 것처럼 보이게 하면서 원본을 보유하거나, 첫 번째 거래를 완전히 삭제하는 행위로 구성됩니다. 디지털 정보는 복제가 쉽기 때문에 비트코인이나 모든 디지털 통화에서 이러한 행위는 가능하며 위험합니다. 범죄자들이 비트코인을 이중 지불하려고 시도하는 몇 가지 상황이 있습니다.
공격자는 동일한 비트코인을 두 개(또는 그 이상)의 다른 주소로 동시에 보냅니다. 이러한 유형의 공격은 비트코인 네트워크의 느린 10분 블록 생성 시간을 악용하려고 시도합니다. 이 시간 동안 거래는 네트워크로 전송되어 채굴자가 확인하고 검증하여 블록체인에 추가하기 위해 대기합니다. 블록체인에 추가 거래를 몰래 끼워 넣음으로써, 도둑들은 원래의 비트코인 금액이 아직 소비되지 않았다는 착각을 불러일으키거나, 기존 블록체인을 조작하고 가짜 거래 내역이 포함된 블록을 힘들게 다시 채굴하여 원하는 미래의 이중 지불을 지원할 수 있습니다.
공격자는 네트워크에 여러 패킷(데이터 단위)을 보내 거래를 취소함으로써 해당 거래가 전혀 일어나지 않은 것 같은 착각을 줍니다. 이러한 방식으로 공격자는 상대방의 자산이나 서비스를 받은 후 거래를 취소하여, 받은 물품과 보낸 비트코인을 모두 보유하는 방식으로 비트코인 이중 지불을 시도합니다.
채굴자 그룹이 네트워크 해시 레이트의 50% 이상을 장악하면, 암호화폐 블록체인에 대해 51% 공격을 감행합니다. 네트워크 노드의 51%를 제어하면 지배 세력은 블록체인을 변경할 수 있는 능력을 갖게 됩니다. 공격자가 새로운 거래가 승인되는 것을 막을 수 있다면 일부 또는 모든 사용자 간의 결제가 중단될 수 있습니다. 또한 그들이 권한을 가졌을 때 내린 결정을 되돌리는 능력도 갖게 됩니다. 작업 증명(Proof-of-Work)과 같은 합의 시스템이 방지하도록 설계된 문제 중 하나는 거래를 취소함으로써 사용자가 코인을 이중 지불할 수 있다는 점입니다. 참여율이 높은 코인에서 51% 공격은 매우 까다롭고 어려운 작업입니다. 대부분의 경우 공격자 그룹은 필요한 51%를 지휘할 수 있어야 하며 기회가 왔을 때 주입할 준비가 된 백업 블록체인을 가지고 있어야 합니다. 그런 다음 메인 네트워크보다 더 높은 해시 파워를 내야 합니다. 51% 공격의 가장 큰 장애물 중 하나는 그 비용입니다. 예를 들어, Bitmain S19 XP Hydro는 가장 정교한 주문형 반도체(ASIC) 채굴기입니다. 이 기기는 255 TH/s(초당 테라 해시)의 해시 레이트를 자랑하며 가격은 19,800달러 이상입니다. 54.42 EH/s(초당 엑사 해시)를 보유한 FoundryUSA는 전체 비트코인 네트워크 해시 레이트의 23.75%를 차지하며, AntPool이 41.49 EH/s(18.12%), Binance Pool이 34.48 EH/s(15.06%)로 그 뒤를 잇고 있습니다.[2]
피니 공격은 비트코인 거래의 첫 번째 수신자이자 비트코인 소스 코드 출시에 대해 처음으로 의견을 남긴 사람인 할 피니(Hal Finney)의 이름을 따서 명명되었습니다. 이는 다음과 같은 특징을 가진 이중 지불 공격입니다:
공격 과정은 다음과 같습니다:
블록을 찾은 시점부터 공격자가 결제 대금을 보내고 상인이 이를 수락할 때까지의 시간을 't'라고 하고, 블록을 찾는 평균 시간을 'T'라고 하면, 이 시간 동안 네트워크에서 다른 블록이 발견될 확률은 t/T입니다. 이 경우 공격은 실패하며, 공격자는 블록 보상 B를 잃게 됩니다. 이는 공격 시도의 평균 비용이 약 (t/T) * B임을 의미합니다. 경험 법칙상, 상인은 이 공격을 시도하는 것이 수익성이 없도록 만들기 위해 최소 t=V*T/B (V는 거래 가치)만큼 기다려야 합니다. 하지만 민첩한 공격자는 동일한 블록을 여러 번의 공격에 사용하여 잠재적으로 그 가치의 합계만큼 이득을 취할 수 있으므로 이것만으로는 충분하지 않을 수 있습니다. 공격자의 해시레이트가 낮을수록 공격을 수행할 기회는 줄어듭니다. 만약 공격 대상이 비유동성 재화라면, 해당 재화의 필요 시점과 블록 발견 시점을 일치시키기 어렵습니다. 유동성 재화(예: 비트코인을 다른 화폐로 교환)를 얻으려는 공격이라면 기회는 항상 존재하지만, 상인이 몇 차례의 확인(confirmations)을 요구할 가능성이 높습니다. 이러한 점들 때문에 이 공격은 실제로 사용하기 어렵습니다.[4]
레이스 공격은 동일한 자금을 두 번 사용하기 위해 동시에 두 개의 거래를 생성하는 악의적인 활동인 이중 지불(Double-Spending) 시도의 특수한 형태입니다. 이 공격은 수취인이 확인되지 않은 거래에 대한 결제를 수락해야 가능합니다. 공격자는 피해자에게 확인되지 않은 거래를 보냅니다. 그동안, 그들은 네트워크에 충돌하는 거래를 방송합니다. 피해자는 자신의 거래를 먼저 관찰했기 때문에 대금이 지급될 것이라고 믿습니다. 그러나 네트워크의 나머지 부분은 이중 지불 거래를 먼저 보았기 때문에 피해자가 돈을 받지 못할 가능성이 큽니다. 이러한 공격은 공격자가 피해자의 노드에 직접 연결되어 있고 충돌하는 거래를 채굴자들에게 직접 전송할 때 훨씬 수행하기 쉽습니다.[6]
사토시 나카모토(Satoshi Nakamoto)의 백서에서는 이중 지불 문제에 대한 해결책으로 타임스탬프 서버가 제안되었습니다. 이 서버는 트랜잭션 블록을 해시한 다음, 해당 해시를 비트코인 네트워크의 모든 노드에 전파합니다. 이 타임스탬프는 해시 내의 어떤 정보도 해시가 게시된 이후에 생성될 수 없었음을 증명합니다. 각 타임스탬프는 해시 내에 이전 타임스탬프를 포함하고 있으므로, 이는 트랜잭션이 발생한 순서에 대한 불변의(변경 불가능한) 기록을 생성합니다. 각 타임스탬프는 그 이전에 생성된 것들을 기반으로 구축됩니다. 결론적으로, 블록체인(blockchain)은 트랜잭션 그룹을 비트코인(bitcoin) 네트워크의 모든 노드에 전파하고 타임스탬프를 기록함으로써 이중 지불을 방지합니다. 트랜잭션은 블록체인에 타임스탬프가 기록되고 이전 트랜잭션들과 정량적으로 연결되어 있기 때문에 되돌릴 수 없으며 조작하기 어렵습니다.[2]
2009년 첫 번째 비트코인 클라이언트가 배포된 이후, 비트코인(bitcoin)의 블록체인(blockchain)은 블록체인이 이중 지불을 어떻게 방지하는지 제대로 이해하기 위해 지금까지 수행된 모든 트랜잭션의 상세한 기록을 보존해 왔습니다. 모든 트랜잭션은 이전 블록에 암호학적으로 해시되어 연결되므로 아무도 기록을 변경할 수 없습니다. 이 데이터베이스는 10분마다 블록이라고 불리는 새로운 트랜잭션 묶음이 추가되기 때문에 블록체인이라고 불립니다.
이중 지불을 방지한다는 것은 동일한 금액을 두 번 사용하는 것을 막는 것을 의미합니다. 만약 논스(nonce)가 동일하게 설정되면 트랜잭션 중 하나만 채굴되며, 대부분의 경우 가스 가격이 더 높은 트랜잭션이 선택될 수 있습니다. 그러나 어떤 경우에도 결국 하나의 트랜잭션만 발생하므로 이중 지불은 일어나지 않습니다.[3] 이더리움(Ethereum)에는 두 가지 유형의 논스가 사용됩니다.
2019년 12월, 비트코인을 결제 수단으로 허용하는 장소에서 비트코인이 이중 지불(double-spent)되는 모습을 담은 영상이 화제가 되었습니다. 이러한 공격은 비트코인 프로토콜의 다소 논란이 되었던 업그레이드인 RBF(Replace-By-Fee) 기능을 사용하여 가능해졌습니다. 첫 번째 트랜잭션이 가맹점에 전송된 후, 더 높은 수수료가 붙은 두 번째 트랜잭션이 뒤따라 전송되었습니다. 이 RBF 트랜잭션은 수수료가 더 높기 때문에 우선적으로 처리되어 첫 번째 트랜잭션을 무효화했고, 이를 통해 이중 지불이 가능해졌습니다. 이러한 공격이 성공한 이유는 가맹점들이 확인되지 않은 트랜잭션(unconfirmed transactions)을 수락했기 때문입니다.
같은 해 초에 발생한 유사한 사건에서는 일부 캐나다 비트코인 보유자들이 실제로 비트코인을 매도하지 않고도 현금을 "현금화"할 수 있었습니다. 이들은 비트코인 ATM으로 비트코인을 보내 현금을 인출한 것으로 보였습니다. 현금을 받은 후, 그들은 해당 트랜잭션이 아직 "확인(confirmed)"되지 않았다는 점을 이용해 거래를 취소했습니다. [5]
June 18, 2026. 14:32 UTC
편집 요약:
Updated summary and replaced wallet address
