blockchain
[Crypto] Signature Replay Attack
개발가락
2023. 10. 2. 15:57
Senario
Alice가 보낸 트랜잭션을 수신하는 Bob이 공격자라고 가정하겠다.
1. Alice가 Bob한테 50ETH을 송금하는 트랜잭션을 보낸다.
2. Bob이 Alice의 디지털 서명을 찾아낸다.
3. 찾아낸 디지털 서명을 이용하여 해당 defi어플리케이션이 지원하는 다른 네트워크 체인에서 과정 1의 트랜잭션을 재생한다.
결과적으로 Alice는 본인이 인식하지도 못한채 손실을 입게된다.
실생활에 좀 빗대어 표현하자면 집 열쇠(디지털 서명)를 공격자가 복제하여 본인이 원할 때 어느 때나 집에 출입이 가능한 상황이다.
Protection
EIP-155(Simple Replay attack protection)에 방어법이 명시되어있다.
주요하게 두 가지 요소를 뽑는데, nonce 와 chainId이다.
nonce에 대해 OAuth에선 일반적으로 동시간대에 유일한 문자열값으로 정의하던데, 마찬가지로 replay attack을 막기 위한 요소이다.
블록체인에선 트랜잭션 카운트값을 nonce값으로 사용한다.
트랜잭션 카운트값은 해당 트랜잭션을 식별하기 위한 충분한 값으로 사용될 수 있기에, 동일 네트워크 상에서는 replay attack을 막을 수 있겠으나, 동일 트랜잭션을 다른 네트워크에서 실행한다면 여전히 취약해 보인다.
따라서, 각 서명 프로세스에 nonce & chainId 모두 검증한다면 효과적으로 공격을 방지할 수 있을 것이라 보인다.