IT 이야기

이중지불 문제는 무엇이며 어떻게 막을까?

디지털 파일은 복사할 수 있습니다. 사진이나 문서를 여러 사람에게 동시에 보내는 일도 어렵지 않습니다.

하지만 디지털 화폐까지 같은 방식으로 복제하거나 중복 사용할 수 있다면 결제 수단으로서 가치를 유지하기 어렵습니다. 이 문제를 해결하는 것이 전자화폐와 블록체인 기술의 핵심 과제입니다.

같은 비트코인으로 두 개의 충돌 거래를 만드는 이중지불 시도 과정

이중지불이란 무엇일까?

이중지불은 하나의 디지털 자산을 서로 다른 거래에 중복 사용하는 행위를 뜻합니다. 쉽게 말하면 같은 돈으로 두 사람에게 동시에 결제하려는 상황입니다.

현금은 한 번 건네면 내 손에 남아 있지 않습니다. 반면 디지털 데이터는 원본을 유지한 채 복사할 수 있기 때문에, 별도의 검증 장치가 없다면 같은 자산을 여러 번 사용하는 거래가 만들어질 수 있습니다.

예를 들어 어떤 사람이 비트코인 1개를 가지고 있다고 가정해 보겠습니다.

① 판매자에게 비트코인 1개를 보내는 거래를 만듭니다. ② 같은 비트코인 1개를 자신의 다른 주소로 보내는 거래도 만듭니다. ③ 두 거래를 서로 다른 참여자에게 전달합니다. ④ 판매자가 거래 확정 전에 상품을 넘기면 문제가 생길 수 있습니다.

실제 네트워크에서는 두 거래가 모두 유효한 결제로 인정되지는 않습니다. 하지만 어느 거래가 최종 기록될지 확정되기 전에 상품이나 서비스를 제공하면 판매자가 손해를 볼 수 있습니다.

비트코인 개발자 문서에서는 이중지불을 같은 입력을 재사용하는 거래로 설명합니다. 동일한 자산을 참조하는 거래가 여러 개 제출되더라도, 최종 거래 기록에는 하나만 포함될 수 있습니다.

디지털 화폐에서 왜 이런 문제가 발생할까?

디지털 데이터에는 실물처럼 자동으로 적용되는 소유권 이전이 없습니다. 파일을 상대방에게 보내더라도 내 컴퓨터에 저장된 복사본은 그대로 남을 수 있습니다.

일반 문서라면 같은 파일을 여러 사람에게 보내도 문제가 없습니다. 그러나 화폐는 사용한 뒤에 다시 사용할 수 없어야 하므로, 단순한 파일 전송 방식만으로는 결제 기록을 관리하기 어렵습니다.

여기에 인터넷의 전송 지연도 영향을 미칩니다.

서로 다른 지역에 있는 컴퓨터가 거래 정보를 완전히 같은 순간에 받는 것은 아닙니다. 어떤 참여자는 판매자에게 보내는 거래를 먼저 확인하고, 다른 참여자는 구매자가 자기 주소로 보내는 거래를 먼저 확인할 수 있습니다.

따라서 디지털 화폐에는 다음 질문에 답할 수 있는 체계가 필요합니다.

비트코인 이전의 디지털 화폐들은 대부분 운영 회사나 은행이 이러한 문제를 처리했습니다. 실제 사례와 초기 전자화폐의 발전 과정은 비트코인 이전에도 디지털 화폐가 있었을까?에서 확인할 수 있습니다.

  • 이 자산의 현재 소유자는 누구인가?
  • 해당 자산이 이전에 사용된 적이 있는가?
  • 서로 충돌하는 거래 중 어떤 거래를 인정해야 하는가?
  • 누가 거래 기록을 검증하고 보관하는가?

은행과 결제 서비스는 이중지불을 어떻게 막을까?

