피드로 돌아가기
Dev.toSecurity
원문 읽기
ZKP 기반 Compact 회로의 3중 Replay Attack 방어 체계 설계
Replay Attack Prevention in Compact: Nonces, Nullifiers, and Domain Separation
AI 요약
Context
Ethereum과 달리 ZK-Proof 기반의 Midnight 네트워크는 프로토콜 수준의 Nonce 처리가 부재한 구조임. 이로 인해 동일 증명(Proof)의 재사용을 통한 Operation, Cross-operation, Cross-contract Replay 공격 위험이 상존함.
Technical Solution
- Counter-based Nonce 도입을 통한 순차적 트랜잭션 정렬 및 중복 제출 차단
- High-concurrency 환경의 직렬화 병목 해결을 위한 Set-based Nullifier 구조 설계
- persistentCommit 함수에 Context-scope를 결합하여 서로 다른 계약 간의 Nullifier 충돌 방지
- Domain Separation Tag 적용을 통해 동일 입력값 기반의 서로 다른 Circuit 간 Proof 재사용 원천 차단
- Uint<64> 연산 시 범위 확장 문제를 해결하기 위해 currentNonce와 nextNonce를 분리 전달하는 오프체인 계산 패턴 적용
- 상태 변경 전 Nullifier 기록을 우선 수행하는 Defensive Programming 패턴 적용
실천 포인트
- ZK-Proof 기반 시스템 설계 시 프로토콜 수준의 Replay 방지 여부를 먼저 확인하십시오. - 트랜잭션의 엄격한 순서가 필요하면 Counter Nonce를, 고성능 병렬 처리가 필요하면 Nullifier를 선택하십시오. - Nullifier 생성 시 반드시 계약 주소나 버전 정보를 포함한 Context-scoped Hash를 사용하여 Cross-contract Replay를 방지하십시오. - Circuit 내 산술 연산 시 Range Type 확장에 따른 Panic 가능성을 검토하고 외부에서 계산된 값을 전달하는 방식을 고려하십시오.