Workspace IndexKnowledge Notes › Signature replay — a valid signature used twice, or on the wrong chain

#230PoC

Signature replay — a valid signature used twice, or on the wrong chain

Signatures without a nonce, domain separator, or chain id can be replayed against the same contract twice or against its twin on another chain — the class EIP-712 exists to close.

Not yet scoped.

Why

The PoC replays a signed permit against a second deployment to show the cross-chain replay, then adds the domain separator that binds the signature to one contract and chain.

How it works

Not yet built.

Where it lands in Jayverse

  • Wallet: bind every signed message to one contract and one chain id. Session-key grants and permits the embedded wallet produces need an EIP-712 domain separator, checked in simulate-before-sign so a replay attempt is visible before signing.
  • Bridge/Token: test cross-deployment replay across Devnet and Sepolia. Add a test that replays a signed permit across the bridge's two chains to confirm the domain separator actually blocks it.
  • Auditor: check every Rabbit and Wallet signing path for nonce, domain separator and chain id. Make it a standing checklist item rather than a one-time review, since this is the exact class EIP-712 exists to close.

Key expressions

Words and phrases from this page worth keeping, with the Korean meaning and the sentence they come from.

Expression뜻 · 쓰이는 자리
replay (a signature)서명을 재사용(재전송)하다 · 유효한 서명을 다시 써서 두 번 실행시키는 공격을 가리킴. "can be replayed against the same contract twice"
domain separator도메인 구분자 · 서명을 특정 컨트랙트·체인에만 유효하도록 묶는 EIP-712 요소. "adds the domain separator that binds the signature"
close the class (of bugs)(버그·공격) 부류를 아예 막아버리다 · 특정 표준이 존재하는 이유를 설명할 때. "the class EIP-712 exists to close"
bind (to one contract)(서명을 특정 대상에) 묶다·결속시키다 · 서명이 다른 컨트랙트에서는 무효가 되게 하는 동사. "binds the signature to one contract and chain"
twin (on another chain)(동일한 구조의) 쌍둥이(복제본) · 다른 체인에 배포된 같은 컨트랙트를 가리키는 비유. "against its twin on another chain"
EIP-712구조화 데이터 서명 표준(Ethereum typed structured-data signing standard) · 도메인 구분자로 서명을 특정 컨트랙트·체인에 묶어 재사용 공격을 막는 표준. "the class EIP-712 exists to close"

← All Knowledge Notes · Workspace Index · Top ↑

서명 재사용 — 유효한 서명을 두 번, 또는 엉뚱한 체인에서

논스, 도메인 분리자, 체인 id 없는 서명은 같은 컨트랙트에 두 번, 또는 다른 체인의 쌍둥이에 재사용될 수 있으며, EIP-712가 막기 위해 존재하는 계급입니다.

아직 범위 미정.

이 PoC는 서명된 permit을 두 번째 배포에 재사용해 크로스체인 재사용을 보인 뒤, 서명을 하나의 컨트랙트·체인에 묶는 도메인 분리자를 추가합니다.

동작 방식

아직 만들지 않음.

Jayverse에서의 위치

  • Wallet: 모든 서명 메시지를 하나의 컨트랙트와 체인 ID에 묶는다. 임베디드 월렛이 만드는 세션키 승인과 permit에는 EIP-712 도메인 분리자가 필요하며, simulate-before-sign에서 이를 확인해 서명 전에 리플레이 시도가 보이게 한다.
  • Bridge/Token: Devnet과 Sepolia 간 교차 배포 리플레이를 테스트한다. 브리지가 걸쳐 있는 두 체인에서 서명된 permit을 리플레이하는 테스트를 추가해 도메인 분리자가 실제로 이를 막는지 확인한다.
  • Auditor: Rabbit과 Wallet의 모든 서명 경로에서 논스, 도메인 분리자, 체인 ID를 점검한다. 일회성 리뷰가 아니라 상시 체크리스트 항목으로 만든다. EIP-712가 막기 위해 존재하는 바로 그 부류의 버그이기 때문이다.

핵심 표현

이 페이지의 영어 본문에서 배울 만한 단어와 표현, 뜻과 나온 자리.

Expression뜻 · 쓰이는 자리
replay (a signature)서명을 재사용(재전송)하다 · 유효한 서명을 다시 써서 두 번 실행시키는 공격을 가리킴. "can be replayed against the same contract twice"
domain separator도메인 구분자 · 서명을 특정 컨트랙트·체인에만 유효하도록 묶는 EIP-712 요소. "adds the domain separator that binds the signature"
close the class (of bugs)(버그·공격) 부류를 아예 막아버리다 · 특정 표준이 존재하는 이유를 설명할 때. "the class EIP-712 exists to close"
bind (to one contract)(서명을 특정 대상에) 묶다·결속시키다 · 서명이 다른 컨트랙트에서는 무효가 되게 하는 동사. "binds the signature to one contract and chain"
twin (on another chain)(동일한 구조의) 쌍둥이(복제본) · 다른 체인에 배포된 같은 컨트랙트를 가리키는 비유. "against its twin on another chain"
EIP-712구조화 데이터 서명 표준(Ethereum typed structured-data signing standard) · 도메인 구분자로 서명을 특정 컨트랙트·체인에 묶어 재사용 공격을 막는 표준. "the class EIP-712 exists to close"

← 전체 기술 노트 · 워크스페이스 인덱스 · 맨 위 ↑