# 레이스 공격 (Race Attack)

레이스 공격은 같은 코인을 쓰는 두 거래를 거의 동시에 전파해, 컨펌(블록 포함)을 기다리지 않고 결제를 받은 상대방을 속이는 이중 지불 공격입니다. 이름의 '레이스(race)'는 두 거래 중 어느 쪽이 먼저 블록에 들어가느냐의 '경쟁'을 뜻하며, 사람의 인종과는 관계가 없습니다.

## 자세히 알아보기

공격자는 판매자에게 대금을 보내는 거래 A와, 같은 입력(UTXO)을 자기 자신에게 되돌리는 거래 B를 만듭니다. 거래 A는 판매자의 노드에, 거래 B는 더 높은 수수료를 붙여 다른 노드와 채굴자에게 퍼뜨립니다. 판매자가 멤풀에서 거래 A를 보고 곧바로 상품을 넘기면, 실제로는 거래 B가 블록에 포함되어 거래 A는 무효가 됩니다. 판매자는 상품도 대금도 잃게 됩니다.

이 공격은 해시파워가 필요 없다는 점에서 51% 공격과 다릅니다. 노릴 수 있는 대상은 오직 '0-컨펌(미확인 거래) 결제'를 받아 주는 상대방뿐입니다. 거래가 블록에 포함되고 몇 개의 블록이 그 위에 쌓이면, 같은 수법으로 되돌리는 것은 사실상 불가능해집니다.

소프트웨어 공학에서 말하는 '경쟁 상태(race condition)'와는 다른 개념이지만, 두 처리 중 먼저 끝나는 쪽이 결과를 정한다는 점은 닮았습니다.

## 블록체인·암호화폐에서는

비트코인에서는 RBF(수수료 대체) 정책이 널리 쓰이면서 멤풀에 있는 미확인 거래를 더 높은 수수료의 충돌 거래로 바꾸기가 쉬워졌고, 그만큼 0-컨펌 결제는 더 위험해졌습니다. 그래서 거래소와 결제 서비스는 입금을 일정 수의 컨펌 이후에만 반영합니다. 이더리움이나 트론처럼 계정 모델을 쓰는 체인에서도 같은 논스의 거래를 바꿔치기할 수 있으므로, USDT 같은 스테이블코인 입금 역시 블록 포함과 확정(finality)을 확인한 뒤 처리하는 것이 원칙입니다.

방어 방법은 단순합니다. 금액이 클수록 더 많은 컨펌을 기다리고, 멤풀에서 충돌 거래를 감시하며, 여러 노드에 연결해 한 노드만 보고 판단하지 않는 것입니다.

## 주의할 점

레이스 공격과 비슷한 이름의 공격으로 '피니 공격(Finney attack)'이 있습니다. 피니 공격은 채굴자가 충돌 거래를 미리 담은 블록을 숨겨 두었다가 결제 직후 공개하는 방식이라 채굴 능력이 필요하다는 점에서 다릅니다. 두 공격 모두 미확인 거래를 '받은 돈'으로 취급할 때만 성립하므로, 받는 쪽의 정책이 가장 확실한 방어입니다.

## 쉽게 말하면

같은 수표를 두 사람에게 동시에 써 주고, 은행이 먼저 처리하는 쪽만 진짜가 되도록 하는 속임수입니다. 은행 확인(컨펌)을 기다린 사람만 안전합니다.

## 예시

공격자가 0.1 BTC짜리 UTXO 하나로 판매자에게 보내는 거래(수수료 낮음)와 자기 주소로 보내는 거래(수수료 높음)를 동시에 전파합니다. 다음 블록에 후자가 포함되면 판매자가 받은 '미확인 입금'은 사라집니다.

---
출처: https://achivx.kr/glossary/race-attack-%EB%A0%88%EC%9D%B4%EC%8A%A4-%EA%B3%B5%EA%B2%A9/ · ACHIVX 용어 사전 · 수정일 2026-10-20
