레이스 공격

용어요약

Race Attack

판매자가 확인되지 않은 거래(0-컨펌)를 받아들일 때, 공격자가 서로 충돌하는 두 거래를 거의 동시에 전파해 같은 코인을 이중 지불하려는 공격이다.

1.개요

레이스 공격(Race Attack)은 암호화폐의 이중 지불(double spending) 공격 중 하나로, 판매자가 블록에 아직 포함되지 않은 미확인 거래를 결제로 인정할 때 성립한다. 공격자는 같은 코인을 사용하는 두 개의 거래를 만든다. 하나는 판매자에게 대금을 보내는 거래이고, 다른 하나는 같은 코인을 자기 자신(또는 자신이 통제하는 지갑 주소)에게 되돌려 보내는 거래이다. 이 두 거래는 같은 자금을 쓰기 때문에 P2P 네트워크에서 오직 하나만 최종적으로 블록에 기록될 수 있다.

공격자는 두 거래를 서로 다른 노드에 거의 동시에 뿌려 네트워크가 어느 쪽을 먼저 받아들일지 '경주(race)'를 벌이게 만든다. 판매자에게 보내는 거래가 판매자의 노드에는 먼저 도달해 결제가 완료된 것처럼 보이지만, 채굴 노드 다수는 자기 자신에게 되돌리는 거래를 먼저 받아 이를 블록에 포함시킬 수 있다. 이 경우 판매자에게 보낸 거래는 무효화되고, 판매자는 물건이나 서비스를 내주었음에도 대금을 받지 못한다.

2.상세

레이스 공격의 성공 여부는 판매자 노드와 나머지 네트워크가 어떤 거래를 먼저 '유효'한 것으로 채택하느냐에 달려 있다. 대부분의 노드는 같은 자금을 쓰는 거래 중 먼저 받은 것을 유효로 간주하고 나중에 온 충돌 거래는 버린다. 공격자는 이 규칙을 악용해, 판매자와 직접 연결을 맺어 대금 거래를 판매자에게 먼저 전달하는 한편, 채굴자들에게는 자기 회수 거래를 먼저 퍼뜨리려 한다.

이 공격은 근본적으로 미확인 거래를 신뢰한다는 설계상의 취약점을 노린 설계 결함 공격이자, 네트워크가 아직 어떤 거래를 확정하지 못한 짧은 시간 창을 이용한다는 점에서 핀란드식 공격이나 벡터76 공격과 함께 이중 지불 계열로 분류된다. 다만 채굴 해시파워 자체를 장악하는 51% 공격과 달리, 레이스 공격은 대량의 연산력 없이도 시도할 수 있다는 점이 특징이다.

3.대응과 관련 개념

레이스 공격을 막는 가장 확실한 방법은 판매자가 거래가 블록에 포함되고 충분한 확인 시간을 거칠 때까지 결제를 완료로 처리하지 않는 것이다. 통상적으로 여러 개의 블록 확인을 기다리면 충돌 거래가 뒤집힐 가능성이 사실상 사라진다. 커피 한 잔처럼 소액·즉시 결제 상황에서는 이 대기 시간이 부담이 되므로, 판매자는 위험을 감수하거나 별도의 이중 지불 탐지 수단을 사용한다.

레이스 공격에서 실제로 어느 거래가 확정되었는지는 트랜잭션 ID블록 익스플로러를 통해 확인할 수 있다. 소액 즉시 결제를 안전하게 처리하려는 시도로는 라이트닝 네트워크 같은 오프체인 결제 계층이 있으며, 이는 미확인 온체인 거래에 의존하지 않도록 설계되었다.

이 문서 인용하기
토큰포스트 위키, “레이스 공격”, 2026-07-28 수정, https://wiki.tokenpost.kr/w/race-attack

문단 3개 · 연표 0건 · 각주 0