검수요청.png검수요청.png

리플레이 공격

위키원
chlheewoo (토론 | 기여)님의 2019년 8월 14일 (수) 14:47 판 (개요)
이동: 둘러보기, 검색

리플레이 공격 또는 리플레이 어택(replay attack)이란 기존 코인과 하드포크로 인해 나오는 새로운 코인이 동일 인증키를 사용하기 때문에 한쪽 코인의 출금정보를 가지고 다른 쪽 코인 출금을 시도하는 행위이다. 즉, 개인 지갑에 저장된 암호화폐가 중복 출금되는 현상을 말한다.

개요

리플레이 공격은 플레이백(playback) 공격이라고도 하며,블록체인 하드포크시 한쪽 블록체인의 트랜잭션 데이터를 다른쪽 블록체인에 그대로 복사 재전송해 다른쪽 블록체인에도 같은 트랜잭션이 기록되도록 하는 행위이다. 이로 인해 원하지 않는 트랜잭션이 일어나게 된다. 예를 들어, 하드포크 전 1000 이더를 보유한 A라는 사람이 있다. A는 이더리움ETCETH로 포크 된 뒤, 새로 생긴 ETC 1000개를 B라는 사람에게 ETH의 10분의 1 가격으로 팔았다. 그런데, 지갑을 열어보니, 남아있어야할 ETH가 모두 사라지고 없다. ETC 트랜잭션이 리플레이 돼 남아있어야 할 1000개의 ETH도 함께 B에게 전송된 것이다. A는 큰 손실을 본 것이고, B는 큰 이들을 본 것이다. 실제로 이 같은 일이 벌어지고 있어 거래소가 가장 큰 피해를 입고있다. 리플레이 어택은 해커의 소행이 아니라, 부실한 하드포크 코딩이 원인인 것으로 드러났다. 누군가 개입해 인위적으로 리플레이를 하는 것이 아니라, 하드포크가 불완전하게 이루어져, 한쪽 블록체인의 트랜잭션이 다른쪽 체인에도 자동으로 브로드캐스트 된다.[1]

예방 및 대책

모든 리플레이 어택에 대한 일반적인 대책

세션 ID와 구성요소 번호로 암호화된 각 구성요소에 태그를 지정하면 리플레이 어택을 방지할 수 있다. 이 솔루션 조합을 사용하면 서로 상호 의존적 인 것은 사용하지 않는다. 상호 의존성이 없기 때문에 취약점이 줄어 든다. 이것은 프로그램의 각 실행에 대해 고유한 임의의 세션 ID가 생성되기 때문에 이전 실행이 복제하기가 더 어려워지므로 효과가 있다. 이 경우 새 실행시 세션 ID가 변경되었기 때문에 공격자가 재생을 수행 할 수 없다.

세션 식별자에 추가

세션 토큰이라고도하는 세션 ID는 리플레이 어택을 피하는 데 사용할 수 있는 메커니즘 중 하나다.

  1. A는 B에게 일회용 토큰을 보내는데, B는 암호를 변환하고 결과를 A에게 보낸다. 예를 들어, 토큰을 사용하여 세션 토큰의 해시 함수를 계산하고 사용할 암호에 추가한다.
  2. A는 세션 토큰으로 동일한 계산을 수행한다.
  3. B와 A의 값이 모두 일치하는 경우에만 로그인에 성공한다.
  4. 이제 공격자 C가이 값을 캡처하여 다른 세션에서 사용하려고한다고 가정했을때, A는 다른 세션 토큰을 보내며 C가 캡처 된 값으로 응답하면 A의 계산과 다르므로 B가 아니라는 것을 알게된다.

세션 토큰은 무작위 프로세스로 선택해야한다. 그렇지 않으면 C는 A로 위장하여 미래의 예측 토큰을 제시하고 B가 해당 토큰을 변환에 사용하도록 설득 할 수 있다. 그런 다음 C는 나중에 회신을 재생할 수 있으며 A은 인증 을 수락 한다.

일회성 비밀번호

일회용 암호는 사용 후 또는 매우 짧은 시간 후에 암호가 만료된다는 점에서 세션 토큰과 유사하다. 세션 외에도 개별 트랜잭션을 인증하는 데 사용할 수 있다. 또한 인증 프로세스 중에 서로 통신하는 두 당사자 간의 신뢰를 설정하는 데 사용될 수 있다.

Nonces와 MAC

A은 nonces 를 보낼 수도 있지만 B가 확인해야하는 메시지 인증 코드 (MAC)를 포함해야한다.

타임 스탬프

타임 스탬프는 리플레이 어택을 방지하는 또 다른 방법이다. 보안 프로토콜을 사용하여 동기화를 수행 해야한다. 예를 들어 A는 주기적으로 시계와 함께 시간을 MAC과 함께 브로드 캐스트한다. B는 A에게 메시지를 보내려고 할 때 자신의 메시지에 자신의 시계에 대한 예상 시간을 포함시켜 인증한다. A은 타임 스탬프가 적절한 허용 범위 내에있는 메시지만 수락한다. 이 체계의 장점은 A가 난수를 생성 할 필요가없고 B가 A에게 난수를 요구할 필요가 없다는 것이다. 단방향 네트워크또는 단방향에 가까운 경우 이점이 될 수 있다. 리플레이 어택이 충분히 빠르게 수행된다면,합리적' 한계 내에서 성공할 수 있다는 것이 단점이다.[2]

각주

  1. 비트공자, 〈부실한 하드포크 코딩이 초래한 재난, 리플레이 어택(replay attack)/Seoul Bitcoin Forum〉, 《서울비트코인포럼》, 2016-07-31
  2. Replay attack〉, 《위키피디아》

참고자료

같이보기


  검수요청.png검수요청.png 이 리플레이 공격 문서는 보안에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.