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

"롱레인지 공격"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글 (Asadal님이 롱레인지 어택 문서를 롱레인지 공격 문서로 이동했습니다)
(위험성)
(태그: 모바일 편집, 모바일 웹 편집)
 
(사용자 4명의 중간 판 7개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''롱레인지 어택'''(Long-Range Attack)은 지분 증명 방식(PoS)암호화폐에서 가능한 것으로, 오래된 블록부터 (최장으로는 제네시스 블록) 시작하는 새로운 체인을 메인체인으로 만들어 이중 지불을 하고자 하는 공격이다. 포크한 새로운 체인이 기존의 메인체인보다 길어져 메인체인으로 인정되면 해당 롱 레인지 어택은 성공한 것이다. <ref> 〈[https://kr.thenodist.com/words/16058 롱 레인지 공격(Long-Range Attack) ]〉, 《The Nodist》 </ref>
+
'''롱레인지 공격'''(Long-Range Attack)은 [[지분증명]](PoS) 방식의 암호화폐에서 가능한 것으로, 오래된 블록부터 (최장으로는 제네시스 블록) 시작하는 새로운 체인을 메인체인으로 만들어 [[이중지불]]을 하고자 하는 공격이다. 포크한 새로운 체인이 기존의 메인체인보다 길어져 메인체인으로 인정되면 해당 롱레인지 공격은 성공한 것이다.<ref>〈[https://kr.thenodist.com/words/16058 롱 레인지 공격(Long-Range Attack) ]〉, 《더노디스트》</ref>
  
 
==개요==
 
==개요==
롱레인지 어택(Long-Range Attack): 먼 옛날의 블록부터, 최대로는 제네시스 블록(블록체인 최초 블록)부터 시작하는 새로운 체인을 메인체인으로 만들어 이중 지불을 하고자하는 공격이다. 이와 같은 공격은 지분 증명 방식일 경우 적용이 가능하다. 지분 증명의 특성상 새롭게 블록을 계산해 이어 붙이는 것은 어려운 일이 아니므로, 소규모의 지분만 가지고도 평균 블록 생성 속도보다 빠르게 이어 붙일 수 있다. 포크한 체인이 메인체인보다 길어져 메인체인으로 인정되면, 롱레인지 어택은 성공한다. <ref> keepit, 〈[https://steemit.com/coinkorea/@keepit/1mc2k-keep-t KEEP!T 블록체인 상식사전: 블록체인 입문을 위한, 엄선된 필수 용어사전(네트워크 어택, 보안 프로토콜) ]〉, 《Steemit》, 2018-02-20 </ref>
+
롱레인지 공격(Long-Range Attack) : 먼 옛날의 블록부터, 최대로는 제네시스 블록(블록체인 최초 블록)부터 시작하는 새로운 체인을 메인체인으로 만들어 이중 지불을 하고자하는 공격이다. 이와 같은 공격은 [[지분증명]] 방식일 경우 적용이 가능하다. 지분 증명의 특성상 새롭게 블록을 계산해 이어 붙이는 것은 어려운 일이 아니므로, 소규모의 지분만 가지고도 평균 블록 생성 속도보다 빠르게 이어 붙일 수 있다. 포크한 체인이 [[메인체인]]보다 길어져 메인체인으로 인정되면, 롱레인지 어택은 성공한다.<ref>keepit, 〈[https://steemit.com/coinkorea/@keepit/1mc2k-keep-t KEEP!T 블록체인 상식사전: 블록체인 입문을 위한, 엄선된 필수 용어사전(네트워크 어택, 보안 프로토콜)]〉, 《스팀잇》, 2018-02-20</ref>
 
 
 
 
  
 +
==위험성==
 +
롱레인지 공격은 지분이 많은 노드가 거짓인 체인도 올바른 체인과 동일하게 검증한 것으로 승인(투표)하여 블록에 새로 참여한 노드가 어느 것이 정당한지 알 수 없도록 하는 것이다. 새로 참여하여 검증하는 노드가 거짓인 체인을 검증하여 승인(투표)할 경우 제대로 된 체인을 승인(투표)한 사람들은 손해를 안게 되는 것이다.
  
 +
51%의 공격과 같이 이더리움 블록체인에 대한 "장거리 공격"에서, 부착자는 원장을 자신에게 유리하게 "재 작성"하는 더 긴 체인을 만들 것이다. 그러나 공격자는 몇 블록 만 공격을 시작하는 대신 네트워크에 큰 영향을 미쳤던 수만 블록의 블록으로 돌아가서 블록을 단조하기 시작한다. 주쇄의 경우, 많은 양의 에테르를 보유하고 사슬을 인수한다. 메인 체인을 추월하기 위해 다른 트랜잭션과 블록이 포함 된 지점을 사용한 공격을 "대체 이력"또는 "이력 개정"공격이라고 한다.
  
 +
[[51% 공격]]은 기원 블록 직후에 모든 코인의 1%를 보유하고 자신의 체인을 비밀리에 시작하여 합의 체인보다 길게 만든 공격자부터 시작할 수 있다. 자신의 체인을 시작한다. 몇 년 동안 시뮬레이션을 가속화하고 허위 체인을 만드는 데 필요한 시간은 불과 몇 분이다. 이 "비용없는 시뮬레이션"과 약한 주관성과 같은 기타 PoS 취약점은 PoW에 비해 PoS에 대한 장거리 공격이 잠재적으로 더 위험하다.
  
 +
[[캐스퍼]]는 [[슬래셔]](Slasher)와 같은 프로토콜을 제공하여 예를 들어 클라이언트가 자신보다 훨씬 앞선 타임 스탬프를 가진 체인을 거부할 수 있도록 모든 블록의 [[타임스탬프]]를 통해 장거리 공격을 방지한다.<ref>〈[https://ethstaking.io/guide-to-ethereum-proof-of-stake-and-casper/casper-long-range-attack/ Casper Long Range Attack]〉, 《ETH STAKING》</ref>
  
 +
==유형==
 +
===단순함===
 +
* 정상적인 PoS 프로토콜 주기에서 모든 유효성 검사기는 블록의 유효성을 검사할 수 있다.
 +
* Malory는 장거리 공격을 수행하기로 결정하고 블록체인의 대체 지점을 만든다.
 +
* Malory는 기원 블록으로 돌아가 블록체인을 포크하고 지점을 만들기 시작한다.
 +
* 유효성 검사기 정보는 Genesis 블록 내에 있으므로 Malory는 메인 체인에서보다 블록을 더 빨리 생성 할 수 없다.
 +
* Malory는 같은 비율로 블록을 생산한다.
 +
* 모든 조건에서 Malory가 지점을 발전시키고 메인 체인을 추월하는 유일한 방법은 미리 블록을 생성하는 것이다.
 +
* Malory는 타임 스탬프를 위조해야하며, 해당 지점에서 유일하게 적극적인 이해 관계자이므로 그렇게 할 수 있다.
 +
* 노드가 타임 스탬프를 고려하지 않는 구현에서는 두 분기 모두 유효하며 노드는 Malory의 트릭을 발견할 수 없다.<ref name="공격"> Evangelos Deirmentzoglou, 〈[https://blog.positive.com/rewriting-history-a-brief-introduction-to-long-range-attacks-54e473acdba9 Rewriting History: A Brief Introduction to Long Range Attacks]〉, 《Positive 블로그》, 2018-05-31</ref>
  
 +
===후 부패===
 +
이 공격에는 두 가지 경우가 있다. 사용자를 해킹하고 개인키를 훔친다. 그 사람이 자신에게 공격에 합류를 한다.
 +
* 타임 스탬프 단조가 더 이상 불가능하다고 가정하면 Malory는 이러한 유형의 공격을 성공적으로 수행하려면 더 많은 것이 필요하다는 것을 이해한다.
 +
* 메인체인과 같은 시간 프레임에서 더 많은 수의 민트 블록을 달성해야 한다. 블록을 생상할 확률이 고정되어 있기 때문에 즉흥적으로 해야 한다.
 +
* 유효성 검사 기기가 정적이면 불공평하다. 지분증명 시스템은 무언가로 시작해야 하며 정작 설정이 있어야 하지만 결국 시스템 검사기의 공정성이 회전해야 한다. 유효성 검사기는 폐기할 수 있는 옵션이 있어야 하며, 시스템은 특정 조건에서 회전 또는 제거해야 한다. 예를 들면 어떤 사람은 10.000 블록 후에 은퇴하기로 결정한다. 자신의 stake를 제거하고 현금을 버리고 나간다. 검증인은 개인 키와 관련된 보안 모범 사례를 사용했다. 그 사람은 더 이상 플랫폼에 대한 지분을 소유하지 않으므로 개인 키의 보안은 우선 순위가 아니다.<ref name="공격"></ref>
  
 +
===스테이크 블리딩===
 +
Malory는 다시 한 번 블록체인에 대해 장거리 공격을 수행하기로 결정했으며 이번에는 스테이크 출혈(Stake Bleeding) 공격을 시도한다. 이전 시나리오와 동일한 설정이 있다. Malory는 메인 체인의 유효성 검사기이며 [[제네시스 블록]]에서 자체 분기를 시작한다. 브랜치가 발생할 때 [[슬롯리더]]로 선출될 확률은 블록체인의 모든 브랜치에서 동일하다. 유효성 검사기에 대한 정보는 제네시스 블록 내부에 있다. Malory는 지점을 숨기고 메인 체인을 능가하기 전까지는 게시하지 않는다. 이번에 Malory는 공격을 수행 할 가능성을 높이기 위해 메인 체인을 멈출 시작한다. Malory의 전체 스테이크 비율에 따라 Liveness Denial 공격이 발생할 수 있다. Malory가 메인체인에서 슬롯리더로 선출될 때마다 그녀는 자신의 차례를 건너 뛰고 자신의 위치를 ​​잃는다. 그렇다고 다른 유효성 검사자가 대신 해당 슬롯 / 에포크에 대해 새로운 블록이 블록체인에 추가되지 않는다는 것을 의미하지는 않는다. 이것은 Malory의 정교한 계획으로 블록체인을 정지시키는 데 사용된다. 결과적으로 Malory는 시스템에서 보상을 받지 못하고 지분이 점차 감소한다. 다른 모든 유효성 검사기는 블록을 게시하고 블록 보상 / 거래 수수료를 받는다. 이 시나리오에서는 유효성 검사기 보상이 위험하다고 가정한다. 반면에, Malory는 자체 지점에서 유일한 유효성 검사기 게시 블록이 될 것이며 기회가 있을 때마다 블록을 게시하게 한다. 이 시나리오에서 Malory는 가능한 모든 방법으로 지분을 늘리려고 한다. 추가 단계로서, 그녀는 메인 체인에서 거래를 복사하여 자신의 지점에도 게시한다. 이것은 그녀가 받을 거래 수수료의 수를 최대화하고 이를 사용하여 지분을 늘리기 위해 수행한다. 이 전략에 따라 대체 체인에서 가능한 한 많은 블록을 게시하면서 메인체인을 정지시키면 Malory는 결국 자신의 지사 지분을 대부분 확보하고 메인체인보다 빠르게 확장되기 시작한다. 지점이 메인체인을 능가하면 마지막 거래를 한 다음 다른 검증자에게 지분을 재분배한 다음 지점을 게시한다. 이 시나리오는 이전 시나리오보다 훨씬 복잡하다. Liveness Denial로 메인체인을 멈추고 메인체인에서 트랜잭션을 복사하는 두 가지 새로운 개념이 도입되었다.
 +
이러한 종류의 공격은 수행하는 데 많은 블록체인 시간이 필요하다고 명시하는 것이 중요하다. 이 연구 보고서에 따르면, 이 공격을 성공적으로 수행하려면 지분이 30% 인 공격자에 대한 약 6년 분량의 블록체인 기록이 필요했다. (비용없는 시뮬레이션을 사용하면 블록체인 기록이 많은 지점을 만드는 것이 쉽고 빠르다.) 무빙 체크 포인트를 사용하여 스테이크 출혈을 방지할 수 있다. Plenitude Rule을 사용하여 악의적인 분기를 식별할 수도 있다.<ref name="공격"></ref>
  
 +
==롱레인지 공격이 존재하는 주된 이유==
 +
==약한 주관성==
 +
이 용어는 블록체인 네트워크의 새 노드와 오프라인 상태에서 상당한 시간이 지난 후 온라인 상태로 전환되는 노드에 영향을 주는 문제를 설명하는 데 사용된다. 온라인 노드는 약한 주관성에 영향을 받지 않는다. 새 노드가 네트워크에 추가되면 항상 생성 블록이 제공된다. 모든 노드가 첫 번째 노드로 허용하는 유일한 블록이다. 기원 블록과 함께 노드에는 현재 블록체인의 현재 게시된 모든 분기가 제공된다. 불행히도, 노드는 어느 브랜치가 메인체인인지를 즉시 알 수 없다.
 +
장기간(예 : 몇 개월) 오프라인 상태인 노드에도 동일하게 적용된다. 어느 시점에서, 이 노드들은 어느 브랜치가 메인체인인지 알았지만 그 시간이 지나면 더 이상 오프라인이 아니다. 온라인 노드는 블록체인을 실시간으로 따르고 모니터링한다. 지점이 합법적으로 메인체인이 되지 않는 한, 메인체인으로 다른 브랜치를 수락하도록 속을 수 없다.<ref name="공격"></ref>
  
 +
==특징==
 +
롱레인지 공격은 약한 주관성 개념과 함께  스테이크 알고리즘 증명을 신뢰할 수 없는 일반적인 이유이다. 아이디어는 특정 시점에서 공격자가 토큰 체인의 상당한 지분과 함께 블록체인의 기존 상태를 사용하여 실제 체인과 구별할 수 없는 체인을 만들 수 있다. 그런 다음 공격자는 실제 체인 대신 악의적인 체인을 사용하도록 사용자를 속인다. 기본적으로 다음과 같이 작동한다. 기존의 51 % 공격에서는 100 비트 코인을 새로운 새 계정에 넣은 다음 100 비트 코인을 가맹점에 보내 즉석 배송 디지털 상품 (예 : 리테 코인)과 교환했다. 나는 배달을 기다린다 (예 : 6 번 확인 후).하지만 즉시 트랜잭션이 100 비트 코인을 보내기 전에 한 블록에서 시작하여 새로운 블록체인 작업을 시작하고 대신 비트 코인을 자신에게 다시 보내는 트랜잭션을 시작한다. 그런 다음 결합 된 나머지 네트워크가 메인 체인에 넣는 것보다 더 많은 마이닝 파워를 포크에 넣고 결국 내 포크가 메인 체인을 넘어 메인 체인이되므로 결국에는 비트 코인과 라이트 코인이 있다. 롱레인지 공격에서 포크 6 블록을 다시 시작하는 대신 포크 60000 블록을 다시 시작한다.<ref>Vitalik Buterin, 〈[https://blog.ethereum.org/2014/05/15/long-range-attacks-the-serious-problem-with-adaptive-proof-of-work/ 장거리 공격 : 적응형 작업증명의 심각한 문제]〉, 《이더리움 블로그》, 2014-05-15</ref>
  
 +
==사건==
 +
"Nothing at Stake" 공격에 대한 기사에서 이전에 관찰한 것처럼 이 단순한 공격은 실제로 관찰된 적이 없다. 이것은 당연히 위험에 처한 것이기 때문에 이상한 일이다.
  
 +
이 주제에 관한 기사에서 영감을 얻은 Bob은 [[엔엑스티]](NXT)에 대한 롱레인지 공격을 시작하기로 결정한다. Bob은 이 높이까지 블록체인을 다운로드하여 주어진 [[블록높이]]에서 체인 상태를 쉽게 재현할 수 있다. 이제 블록높이에서 Nxt 토큰에 상당한 지분을 가져와 실제 체인보다 더 어려운 체인을 만들어야 한다.
  
 +
Bob이 큰 지분 보유자이고 지분의 50% 이상을 보유한 경우, 보통 [[51% 공격]]으로 Nxt를 공격 할 수 있다. 따라서 Bob은 현재 중요한 Nxt 잔액이 없다고 가정한다.
  
 +
다행히 2013년 Nxt가 다시 배포되었을 때 Bob에게는 72명의 운이 좋은 지분 보유자에게만 배포되었다. Bob이 해야 할 일은 이 사람들을 추적하고 계정 암호를 얻는 것이다. 실제로 Bob은 모든 항목을 추적할 필요는 없다. 그는 제네시스 블록 시점의 단조 지분보다 지분을 20 % 정도만 높이면 된다. 큰 제네시스 스테이크 보유자 중 5명을 찾거나 가져가면 암호를 얻는 것으로 충분하다. 이 지분 소유자의 대부분은 이미 자신의 자금을 다른 계좌로 옮겼거나 판매했기 때문에 Bob에게 이전 계좌 비밀번호 문구를 제공하면 위험이 거의 없다. 즉, Bob은 이러한 계정에 강제로 진입할 수 없다. Bob이 Genesis 암호를 초과하는 데 필요한 암호를 얻지 못하면이 전체 공격이 바로 끝날 수 있다.
  
 +
Nxt 배포는 비교적 간단한 경우이며 대부분의 스테이크 토큰 증거는 Genesis 블록에서 더 많은 계정으로 배포되었다. 예를 들어 Ardor는 2016 년에 10 만 명 이상의 Nxt 보유자에게 배포되었다. 그래도, 나는 Genesis 블록 출시 당시의 단조 능력보다 큰 블록체인 토큰에 대한 지분을 얻는 것이 잘 자금을 지원할 수 있다고 가정한다. 스테이크 동전 증거에 대한 Bob과 같은 강력한 공격자.
  
 +
Bob은 Nxt 소프트웨어를 설치한 후 누구나 사용할 수 있는 [[제네시스 블록]]과 기원 블록 시점의 지분의 20%를 갖추고 자신의 악성 체인을 구축하기 시작한다. 아무 일도 일어나지 않는다. 다른 모든 Nxt 노드는 자신의 노드와 이미 Bob의 포크를 사용하는 다른 노드를 차단한다. 새 사용자는 Bob의 노드에 연결하지 않는다.
  
 +
Nxt 소프트웨어는 장거리 공격에 대한 몇 가지 간단한 보호 계층을 구현하는 것으로 보인다.
  
 +
소프트웨어 자체는 릴리스 당시 올바른 포크에있는 것으로 알려진 부트 스트랩 노드 목록과 함께 배포된다.
 +
Nxt 소프트웨어는 주어진 블록 높이에서 블록체인 상태의 체크 포인트를 구현한다. 이 정확한 상태를 재현하지 않는 포크는 거부된다.
 +
트랜잭션은 블록체인에 제출될 때 기존 블록에 대한 포인터를 사용한다. 이 포인터는 여러 포크가 다른 블록 히스토리를 가진 동일한 트랜잭션을 포함하지 못하게 한다.
 +
노드는 체인이 720 블록 이상 다른 다른 포크로 절대 전환되지 않는다. 롤링 체크 포인트로 생각할 수 있다.
 +
앞으로 살펴 보 겠지만 이러한 기능 중 하나만으로도 완벽한 보호 기능을 제공 할 수는 없지만 장거리 공격을 구현하기가 매우 어렵다.
  
 +
이전 기사에서는 Bob이 이러한 보호 기능을 구현하지 않는 Nxt의 새 버전을 만드는 것이 매우 어려울 것이라고 설명했다. 그가 그렇게해도 다른 사용자는 자신의 수정 된 버전의 소프트웨어를 사용하지 않을 것이다. 따라서 Bob은 자신의 노드에서 수정 된 버전을 사용할 수 있지만 Nxt에 대한 공격을 효과적으로 구현하려면 수정없이 공식 Nxt 소프트웨어를 사용하여 사용자를 속이는 것이 필요하다.
  
 +
약간의 노력으로 Bob은 보호 # 1을 우회하고 노드를 제품과 함께 제공된 [[부트스트랩]] 노드 목록으로 가져올 수 있다. 그는 일부 중앙 노드를 설정하고 일부 노드가 부트 스트랩 목록에이를 때까지 잠시 동안 정규 체인을 따라야한다. 공격이 시작되면 다른 노드가 자신의 노드를 블랙리스트에 올리지 못하게하는 것이 훨씬 더 어려울 것이다. 아마도 그는 두 개의 포크, 하나는 정직한 포크는 자신의 노드에 연결된 기존 노드를 보여주고 다른 하나는 새로운 사용자를 보여줄 악의적 인 포크를 유지할 수 있다. 이를 구현하는 것은 매우 까다 롭지 만 여전히 가능하다.
  
 +
이런 식으로 Bob은 일부 새로운 사용자를 악의적 인 포크로 유인 할 수 있다. 다음으로 Bob은 내장 된 체크 포인트 인 보호 # 2를 우회해야 한다. 새로운 사용자가 자신의 소프트웨어 버전을 사용하도록 설득하지 않으면 불가능하다. 이 문제를 해결하기 위해 Bob은 최신 내장 체크 포인트 이후에 포크를 시작할 수 있다. 최신 체크 포인트가 너무 최근이 아니라고 가정하면 위의 일부 기술을 사용하여 여전히 가능할 수 있다.
  
 +
Bob의 포크의 또 다른 약점은 보호 #3으로 인해 기존 트랜잭션을 수락할 수 없다는 것이다. 즉, 포크 내역은 실제 체인과 크게 다르며 블록 탐색기를 사용하여 쉽게 탐지할 수 있다.
  
 +
마지막으로 Bob은 롤링 체크 포인트인 보호 #4로 인해 기존 노드가 자신의 악성 포크로 이동하도록 속일 수 없다.
  
 +
밥이 초래할 수있는 최악의 피해는 큰 거래소 나 회사에서 포크를 사용하도록 설득 할 수있는 경우다. 그러나 거래소와 기업은 잘 알려진 블록 익스플로러 (fork explorer)에 대해 자신의 포크를 점검함으로써이를 방지 할 수 있다.
  
 +
밥이 720번도 채 되지 않는 범위에서 장거리 공격을 수행하여 롤링 체크 포인트인 보호 #4를 무시할 수 있는 것은 어느 것일까?
  
 +
Bob이 [[제네시스 블록]] 또는 아주 오래된 [[블록높이]]에 대한 공격의 경우 Bob에게 오래된 계정 암호 문구를 표시하여 크게 잃지 않는다. 최근 블록에 대한 단거리 공격의 문제점은 Bob이 아무도 지불하지 않고 현재 암호 문구를 포기할 것을 기대할 수 없다는 것이다. 단거리 버전의 장거리 공격을 만들려면 Bob이 현재 단조 스테이크보다 더 많은 토큰을 구매해야하지만, 그렇게하면 간단한 51 % 공격 만 구현할 수 있다. <ref> Lior Yaffe, 〈[https://hackernoon.com/investigating-long-range-attack-2bce0887a2da Investigating Long Range Attack ]〉, 《HACKERNOON》, 2018-12-08 </ref>
  
 
{{각주}}
 
{{각주}}
  
 
==참고자료==
 
==참고자료==
* 〈[https://kr.thenodist.com/words/16058 롱 레인지 공격(Long-Range Attack) ]〉, 《The Nodist》
+
* 〈[https://kr.thenodist.com/words/16058 롱 레인지 공격(Long-Range Attack) ]〉, 《더노디스트》
* keepit, 〈[https://steemit.com/coinkorea/@keepit/1mc2k-keep-t KEEP!T 블록체인 상식사전: 블록체인 입문을 위한, 엄선된 필수 용어사전(네트워크 어택, 보안 프로토콜) ]〉, 《Steemit》, 2018-02-20
+
* keepit, 〈[https://steemit.com/coinkorea/@keepit/1mc2k-keep-t KEEP!T 블록체인 상식사전: 블록체인 입문을 위한, 엄선된 필수 용어사전(네트워크 어택, 보안 프로토콜)]〉, 《스팀잇》, 2018-02-20
 +
* 〈[https://ethstaking.io/guide-to-ethereum-proof-of-stake-and-casper/casper-long-range-attack/ Casper Long Range Attack]〉, 《ETH STAKING》
 +
* Evangelos Deirmentzoglou, 〈[https://blog.positive.com/rewriting-history-a-brief-introduction-to-long-range-attacks-54e473acdba9 Rewriting History: A Brief Introduction to Long Range Attacks ]〉, 《Positive 블로그》 2018-05-31
 +
* Lior Yaffe, 〈[https://hackernoon.com/investigating-long-range-attack-2bce0887a2da Investigating Long Range Attack ]〉, 《HACKERNOON》, 2018-12-08
 +
* Vitalik Buterin, 〈[https://blog.ethereum.org/2014/05/15/long-range-attacks-the-serious-problem-with-adaptive-proof-of-work/ 장거리 공격 : 적응 형 작업 증명의 심각한 문제 ]〉, 《이더리움 블로그》, 2014-05-15
  
==같이 보기==
+
== 같이 보기 ==
* [[체인]]
+
* [[지분증명]]
  
 
{{보안|검토 필요}}
 
{{보안|검토 필요}}

2022년 11월 27일 (일) 14:13 기준 최신판

롱레인지 공격(Long-Range Attack)은 지분증명(PoS) 방식의 암호화폐에서 가능한 것으로, 오래된 블록부터 (최장으로는 제네시스 블록) 시작하는 새로운 체인을 메인체인으로 만들어 이중지불을 하고자 하는 공격이다. 포크한 새로운 체인이 기존의 메인체인보다 길어져 메인체인으로 인정되면 해당 롱레인지 공격은 성공한 것이다.[1]

개요[편집]

롱레인지 공격(Long-Range Attack) : 먼 옛날의 블록부터, 최대로는 제네시스 블록(블록체인 최초 블록)부터 시작하는 새로운 체인을 메인체인으로 만들어 이중 지불을 하고자하는 공격이다. 이와 같은 공격은 지분증명 방식일 경우 적용이 가능하다. 지분 증명의 특성상 새롭게 블록을 계산해 이어 붙이는 것은 어려운 일이 아니므로, 소규모의 지분만 가지고도 평균 블록 생성 속도보다 빠르게 이어 붙일 수 있다. 포크한 체인이 메인체인보다 길어져 메인체인으로 인정되면, 롱레인지 어택은 성공한다.[2]

위험성[편집]

롱레인지 공격은 지분이 많은 노드가 거짓인 체인도 올바른 체인과 동일하게 검증한 것으로 승인(투표)하여 블록에 새로 참여한 노드가 어느 것이 정당한지 알 수 없도록 하는 것이다. 새로 참여하여 검증하는 노드가 거짓인 체인을 검증하여 승인(투표)할 경우 제대로 된 체인을 승인(투표)한 사람들은 손해를 안게 되는 것이다.

51%의 공격과 같이 이더리움 블록체인에 대한 "장거리 공격"에서, 부착자는 원장을 자신에게 유리하게 "재 작성"하는 더 긴 체인을 만들 것이다. 그러나 공격자는 몇 블록 만 공격을 시작하는 대신 네트워크에 큰 영향을 미쳤던 수만 블록의 블록으로 돌아가서 블록을 단조하기 시작한다. 주쇄의 경우, 많은 양의 에테르를 보유하고 사슬을 인수한다. 메인 체인을 추월하기 위해 다른 트랜잭션과 블록이 포함 된 지점을 사용한 공격을 "대체 이력"또는 "이력 개정"공격이라고 한다.

51% 공격은 기원 블록 직후에 모든 코인의 1%를 보유하고 자신의 체인을 비밀리에 시작하여 합의 체인보다 길게 만든 공격자부터 시작할 수 있다. 자신의 체인을 시작한다. 몇 년 동안 시뮬레이션을 가속화하고 허위 체인을 만드는 데 필요한 시간은 불과 몇 분이다. 이 "비용없는 시뮬레이션"과 약한 주관성과 같은 기타 PoS 취약점은 PoW에 비해 PoS에 대한 장거리 공격이 잠재적으로 더 위험하다.

캐스퍼슬래셔(Slasher)와 같은 프로토콜을 제공하여 예를 들어 클라이언트가 자신보다 훨씬 앞선 타임 스탬프를 가진 체인을 거부할 수 있도록 모든 블록의 타임스탬프를 통해 장거리 공격을 방지한다.[3]

유형[편집]

단순함[편집]

  • 정상적인 PoS 프로토콜 주기에서 모든 유효성 검사기는 블록의 유효성을 검사할 수 있다.
  • Malory는 장거리 공격을 수행하기로 결정하고 블록체인의 대체 지점을 만든다.
  • Malory는 기원 블록으로 돌아가 블록체인을 포크하고 지점을 만들기 시작한다.
  • 유효성 검사기 정보는 Genesis 블록 내에 있으므로 Malory는 메인 체인에서보다 블록을 더 빨리 생성 할 수 없다.
  • Malory는 같은 비율로 블록을 생산한다.
  • 모든 조건에서 Malory가 지점을 발전시키고 메인 체인을 추월하는 유일한 방법은 미리 블록을 생성하는 것이다.
  • Malory는 타임 스탬프를 위조해야하며, 해당 지점에서 유일하게 적극적인 이해 관계자이므로 그렇게 할 수 있다.
  • 노드가 타임 스탬프를 고려하지 않는 구현에서는 두 분기 모두 유효하며 노드는 Malory의 트릭을 발견할 수 없다.[4]

후 부패[편집]

이 공격에는 두 가지 경우가 있다. 사용자를 해킹하고 개인키를 훔친다. 그 사람이 자신에게 공격에 합류를 한다.

  • 타임 스탬프 단조가 더 이상 불가능하다고 가정하면 Malory는 이러한 유형의 공격을 성공적으로 수행하려면 더 많은 것이 필요하다는 것을 이해한다.
  • 메인체인과 같은 시간 프레임에서 더 많은 수의 민트 블록을 달성해야 한다. 블록을 생상할 확률이 고정되어 있기 때문에 즉흥적으로 해야 한다.
  • 유효성 검사 기기가 정적이면 불공평하다. 지분증명 시스템은 무언가로 시작해야 하며 정작 설정이 있어야 하지만 결국 시스템 검사기의 공정성이 회전해야 한다. 유효성 검사기는 폐기할 수 있는 옵션이 있어야 하며, 시스템은 특정 조건에서 회전 또는 제거해야 한다. 예를 들면 어떤 사람은 10.000 블록 후에 은퇴하기로 결정한다. 자신의 stake를 제거하고 현금을 버리고 나간다. 검증인은 개인 키와 관련된 보안 모범 사례를 사용했다. 그 사람은 더 이상 플랫폼에 대한 지분을 소유하지 않으므로 개인 키의 보안은 우선 순위가 아니다.[4]

스테이크 블리딩[편집]

Malory는 다시 한 번 블록체인에 대해 장거리 공격을 수행하기로 결정했으며 이번에는 스테이크 출혈(Stake Bleeding) 공격을 시도한다. 이전 시나리오와 동일한 설정이 있다. Malory는 메인 체인의 유효성 검사기이며 제네시스 블록에서 자체 분기를 시작한다. 브랜치가 발생할 때 슬롯리더로 선출될 확률은 블록체인의 모든 브랜치에서 동일하다. 유효성 검사기에 대한 정보는 제네시스 블록 내부에 있다. Malory는 지점을 숨기고 메인 체인을 능가하기 전까지는 게시하지 않는다. 이번에 Malory는 공격을 수행 할 가능성을 높이기 위해 메인 체인을 멈출 시작한다. Malory의 전체 스테이크 비율에 따라 Liveness Denial 공격이 발생할 수 있다. Malory가 메인체인에서 슬롯리더로 선출될 때마다 그녀는 자신의 차례를 건너 뛰고 자신의 위치를 ​​잃는다. 그렇다고 다른 유효성 검사자가 대신 해당 슬롯 / 에포크에 대해 새로운 블록이 블록체인에 추가되지 않는다는 것을 의미하지는 않는다. 이것은 Malory의 정교한 계획으로 블록체인을 정지시키는 데 사용된다. 결과적으로 Malory는 시스템에서 보상을 받지 못하고 지분이 점차 감소한다. 다른 모든 유효성 검사기는 블록을 게시하고 블록 보상 / 거래 수수료를 받는다. 이 시나리오에서는 유효성 검사기 보상이 위험하다고 가정한다. 반면에, Malory는 자체 지점에서 유일한 유효성 검사기 게시 블록이 될 것이며 기회가 있을 때마다 블록을 게시하게 한다. 이 시나리오에서 Malory는 가능한 모든 방법으로 지분을 늘리려고 한다. 추가 단계로서, 그녀는 메인 체인에서 거래를 복사하여 자신의 지점에도 게시한다. 이것은 그녀가 받을 거래 수수료의 수를 최대화하고 이를 사용하여 지분을 늘리기 위해 수행한다. 이 전략에 따라 대체 체인에서 가능한 한 많은 블록을 게시하면서 메인체인을 정지시키면 Malory는 결국 자신의 지사 지분을 대부분 확보하고 메인체인보다 빠르게 확장되기 시작한다. 지점이 메인체인을 능가하면 마지막 거래를 한 다음 다른 검증자에게 지분을 재분배한 다음 지점을 게시한다. 이 시나리오는 이전 시나리오보다 훨씬 복잡하다. Liveness Denial로 메인체인을 멈추고 메인체인에서 트랜잭션을 복사하는 두 가지 새로운 개념이 도입되었다. 이러한 종류의 공격은 수행하는 데 많은 블록체인 시간이 필요하다고 명시하는 것이 중요하다. 이 연구 보고서에 따르면, 이 공격을 성공적으로 수행하려면 지분이 30% 인 공격자에 대한 약 6년 분량의 블록체인 기록이 필요했다. (비용없는 시뮬레이션을 사용하면 블록체인 기록이 많은 지점을 만드는 것이 쉽고 빠르다.) 무빙 체크 포인트를 사용하여 스테이크 출혈을 방지할 수 있다. Plenitude Rule을 사용하여 악의적인 분기를 식별할 수도 있다.[4]

롱레인지 공격이 존재하는 주된 이유[편집]

약한 주관성[편집]

이 용어는 블록체인 네트워크의 새 노드와 오프라인 상태에서 상당한 시간이 지난 후 온라인 상태로 전환되는 노드에 영향을 주는 문제를 설명하는 데 사용된다. 온라인 노드는 약한 주관성에 영향을 받지 않는다. 새 노드가 네트워크에 추가되면 항상 생성 블록이 제공된다. 모든 노드가 첫 번째 노드로 허용하는 유일한 블록이다. 기원 블록과 함께 노드에는 현재 블록체인의 현재 게시된 모든 분기가 제공된다. 불행히도, 노드는 어느 브랜치가 메인체인인지를 즉시 알 수 없다. 장기간(예 : 몇 개월) 오프라인 상태인 노드에도 동일하게 적용된다. 어느 시점에서, 이 노드들은 어느 브랜치가 메인체인인지 알았지만 그 시간이 지나면 더 이상 오프라인이 아니다. 온라인 노드는 블록체인을 실시간으로 따르고 모니터링한다. 지점이 합법적으로 메인체인이 되지 않는 한, 메인체인으로 다른 브랜치를 수락하도록 속을 수 없다.[4]

특징[편집]

롱레인지 공격은 약한 주관성 개념과 함께 스테이크 알고리즘 증명을 신뢰할 수 없는 일반적인 이유이다. 아이디어는 특정 시점에서 공격자가 토큰 체인의 상당한 지분과 함께 블록체인의 기존 상태를 사용하여 실제 체인과 구별할 수 없는 체인을 만들 수 있다. 그런 다음 공격자는 실제 체인 대신 악의적인 체인을 사용하도록 사용자를 속인다. 기본적으로 다음과 같이 작동한다. 기존의 51 % 공격에서는 100 비트 코인을 새로운 새 계정에 넣은 다음 100 비트 코인을 가맹점에 보내 즉석 배송 디지털 상품 (예 : 리테 코인)과 교환했다. 나는 배달을 기다린다 (예 : 6 번 확인 후).하지만 즉시 트랜잭션이 100 비트 코인을 보내기 전에 한 블록에서 시작하여 새로운 블록체인 작업을 시작하고 대신 비트 코인을 자신에게 다시 보내는 트랜잭션을 시작한다. 그런 다음 결합 된 나머지 네트워크가 메인 체인에 넣는 것보다 더 많은 마이닝 파워를 포크에 넣고 결국 내 포크가 메인 체인을 넘어 메인 체인이되므로 결국에는 비트 코인과 라이트 코인이 있다. 롱레인지 공격에서 포크 6 블록을 다시 시작하는 대신 포크 60000 블록을 다시 시작한다.[5]

사건[편집]

"Nothing at Stake" 공격에 대한 기사에서 이전에 관찰한 것처럼 이 단순한 공격은 실제로 관찰된 적이 없다. 이것은 당연히 위험에 처한 것이기 때문에 이상한 일이다.

이 주제에 관한 기사에서 영감을 얻은 Bob은 엔엑스티(NXT)에 대한 롱레인지 공격을 시작하기로 결정한다. Bob은 이 높이까지 블록체인을 다운로드하여 주어진 블록높이에서 체인 상태를 쉽게 재현할 수 있다. 이제 블록높이에서 Nxt 토큰에 상당한 지분을 가져와 실제 체인보다 더 어려운 체인을 만들어야 한다.

Bob이 큰 지분 보유자이고 지분의 50% 이상을 보유한 경우, 보통 51% 공격으로 Nxt를 공격 할 수 있다. 따라서 Bob은 현재 중요한 Nxt 잔액이 없다고 가정한다.

다행히 2013년 Nxt가 다시 배포되었을 때 Bob에게는 72명의 운이 좋은 지분 보유자에게만 배포되었다. Bob이 해야 할 일은 이 사람들을 추적하고 계정 암호를 얻는 것이다. 실제로 Bob은 모든 항목을 추적할 필요는 없다. 그는 제네시스 블록 시점의 단조 지분보다 지분을 20 % 정도만 높이면 된다. 큰 제네시스 스테이크 보유자 중 5명을 찾거나 가져가면 암호를 얻는 것으로 충분하다. 이 지분 소유자의 대부분은 이미 자신의 자금을 다른 계좌로 옮겼거나 판매했기 때문에 Bob에게 이전 계좌 비밀번호 문구를 제공하면 위험이 거의 없다. 즉, Bob은 이러한 계정에 강제로 진입할 수 없다. Bob이 Genesis 암호를 초과하는 데 필요한 암호를 얻지 못하면이 전체 공격이 바로 끝날 수 있다.

Nxt 배포는 비교적 간단한 경우이며 대부분의 스테이크 토큰 증거는 Genesis 블록에서 더 많은 계정으로 배포되었다. 예를 들어 Ardor는 2016 년에 10 만 명 이상의 Nxt 보유자에게 배포되었다. 그래도, 나는 Genesis 블록 출시 당시의 단조 능력보다 큰 블록체인 토큰에 대한 지분을 얻는 것이 잘 자금을 지원할 수 있다고 가정한다. 스테이크 동전 증거에 대한 Bob과 같은 강력한 공격자.

Bob은 Nxt 소프트웨어를 설치한 후 누구나 사용할 수 있는 제네시스 블록과 기원 블록 시점의 지분의 20%를 갖추고 자신의 악성 체인을 구축하기 시작한다. 아무 일도 일어나지 않는다. 다른 모든 Nxt 노드는 자신의 노드와 이미 Bob의 포크를 사용하는 다른 노드를 차단한다. 새 사용자는 Bob의 노드에 연결하지 않는다.

Nxt 소프트웨어는 장거리 공격에 대한 몇 가지 간단한 보호 계층을 구현하는 것으로 보인다.

소프트웨어 자체는 릴리스 당시 올바른 포크에있는 것으로 알려진 부트 스트랩 노드 목록과 함께 배포된다. Nxt 소프트웨어는 주어진 블록 높이에서 블록체인 상태의 체크 포인트를 구현한다. 이 정확한 상태를 재현하지 않는 포크는 거부된다. 트랜잭션은 블록체인에 제출될 때 기존 블록에 대한 포인터를 사용한다. 이 포인터는 여러 포크가 다른 블록 히스토리를 가진 동일한 트랜잭션을 포함하지 못하게 한다. 노드는 체인이 720 블록 이상 다른 다른 포크로 절대 전환되지 않는다. 롤링 체크 포인트로 생각할 수 있다. 앞으로 살펴 보 겠지만 이러한 기능 중 하나만으로도 완벽한 보호 기능을 제공 할 수는 없지만 장거리 공격을 구현하기가 매우 어렵다.

이전 기사에서는 Bob이 이러한 보호 기능을 구현하지 않는 Nxt의 새 버전을 만드는 것이 매우 어려울 것이라고 설명했다. 그가 그렇게해도 다른 사용자는 자신의 수정 된 버전의 소프트웨어를 사용하지 않을 것이다. 따라서 Bob은 자신의 노드에서 수정 된 버전을 사용할 수 있지만 Nxt에 대한 공격을 효과적으로 구현하려면 수정없이 공식 Nxt 소프트웨어를 사용하여 사용자를 속이는 것이 필요하다.

약간의 노력으로 Bob은 보호 # 1을 우회하고 노드를 제품과 함께 제공된 부트스트랩 노드 목록으로 가져올 수 있다. 그는 일부 중앙 노드를 설정하고 일부 노드가 부트 스트랩 목록에이를 때까지 잠시 동안 정규 체인을 따라야한다. 공격이 시작되면 다른 노드가 자신의 노드를 블랙리스트에 올리지 못하게하는 것이 훨씬 더 어려울 것이다. 아마도 그는 두 개의 포크, 하나는 정직한 포크는 자신의 노드에 연결된 기존 노드를 보여주고 다른 하나는 새로운 사용자를 보여줄 악의적 인 포크를 유지할 수 있다. 이를 구현하는 것은 매우 까다 롭지 만 여전히 가능하다.

이런 식으로 Bob은 일부 새로운 사용자를 악의적 인 포크로 유인 할 수 있다. 다음으로 Bob은 내장 된 체크 포인트 인 보호 # 2를 우회해야 한다. 새로운 사용자가 자신의 소프트웨어 버전을 사용하도록 설득하지 않으면 불가능하다. 이 문제를 해결하기 위해 Bob은 최신 내장 체크 포인트 이후에 포크를 시작할 수 있다. 최신 체크 포인트가 너무 최근이 아니라고 가정하면 위의 일부 기술을 사용하여 여전히 가능할 수 있다.

Bob의 포크의 또 다른 약점은 보호 #3으로 인해 기존 트랜잭션을 수락할 수 없다는 것이다. 즉, 포크 내역은 실제 체인과 크게 다르며 블록 탐색기를 사용하여 쉽게 탐지할 수 있다.

마지막으로 Bob은 롤링 체크 포인트인 보호 #4로 인해 기존 노드가 자신의 악성 포크로 이동하도록 속일 수 없다.

밥이 초래할 수있는 최악의 피해는 큰 거래소 나 회사에서 포크를 사용하도록 설득 할 수있는 경우다. 그러나 거래소와 기업은 잘 알려진 블록 익스플로러 (fork explorer)에 대해 자신의 포크를 점검함으로써이를 방지 할 수 있다.

밥이 720번도 채 되지 않는 범위에서 장거리 공격을 수행하여 롤링 체크 포인트인 보호 #4를 무시할 수 있는 것은 어느 것일까?

Bob이 제네시스 블록 또는 아주 오래된 블록높이에 대한 공격의 경우 Bob에게 오래된 계정 암호 문구를 표시하여 크게 잃지 않는다. 최근 블록에 대한 단거리 공격의 문제점은 Bob이 아무도 지불하지 않고 현재 암호 문구를 포기할 것을 기대할 수 없다는 것이다. 단거리 버전의 장거리 공격을 만들려면 Bob이 현재 단조 스테이크보다 더 많은 토큰을 구매해야하지만, 그렇게하면 간단한 51 % 공격 만 구현할 수 있다. [6]

각주[편집]

  1. 롱 레인지 공격(Long-Range Attack) 〉, 《더노디스트》
  2. keepit, 〈KEEP!T 블록체인 상식사전: 블록체인 입문을 위한, 엄선된 필수 용어사전(네트워크 어택, 보안 프로토콜)〉, 《스팀잇》, 2018-02-20
  3. Casper Long Range Attack〉, 《ETH STAKING》
  4. 4.0 4.1 4.2 4.3 Evangelos Deirmentzoglou, 〈Rewriting History: A Brief Introduction to Long Range Attacks〉, 《Positive 블로그》, 2018-05-31
  5. Vitalik Buterin, 〈장거리 공격 : 적응형 작업증명의 심각한 문제〉, 《이더리움 블로그》, 2014-05-15
  6. Lior Yaffe, 〈Investigating Long Range Attack 〉, 《HACKERNOON》, 2018-12-08

참고자료[편집]

같이 보기[편집]


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