은행은 중앙에서 관리하는 계좌 기록으로 중복 지급을 방지합니다. 고객이 송금하면 잔액을 확인한 뒤 해당 금액을 차감하고, 거래 결과를 내부 시스템에 기록합니다.

예를 들어 계좌에 10만 원이 있을 때 8만 원을 송금하면 잔액은 2만 원으로 줄어듭니다. 같은 계좌에서 다시 8만 원을 보내려 해도 잔액이 부족하므로 거래가 승인되지 않습니다. 은행이라는 관리 주체가 거래 순서와 잔액을 통제하기 때문입니다.

카드 결제와 온라인 간편결제도 기본적으로 비슷합니다.

카드사나 결제 서비스가 승인 정보를 확인하고, 동일한 자산이 중복 사용되지 않도록 거래 상태를 관리합니다. 실제 정산 시점과 승인 시점은 다를 수 있지만, 거래를 검증하는 중앙 운영자가 존재한다는 공통점이 있습니다.

중앙 관리 방식은 거래 처리와 문제 대응의 책임 주체가 비교적 명확합니다. 반대로 비트코인은 특정 회사나 은행 없이 거래 순서를 정해야 하므로 다른 검증 구조가 필요합니다.

구분 은행·결제 서비스 비트코인 네트워크
거래 기록 관리 금융기관이나 서비스 회사 네트워크 참여자가 공유
잔액 또는 자산 검증 중앙 서버에서 확인 각 참여자가 거래 규칙에 따라 검증
중복 거래 처리 운영 기관이 승인 또는 거절 합의된 거래 기록에 하나만 반영
운영 주체 특정 기관 존재 특정 중앙 운영자 없음
거래 확정 기준 기관의 승인과 내부 처리 블록 포함과 후속 확인

비트코인은 이중지불을 어떻게 방지할까?

비트코인은 거래 기록을 공개하고 여러 참여자가 검증하도록 설계됐습니다. 특정 기관이 잔액을 관리하는 대신, 네트워크 전체가 공통 규칙에 따라 거래의 유효성을 확인합니다.

핵심은 아직 사용되지 않은 거래 결과를 추적하는 것입니다.

비트코인에서 UTXO는 아직 사용되지 않은 거래 출력을 뜻합니다. 쉽게 말하면 앞으로 새로운 거래에 사용할 수 있는 디지털 잔액 조각입니다.

예를 들어 이전 거래에서 비트코인 1개를 받았다면, 해당 기록은 사용 가능한 거래 출력으로 남습니다. 이후 다른 사람에게 이 자산을 보내면 그 출력이 새로운 거래의 입력으로 사용됩니다. 한 번 사용된 출력은 다시 사용할 수 없습니다.

비트코인 개발자 문서에서도 각 거래 출력은 블록체인에서 한 번만 사용할 수 있다고 설명합니다. 이미 사용된 출력을 다시 참조하는 거래는 이중지불에 해당합니다.

거래가 검증되는 과정은 다음과 같습니다.

① 사용자가 비트코인을 보내는 거래를 생성합니다. ② 거래 정보가 네트워크 참여자에게 전달됩니다. ③ 참여자들은 전자서명과 자산의 사용 여부를 확인합니다. ④ 유효한 거래가 다른 거래들과 함께 블록에 포함됩니다. ⑤ 채굴자는 작업증명을 수행해 새로운 블록을 생성합니다. ⑥ 다른 참여자가 블록을 검증하고 거래 기록에 연결합니다. ⑦ 같은 자산을 다시 사용하려는 거래는 유효한 기록으로 인정되지 않습니다.

작업증명은 블록을 생성하기 위해 일정한 계산을 수행했음을 증명하는 방식입니다. 거래 기록을 바꾸려면 해당 블록뿐 아니라 이후에 연결된 블록들의 계산까지 다시 따라잡아야 합니다.

이 때문에 이전 거래 기록을 수정하는 데 상당한 비용이 필요합니다.

