교육 목적의 정보이며 투자 조언이 아닙니다. 재생 통제 결함은 중복 발행, 잠금 해제 또는 임의의 목적지 호출을 일으킬 수 있으며 손실을 회수하지 못할 수 있습니다.
핵심 답변
크로스체인 메시지 재생 방지는 인증된 하나의 원본 메시지가 의도한 목적지 도메인에서 성공한 경제적 효과를 한 번 이하로 만들도록 합니다. 릴레이어는 같은 증명을 반복 전달할 수 있고 실패한 시도는 재시도할 수 있지만, 완료된 메시지가 다시 발행하거나 잠금을 해제하거나 수신자를 호출해서는 안 됩니다.
진위성, 최종성, 재생 방지는 서로 다른 검사입니다. 유효한 서명, 검증자 증명 또는 스토리지 증명은 데이터를 인증할 수 있지만, 원본 이벤트가 최종화되었는지, 의도한 목적지와 수신자가 묶였는지, 목적지에서 아직 처리되지 않았는지까지 증명하지는 않습니다. 마찬가지로 승인된 릴레이어는 전달 경로일 뿐이며, 릴레이어 신원을 메시지 인증 대신 사용할 수 없습니다.
보편적인 크로스체인 messageId는 없습니다. 정확한 프로토콜 규격이 직렬화와 식별 방식을 정합니다. 견고한 봉투는 보통 프로토콜과 버전, 원본 도메인과 메신저 또는 이미터, 원본 발신자, nonce 또는 원본 트랜잭션·로그 식별 정보, 목적지 도메인과 수신자, 가치, 페이로드, 만료 시점을 묶습니다. Wormhole, CCTP, Optimism, ERC-5164는 서로 다른 필드와 상태 머신을 사용하므로 식별자를 서로 바꿔 쓸 수 없습니다.
작동 방식
원본 작업이 메시지를 발생시키거나 저장합니다. 필요한 확인 또는 최종성 정책을 충족한 뒤 검증자, 가디언 또는 증명 시스템이 이를 인증합니다. 목적지에서 검증기는 관련 루트 또는 서명 집합, 프로토콜 버전, 신뢰하는 원격 발신자, 목적지, 수신자, 페이로드, 시간 제한을 검사합니다. 수신자는 프로토콜이 정한 식별자를 도출하고 외부 효과를 만들기 전에 영구 처리 상태를 조회합니다.
전달은 대개 at-least-once이고, 원하는 사업 효과는 실질적으로 한 번입니다. 유용한 상태 머신은 미시도, 처리 중, 실패 또는 재시도 가능, 성공 또는 소비 완료를 구분합니다. 목적지 호출 실패가 자동으로 재생 공격인 것은 아닙니다. 예를 들어 ERC-5164는 메시지가 성공적으로 실행되는 횟수를 최대 한 번으로 제한하면서 실패 후 재시도를 허용합니다. 제품별 재시도 규칙, Gas 처리, 가치 회계는 별도로 적용됩니다.
재생 플래그나 처리 잠금은 신뢰할 수 없는 외부 호출 전에 설정하고 재진입을 통제해야 합니다. 전체 트랜잭션이 되돌려지면 상태 변경도 일반적으로 함께 되돌려져 명확한 재시도 경로가 남습니다. 프로토콜이 하위 호출 실패를 의도적으로 포착한다면 부분 가치나 효과를 실수로 남기지 않으면서 별도의 실패 상태를 기록해야 합니다. 하위 시스템을 다른 경로로도 호출할 수 있다면 수신자 역시 멱등성을 갖춰야 합니다.
nonce 범위는 중요합니다. 순차 nonce는 순서를 강제하지만 하나가 누락되면 뒤의 모든 메시지를 막을 수 있습니다. 비순차 nonce 또는 비트맵은 독립 전달을 허용하지만 워드와 비트를 정확히 계산해야 합니다. 배치는 전체가 원자적인지, 각 리프가 독립 증명과 처리 상태를 갖는지 명시해야 합니다. 부분 실행 뒤 배치 루트만 소비 처리하면 성공 리프를 중복 실행하거나 실패 리프를 영구히 고립시킬 수 있습니다.
원본 체인 재구성 정책도 재생 안전의 일부입니다. 충분한 최종성 전에 서명된 관측은 원본 이벤트가 나중에 비정규가 되더라도 암호학적으로 유효하게 남을 수 있습니다. 업그레이드도 별도 경계입니다. 프록시 스토리지 배치, 처리 완료 매핑, 버전 도메인, 이전 진입점, 상대 피어 교체, 포크 또는 chain ID 재사용은 소비된 메시지를 다시 열지 않으면서 기존 식별자를 보존하거나 의도적으로 무효화해야 합니다.
다음 절차를 사용합니다.
- 프로토콜, 배포 버전, 원본과 목적지 도메인, 신뢰하는 메신저 또는 이미터, 발신자, 수신자, 가치, 페이로드, nonce 또는 이벤트 식별 정보, 만료 의미를 고정합니다.
- 규격의 정규 인코딩과
messageId테스트 벡터를 재현하고, 모호한 연결, 누락된 필드, 다른 브리지에서 가져온 가정을 거부합니다. - 원본 포함 여부와 필요한 최종성 또는 확인 정책을 검증한 뒤, 올바른 증명 루트, 서명 정족수, 검증자 또는 가디언 집합, 버전을 검증합니다.
- 목적지, 수신자, 크로스도메인 발신자, 가치, 페이로드, 만료를 독립적으로 검증하고, 제출 릴레이어를 권한 주체가 아닌 운송 수단으로 취급합니다.
- 영구 메시지 상태를 읽고 신뢰할 수 없는 외부 호출 전에 처리 중 또는 소비 완료 상태로 진입하며, 재진입 방지를 적용하고 트랜잭션 되돌림 동작을 명시적으로 시험합니다.
- 성공, 실패, 재시도 가능 전이, 순차 또는 비트맵 nonce 동작, 배치 원자성, 가치 회계를 정의하고 반복 전달이 성공한 리프의 효과를 반복할 수 없음을 입증합니다.
- 업그레이드, 스토리지 마이그레이션, 비활성화된 이전 진입점, 피어 교체, 포크, 비상 복구를 시험한 뒤 영수증, 이벤트, 처리 상태, 목적지 잔액을 대조합니다.
예시
- 목적지 도메인 바인딩. 두 지시 모두 nonce
42와 가치1,000을 갖지만, 하나는 체인10, 다른 하나는 체인8453을 대상으로 합니다. 목적지를 생략한 식별자는2 messages를 하나의 충돌 후보로 취급하지만, 목적지를 묶은 정규 인코딩은2 distinct IDs를 만듭니다. 실제 해시 함수와 도메인 표현은 프로토콜을 따라야 합니다. - 비순차 비트맵. nonce
513이면word = floor(513 / 256) = 2,bit = 513 mod 256 = 1,mask = 1 << 1 = 2입니다. 첫 성공은 비트맵 워드2를0에서2로 바꿉니다. 중복 메시지는2 & 2 = 2를 찾아 거부되고, nonce512는 비트0을 독립적으로 사용합니다. - 재시도는 두 번째 효과가 아닙니다. 동일한 인증 메시지가
3번 전달됩니다. 목적지 호출은110,000과125,000Gas에서 실패하고 되돌려지며, 세 번째는140,000Gas로 한 번 성공합니다. 총 Gas는110,000 + 125,000 + 140,000 = 375,000이며20 gwei에서는0.0075 ETH입니다. 전달은3회지만 성공한 사업 효과는1회입니다. - 부분 배치 회계. 독립 실행 가능한 네 리프는
25 + 40 + 15 + 20 = 100단위를 가집니다. 리프0,1,3은 성공하여25 + 40 + 20 = 85이고, 리프2는 실패하여15가 대기합니다. 배치 루트만 소비하면15가 고립되고, 리프 상태 없이 전체 배치를 재시도하면85가 반복될 수 있습니다. 규격에 따라 원자적 롤백 또는 리프별 처리 상태를 사용해야 합니다.
위험
- 식별자에 목적지 체인 또는 도메인이 빠집니다.
- 식별자에 원본 메신저 또는 이미터가 빠집니다.
- 도메인에 프로토콜 또는 메시지 버전이 없습니다.
- nonce 네임스페이스가 발신자 또는 배포 간에 충돌합니다.
- 모호한 packed encoding이 서로 다른 필드 조합의 충돌을 만듭니다.
- 포크 또는 재사용한 chain ID가 이전 도메인을 다시 유효하게 만듭니다.
- 충분한 최종성 전에 수락한 원본 이벤트가 재구성으로 사라집니다.
- 잘못된 증명 루트, 검증자 집합 또는 가디언 집합을 수락합니다.
- 업그레이드 뒤에도 이전 서명 도메인이 유효합니다.
- 프록시 스토리지 손상으로 처리 상태가 초기화되거나 혼동됩니다.
- 마이그레이션에서 소비 메시지가 누락되거나 이전 진입점이 남습니다.
- 외부 호출 뒤에만 상태를 표시하여 재진입을 허용합니다.
- 실패 호출을 성공으로 표시하여 재시도할 수 없게 됩니다.
- 성공 호출을 영구 기록하지 않아 경제적 효과가 반복됩니다.
- 누락된 순차 nonce 하나가 뒤의 모든 메시지를 막습니다.
- 비트맵 워드, 비트 또는 무효화 산술이 틀립니다.
- 배치 루트 상태와 리프별 부분 실행이 충돌합니다.
- 재시도가 이미 성공한 리프를 반복 실행합니다.
- 마감, 만료 또는 목적지 시계 단위를 잘못 읽습니다.
- 릴레이어 허용 목록을 메시지 권한으로 오인합니다.
흔한 오해
- nonce만으로 전역 고유성이 생깁니다. 네임스페이스는 발신자, 프로토콜, 배포, 원본과 목적지 도메인이 결정합니다.
- 승인된 릴레이어만이 재생을 막을 수 있습니다. 릴레이어는 전달을 담당하고, 목적지 검증과 영구 소비 상태가 권한 및 재생 통제를 집행합니다.
- 반복 전달은 모두 공격입니다. at-least-once 네트워크는 실패한 메시지를 재시도할 수 있습니다. 불변 조건은 성공 효과가 한 번 이하라는 점입니다.
- 유효한 증명이나 서명이 최종성과 의도를 증명합니다. 의도한 목적지가 빠지거나 잘못된 버전을 묶거나, 나중에 재구성되는 원본 상태를 증명할 수 있습니다.
- 브리지 트랜잭션 성공이 exactly-once 완료를 증명합니다. 모든 배치 리프를 포함해 영수증 상태, 처리 완료 스토리지, 수신자 이벤트, 실제 잔액을 확인해야 합니다.
관련 주제
출처
- ERC-5164: Cross-Chain Execution - Ethereum Improvement Proposals(확인일: 2026-08-13)
- EIP-712: Typed structured data hashing and signing - Ethereum Improvement Proposals(확인일: 2026-08-13)
- CCTP Technical Guide - Circle Developers(확인일: 2026-08-13)
- Interop message passing overview - Optimism Documentation(확인일: 2026-08-13)
- VAAs - Wormhole Docs(확인일: 2026-08-13)
- Security Considerations - Solidity Documentation(확인일: 2026-08-13)
- Proof-of-stake (PoS) - ethereum.org(확인일: 2026-08-13)
- Upgrading smart contracts - OpenZeppelin Docs(확인일: 2026-08-13)