이중 지불 문제는 단일 통화 단위가 동시에 두 번 이상 사용되는 현상입니다. 이는 지출 기록과 사용 가능한 통화량 간의 불일치를 야기합니다. 이중 지불은 디지털 정보가 블록체인 프로토콜 작동 방식에 익숙한 숙련된 프로그래머에 의해 더 쉽게 조작되거나 복제될 수 있기 때문에 비트코인과 가장 일반적으로 관련됩니다. 비트코인은 또한 중개인이나 기관을 거치지 않는 P2P 교환 매체이기 때문에 도둑들이 이중 지불을 시도하는 대상이 됩니다.[1]
예를 들어, 어떤 사람이 10달러만 가지고 옷 가게에 들어가 10달러짜리 셔츠를 산 다음, 이미 계산대에 지불한 동일한 10달러로 다른 10달러짜리 셔츠를 사는 경우를 생각해 봅시다. 이는 실제 돈으로는 하기 어렵지만, 부분적으로는 최근 거래와 현재 소유자를 실시간으로 쉽게 확인할 수 있기 때문입니다. 그러나 디지털 통화로는 이중 지불이 발생할 가능성이 더 큽니다. 비트코인의 완전한 디지털 통화 네트워크는 분산화되어 있어 도둑과 해커를 감시할 중앙 기관, 규제 기관 또는 관리 기구가 없습니다. 전통적인 보안 기관은 비트코인 네트워크에서 이중 지불을 감시하지 않지만, 네트워크의 합의 메커니즘과 거래 장부를 위협할 수 있는 공격에 대처하기 위해 다른 네트워크 방어 수단이 구현되어 비트코인에 투자하는 사람들에게 확신을 줍니다.
근본적으로 이중 지불은 악의적인 행위자가 하나의 거래 사본을 보내 원본을 유지하면서 사본이 합법적인 것처럼 보이게 하거나, 첫 번째 거래를 완전히 지우는 것으로 구성됩니다. 이는 디지털 정보가 더 쉽게 복제되기 때문에 비트코인 또는 모든 디지털 통화에 대해 가능하며 위험합니다. 범죄자들이 비트코인을 이중 지불하려는 몇 가지 다른 상황이 있습니다.
공격자는 동일한 비트코인을 두 개 이상의 다른 주소로 동시에 보냅니다. 이러한 유형의 공격은 비트코인 네트워크의 느린 10분 블록 시간을 악용하려고 시도합니다. 이 시간 동안 거래는 네트워크로 전송되고 채굴자에 의해 확인 및 검증되어 블록체인에 추가되도록 대기합니다. 추가 거래를 블록체인에 몰래 추가함으로써 도둑은 원래 비트코인 금액이 아직 사용되지 않았다는 환상을 주거나, 기존 블록체인을 조작하고 원하는 미래의 이중 지불을 지원하기 위해 가짜 거래 내역으로 블록을 힘들게 다시 채굴할 수 있습니다.
공격자는 거래를 되돌리기 위해 여러 패킷(데이터 단위)을 네트워크로 보내 거래가 발생하지 않은 것처럼 보이게 합니다. 이러한 방식으로 공격자는 상대방의 자산이나 서비스를 받은 후 거래를 되돌려 비트코인 이중 지불을 시도하여 받은 상품과 보낸 비트코인을 모두 유지합니다.
채굴자 그룹이 네트워크 해시율의 50% 이상을 제어하면 암호화폐블록체인에 대해 51% 공격을 시작합니다. 네트워크 노드의 51%를 제어하면 관리 당사자가 블록체인을 변경할 수 있습니다. 공격자가 새로운 거래가 확인을 받지 못하도록 막을 수 있다면 일부 또는 모든 사용자 간의 지불이 중단될 수 있습니다. 또한 그들이 책임지고 있을 때 내린 결정을 되돌릴 수 있는 능력도 갖게 됩니다. 작업 증명과 같은 합의 시스템이 피하도록 설계된 문제 중 하나는 사용자가 거래를 되돌려 코인을 이중 지불할 수 있다는 것입니다. 참여율이 높은 코인에서 51% 공격은 매우 까다롭고 어려운 작업입니다. 대부분의 경우 공격자 그룹은 필요한 51%를 확보하고 기회가 발생하면 주입할 준비가 된 백업 블록체인을 보유해야 합니다. 그런 다음 주 네트워크는 해시되어야 합니다. 51% 공격에 대한 가장 큰 장애물 중 하나는 공격 비용입니다. 예를 들어, Bitmain S19 XP Hydro는 가장 정교한 ASIC(Application Specific Integrated Circuit) 채굴기입니다. 255 TH/s(초당 테라 해시)의 해시율을 자랑하며 19,800달러 이상의 비용이 듭니다. FoundryUSA는 54.42 EH/s(초당 엑사 해시)로 전체 비트코인 네트워크 해시율의 23.75%를 차지하고, AntPool은 41.49 EH/s, 18.12%, BinancePool은 34.48 EH/s, 15.06%를 차지합니다.[2]
Finney 공격은 비트코인 거래의 첫 번째 수신자이자 비트코인 소스 코드 릴리스에 대해 처음으로 언급한 Hal Finney의 이름을 따서 명명되었습니다. 다음과 같은 특징을 가진 이중 지불 공격입니다.
다음과 같이 진행됩니다.
블록을 찾는 시간부터 공격자가 지불을 보내고 판매자가 수락할 때까지의 시간이 '**t'**이고 블록을 찾는 평균 시간이 'T'이면 이 시간 동안 네트워크에서 다른 블록이 발견될 확률은 t/T입니다. 이 경우 공격은 실패하고 공격자는 B의 블록 보상을 잃게 됩니다. 이는 공격 시도의 평균 비용이 약 (t/T) * B임을 의미합니다. 경험 법칙으로 판매자는 V*T/B(V는 거래 가치) 이상을 기다려야 이 공격을 수행하는 것이 수익성이 없는지 확인해야 합니다. 그러나 민첩한 공격자는 동일한 블록을 여러 공격에 사용하여 잠재적으로 총 가치를 얻을 수 있으므로 이것으로 충분하지 않을 수 있습니다. 공격자의 해시율이 낮을수록 공격을 수행할 기회가 줄어듭니다. 공격이 비유동적인 상품을 얻기 위한 것이라면 이 상품에 대한 필요성이 블록을 찾는 것과 일치하도록 만드는 것은 어렵습니다. 공격이 유동적인 것(예: 비트코인을 다른 돈으로 교환)을 얻기 위한 것이라면 기회는 항상 존재하지만 판매자는 몇 번의 확인을 요구할 가능성이 높습니다. 따라서 실제로 사용하기가 어렵습니다.[4]
Race 공격은 동일한 자금을 사용하여 동시에 두 개의 거래를 생성하여 두 번 사용하는 악의적인 활동인 특정 종류의 이중 지불 시도입니다. 수신자가 확인되지 않은 거래에 대한 지불을 수락해야 합니다. 공격자는 피해자에게 확인되지 않은 거래를 보냅니다. 한편, 그들은 네트워크에 충돌하는 거래를 브로드캐스트합니다. 피해자는 자신의 거래를 먼저 관찰했기 때문에 지불받을 것이라고 믿습니다. 그러나 나머지 네트워크는 이중 지불을 먼저 보았기 때문에 피해자가 돈을 받지 못할 가능성이 높습니다. 공격자가 피해자의 노드에 직접 연결되어 있고 충돌하는 거래를 채굴자에게 직접 예치하는 경우 이러한 공격을 수행하기가 훨씬 쉽습니다.[6]
사토시 나카모토의 백서에서 타임스탬프 서버가 이중 지불 문제에 대한 해결책으로 제시되었습니다. 이 서버는 거래 블록을 해싱한 다음 해시를 비트코인 네트워크의 모든 노드에 브로드캐스트합니다. 이 타임스탬프는 해시의 정보가 해시 게시 이후에 생성될 수 없음을 보여줍니다. 각 타임스탬프에는 해시에 이전 타임스탬프가 포함되어 있으므로 거래가 발생한 순서에 대한 변경 불가능한(변경할 수 없는) 로그가 생성됩니다. 각 타임스탬프는 이전 타임스탬프를 기반으로 구축됩니다. 결론적으로 블록체인은 거래 그룹을 비트코인 네트워크의 모든 노드에 브로드캐스트하고 타임스탬프를 찍어 이중 지불을 방지합니다. 거래는 블록체인에 타임스탬프가 찍히고 이전 거래와 양적으로 연결되어 있기 때문에 되돌릴 수 없고 조작하기 어렵습니다.[2]
2009년에 첫 번째 비트코인 클라이언트가 제공된 이후 블록체인이 이중 지불을 방지하는 방법을 제대로 이해하기 위해 비트코인의 블록체인은 지금까지 수행된 모든 거래의 완전한 기록을 보존했습니다. 모든 거래가 이전 블록에 암호화 방식으로 해싱되기 때문에 아무도 기록을 변경할 수 없습니다. 이 데이터베이스는 블록이라는 새로운 거래 배치가 10분마다 추가되기 때문에 블록체인이라고 합니다.
이중 지불을 피한다는 것은 동일한 금액을 두 번 사용하는 것을 중단하는 것을 의미합니다. nonce가 동일하게 설정되면 거래 중 하나만 채굴되고 대부분의 경우 가스 가격이 더 높은 거래가 채굴될 수 있지만 어느 경우든 하나의 거래만 발생하므로 이중 지불은 발생하지 않습니다.[3] 이더리움에는 두 가지 유형의 nonce가 사용됩니다.
2019년 12월에 바이럴 비디오는 비트코인을 허용하는 위치에서 비트코인이 이중 지불되는 것을 보여주었습니다. 이러한 공격은 비트코인 프로토콜에 대한 다소 논란이 많은 업그레이드인 RBF(Replace-By-Fee)를 사용하여 가능했습니다. 첫 번째 거래는 판매자에게 보내졌고, 그 다음에는 더 높은 수수료가 첨부된 두 번째 거래가 이어졌습니다. 이 RBF 거래는 더 높은 수수료가 우선적으로 처리됨을 의미하므로 첫 번째 거래를 무시하여 이중 지불될 수 있었습니다. 이러한 공격은 판매자가 확인되지 않은 거래를 수락했기 때문에 작동했습니다.
같은 해 초에 유사한 사건에서 일부 캐나다 비트코인 보유자는 실제로 현금화하지 않고도 비트코인을 "현금화"할 수 있었습니다. 그들은 비트코인을 비트코인 ATM으로 보낸 것으로 보이며, 그곳에서 현금을 인출할 수 있었습니다. 현금을 받은 후 그들은 거래가 아직 "확인"되지 않았기 때문에 거래를 취소했습니다.[5]