사토시 나카모토의 비트코인 백서도 분산 네트워크와 작업증명을 결합해 이중지불 문제를 해결하는 구조를 제시합니다. 여기서 중요한 기준은 단순히 블록 개수가 많은 기록이 아니라, 누적 작업량이 더 큰 유효한 거래 기록입니다.

비트코인 거래 확인 횟수가 늘면서 이중지불 위험이 감소하는 흐름

거래 확인 횟수가 중요한 이유

비트코인 거래가 네트워크에 전송됐다고 해서 즉시 확정되는 것은 아닙니다. 거래가 블록에 포함되기 전까지는 서로 충돌하는 다른 거래가 먼저 기록될 가능성이 남아 있습니다.

거래가 처음 블록에 포함되면 확인 횟수는 1회가 됩니다. 그 위에 새로운 블록이 하나 더 연결되면 확인 횟수는 2회로 늘어납니다.

확인 횟수가 증가할수록 해당 거래를 뒤집으려면 더 많은 블록을 다시 만들어야 합니다. 따라서 일반적으로 확인 횟수가 많을수록 이중지불 위험은 줄어듭니다.

비트코인 개발자 문서는 6회 확인을 고액 거래에서 고려할 수 있는 참고 기준으로 소개합니다. 평균적인 블록 생성 간격을 기준으로 보면 약 1시간이 걸릴 수 있지만, 실제 시간은 네트워크 상황에 따라 달라집니다.

모든 거래가 반드시 6회 확인을 기다려야 하는 것은 아닙니다.

거래소, 지갑 서비스, 판매자는 거래 금액과 자산의 특성에 따라 자체 기준을 적용합니다. 중요한 것은 전송 완료 표시와 실제 거래 확정이 같은 의미는 아니라는 점입니다.

확인 상태 의미 이중지불 위험 확인할 점
0회 거래가 전송됐지만 블록에 미포함 상대적으로 높음 입금 표시만 보고 거래 확정으로 판단하지 않음
1회 거래가 첫 번째 블록에 포함 감소 최근 블록이 변경될 가능성은 남아 있음
2회 이상 후속 블록이 추가로 연결 추가 감소 거래 금액과 서비스 정책을 함께 확인
6회 해당 거래 위로 블록이 누적 상대적으로 낮음 일반적인 참고 기준이며 절대 보장은 아님

작업증명과 지분증명은 이중지불을 다르게 막는다

모든 블록체인이 비트코인과 같은 방식으로 거래를 확정하는 것은 아닙니다. 작업증명과 지분증명은 각각 다른 비용 구조를 활용해 거래 기록의 변경을 어렵게 만듭니다.

작업증명은 컴퓨터 연산과 전력 사용을 기반으로 합니다. 공격자가 이미 기록된 거래를 뒤집으려면 기존 네트워크의 계산 능력과 경쟁해야 합니다.

지분증명은 검증자가 네트워크에 맡긴 자산을 바탕으로 거래 기록을 검증합니다.

검증자가 서로 충돌하는 기록에 서명하거나 규칙을 어기면 맡긴 자산의 일부를 잃을 수 있습니다. 이러한 경제적 손실 가능성이 부정행위를 억제하는 장치로 작동합니다.

이더리움 공식 문서에 따르면 지분증명에서는 검증자가 거래와 블록의 유효성을 확인합니다. 일정 조건을 충족해 거래 기록이 최종 확정되면, 이를 되돌리려는 시도에는 상당한 경제적 손실이 따릅니다.

두 방식의 차이는 작업증명과 지분증명은 무엇이 다를까?에서 자세히 비교할 수 있습니다.

다만 어떤 방식도 모든 위험을 자동으로 없애지는 않습니다.

비트코인처럼 작업증명을 사용하는 네트워크에서는 공격자가 충분한 연산 능력을 확보할 경우 거래 기록을 다시 구성하려는 시도가 가능합니다. 흔히 말하는 51% 공격이 대표적이며, 공격자가 자신의 거래를 되돌리거나 일부 거래 처리를 방해하는 상황과 관련됩니다.

