이중지불 해킹의 종류들은 어떤 것들이 있나요?
블록체인 기술의 발전 역사는 해킹들의 도전 극복의 과정이라고 해도 될 듯 합니다. 블록체인상의 거래속도를 극대화하여 Availability를 높이려는 노력과 함께 블록검증 과정이 민주적으로 이루어지도록 여러가지 노력을 기울이고 있는데요.
이중지불의 문제는 블록체인 기술이 다루어야 할 가장 근본적인 도전이라고 생각합니다. 이중지불을 일으키는 해킹의 종류들은 어떤 것이 있는지 궁금합니다.
안녕하세요. 이중지불 공격 종류에 대하여 답변드리겠습니다.
이중지불이란?
동일할 암호화폐로 한번의 거래로 두 번이상 거래되는 현상을 말합니다.
즉, A가 1Aha를 B와 C에게 동일한 거래 내역을 보내게 되고 승인 대기(팬딩) 상태 노드의 네트워크를 차단(거랜내역을 인근노드에게 전파 차단)하게 됩니다. 이때 51%의 블록체인 네트워크 점유율을 가지고 있는 A가 B에게 1Aha에 대한 거래완료 후 조작된 블록을 생산하게 하게 된 후 다시 네트워크를 연결하여 인근 노드에게 전파를 하게 됩니다.
이렇게 되면 49%의 점유율을 가진 노드에도 블럭이 생산(정상거래 완료) 되지만 51% 점유율을 가진 A가 더 높은 힘에 의해 49%의 점유율을 가진 쪽의 블럭은 취소되고 51%의 점유율을 가진 A쪽이 정상적인 블록으로 인정받게 됩니다.
이렇게 되면 이미 49%의 노드쪽의 거래도 완료되고, 차후에는 51%의 노드쪽의 거래도 완료되게 되어 이중지불 상태가 되게됩니다.
이클립스 어택(Eclipse Attack)이란?
악의적인 노드가 블록체인 네트워크에 허위로 작성된 전송 내역을 담긴 블록을 다수의 노드에게 검증 받은 것처럼 하여 타겟노드에 전파하여 이중지불을 발생하게 하는 공격을 말합니다.
IP주소와 노드 아이디를 기억하여 하나의 주소에서 여러 개의 키를 사용 하지 못하게 해야하만 가능합니다. 또한 내역을 전송 받을 시 인근 특정 노드와 연결(협력)하여 단독으로 처리하지 않도록 방지하여야 합니다.
마지막으로 시간을 이용한 공격시에는 노드의 서버 시간 동기화를 주기적으로 확인해야 합니다.
Nothing at Stake Attack란?
지분증명에서 사용되는 이중지불공격의 일종으로 일명 "손해보지 않는 공격" 이라는 뜻을 가지고 있습니다.
공격자가 이중지불을 발생시키기 위해 만든 기존 블록 외 새 블록을 추가로 전파하게 되면 포크가 발생하게 됩니다. 이때 블록 중 정상적인 블록을 인정받기 위한 투표를 실시하게 되고 두가지 중 하나만 인정 받아도 정상적인 거래가 성립됩니다.
즉, 약간의 팬딩(거래 대기)을 이용하여 두가지의 트랜젝션(거래)을 발생시켜 그 중 하나만 인정받아도 이익이 되는 상황을 말합니다.
쉽게 말해 A에 사용되는 거래를 위해 트랜잭션을 실행하고 팬딩이 시작되면 거래가 완료되기 전에 다른 거래를 B에게 거래를 신청합니다. 그런 경우 실제 거래가 두가지가 신청되고 둘 중 하나만 인정받아도 실제 거래가 성립되게 됩니다.
Nothing at Stake Attack에는 "Long Range Attack"과 "Short Range Attack"이 존재합니다.
Long Range Attack이란?
+ 포크된 상태에서 올바른 블록을 검증하기 위해 투표를 할 경우 많은 지분을 가지고 있는
노드가 거짓 블록을 옮바른 블록인 것 처럼 계속해서 체인에 연결되도록 조작하여
올바른 블록을 검증한 노드들에게 손해를 보게 하는 공격입니다.
Short Range Attack이란?
+ 포크된 상태에서 지분을 많이 가지고 있는 공격자의 결정에 의해 둘 중 하나의 블록만
인정받게 되기 때문에 지분이 상대적을 낮은 정상적인 노드들은 어느쪽이 올바른
블록인지를 알 수 없어 두 곳 모두 검증하지 않으면 손해를 보게 되는 상황을 말합니다.
리플레이 어택(Replay Attack)이란?
특정 블록체인이 하드포크(별도의 체인)되면서 발생되는 이중지불 공격의 일종입니다.
하드포크가 발생될 경우 동일한 거래내역이 분할된 다른 블록체인에도 존재하게 되어 두 체인에 동일 거래가 이루어지는 문제를 말합니다.
이를 방지하기 위해 원본 거래내역에 리플레이 방지 코드를 삽입하여 이중지불 문제를 해결하게 됩니다.
레이스 어택(Race Attack)이란?
일종의 이중지불 공격으로 동일한 거래사항을 2번 이상 각각 다른 곳으로 거래를 연달아 신청 후 트랜잭션 전파 되는 과정에서 충돌이 발생하여 하나의 거래는 성공하고, 나머지 거래는 취소되어 되돌아오는 구조적 문제를 이용한 공격입니다.
즉, 동일한 거래를 하나는 A와 B에게 연달아 전송하지만 해당 블록체인 시스템의 트랜잭션 처리 결함으로 A의 거래는 승인이되고, B의 거래는 취소되어 되돌아오게 되어 한번에 두가지의 거래가 승인되는 문제를 말합니다.
그라인딩 어택(Grinding Attack)이란?
PoS방식은 특정 기준에 부합할 경우 블록을 생성할 권한을 얻게 되는데 특히 지분이 많을 수록 블록을 생성할 권한 얻을 수 있는 확률이 높아지게 됩니다.
블록을 생성할 확률을 높이기 위해 변수를 미리 계산하여 블록을 생성할 확률을 얻을 때까지 전송내역을 누락시킵니다.
그런 후 예측한 근거를 통해 지분(코인)을 사전에 확보여 블록을 생성할 권한을 높이는 방법을 말합니다.
즉, PoS검증방식에서 블록을 생성할 권한을 얻기 위해 사용되는 공격입니다.
이를 방지하기 위해서는 코인토싱(Coin Tossing) 프로토콜을 사용하게 됩니다. (에이다가 이 방식을 사용하고 있습니다.)
뇌물수수 공격(Bribery Attack)이란?
노물수수 공격은 51% 공격의 일종으로 공격자는 블록체인 채굴권을 가지고 있는 자에게 뇌물을 주어 채굴권(블록생성)을 획득하게 되고 이를 통해 거짓 블록을 생성하여 정상적인 채굴자에게 피해를 주는 공격을 말합니다.
즉, 뇌물을 이용하여 다수의 블록생성의 권한을 획득 후 51%의 넘는 채굴권을 통해 공격자 의지대로 거짓 블록을 생성하여 해당 블록체인 네트워크에 피해를 입히는 공격을 말합니다.
이기적인 채굴(Selfish Mining)이란?
채굴한 블록결과를 다른 노드에게 공개하지 않고 일정기간 혼자만 알고 있다가 주변 노드에게 전파하는 행위를 말합니다.
이런 경우 다른 경쟁자가 채굴에 성공했다 하더라도 먼저 생성된 블록이 인정되게 되기 때문에 정상 채굴자들의 전력을 낭비하여 전체 블록체인 네트워크의 채산성을 방해하는 행위를 말합니다.
따라서 블록체인 네트워크의 정상적인 운영을 방해하는 악의적인 행위로 볼 수 있습니다.
감사합니다.