그렇다고 다른 사람의 개인키를 알아내거나 임의로 새로운 비트코인을 만드는 것이 가능하다는 의미는 아닙니다. 공격자가 할 수 있는 일과 할 수 없는 일은 51% 공격이란 무엇이며 실제로 가능한 일은?에서 구분해 볼 수 있습니다.

결국 이중지불 방지의 핵심은 디지털 데이터를 복사하지 못하게 만드는 것이 아닙니다. 동일한 자산을 참조하는 여러 거래 가운데 하나만 유효한 거래 기록으로 인정하도록 만드는 것입니다.

작업증명과 지분증명이 충돌 거래를 처리하는 방식을 비교한 인포그래픽

자주 묻는 질문

이중지불은 비트코인을 복사한다는 뜻인가요?

아닙니다. 같은 비트코인 자체를 복제하는 것이 아니라 동일한 자산을 서로 다른 거래에서 중복 사용하려는 시도를 뜻합니다.

거래가 전송됐다는 화면이 보이면 안전한가요?

거래가 전송됐더라도 블록에 포함되지 않았다면 확정된 상태가 아닙니다. 특히 상품이나 서비스를 즉시 제공하는 경우 확인 횟수를 함께 살펴봐야 합니다.

비트코인은 항상 6회 확인해야 하나요?

그렇지 않습니다. 6회 확인은 고액 거래 등에 활용되는 일반적인 참고 기준입니다. 실제로 필요한 횟수는 거래소나 결제 서비스의 정책에 따라 다릅니다.

확인 횟수가 많으면 이중지불 위험이 완전히 없어지나요?

위험은 줄어들지만 완전히 0이 된다고 단정하기는 어렵습니다. 네트워크 상황과 공격자의 연산 능력에 따라 거래 기록을 바꾸는 데 필요한 비용이 달라집니다.

지분증명 블록체인도 이중지불을 막을 수 있나요?

가능합니다. 지분증명은 검증자의 합의와 예치 자산에 대한 경제적 불이익을 활용해 충돌하는 거래가 동시에 인정되지 않도록 설계합니다.

확인할 점

거래가 네트워크에 전송된 상태와 블록에 포함돼 확인된 상태는 다릅니다. 확인 횟수가 늘면 위험은 감소하지만 절대적인 안전을 보장하는 숫자는 아니므로 거래 금액과 이용 서비스의 정책을 함께 확인해야 합니다.

자주 묻는 질문

이중지불은 비트코인을 복사한다는 뜻인가요?

아닙니다. 같은 비트코인 자체를 복제하는 것이 아니라 동일한 자산을 서로 다른 거래에서 중복 사용하려는 시도를 뜻합니다.

거래가 전송됐다는 화면이 보이면 안전한가요?

거래가 전송됐더라도 블록에 포함되지 않았다면 확정된 상태가 아닙니다. 특히 상품이나 서비스를 즉시 제공하는 경우 확인 횟수를 함께 살펴봐야 합니다.

비트코인은 항상 6회 확인해야 하나요?

그렇지 않습니다. 6회 확인은 고액 거래 등에 활용되는 일반적인 참고 기준입니다. 실제로 필요한 횟수는 거래소나 결제 서비스의 정책에 따라 다릅니다.

확인 횟수가 많으면 이중지불 위험이 완전히 없어지나요?

위험은 줄어들지만 완전히 0이 된다고 단정하기는 어렵습니다. 네트워크 상황과 공격자의 연산 능력에 따라 거래 기록을 바꾸는 데 필요한 비용이 달라집니다.

지분증명 블록체인도 이중지불을 막을 수 있나요?

가능합니다. 지분증명은 검증자의 합의와 예치 자산에 대한 경제적 불이익을 활용해 충돌하는 거래가 동시에 인정되지 않도록 설계합니다.

참고한 자료