블록체인의 보안을 위협하는 공격 중에서 'Long Range Attack'이라는 것이 있다는데 어떤 것인지 궁금해요.
블록체인의 보안을 위협하는 공격 중 Long Range Attack이라는 것이 있다는 것을 알게 되었는데요,
이 공격이 어떤 방식으로 이루어진다는 것인지 잘 모르겠어요.
pos 채굴에서 블록을 생성할 때 공격을 할 수 있다고 하는데 이해하기가 어려워요ㅠ
이러한 공격에 대해 이해하기 쉽게 설명을 해 주시면 좋겠습니당~ 답변 부탁드릴게요.
안녕하세요. 질문주신 Long Range Attack은 PoS가 가지고 있는 가장 큰 문제점인 한계비용이 전혀 없다는 것을 이용한 공격 기법 중 하나 입니다.
PoS를 기반으로 한 블록체인 네트워크에서 블록이 연결되다가 하나의 거래에서 서로다른 거래내용이 발생했을 경우를 생각해 보겠습니다. 이때 서로다른 거래내용이 발생된 상황이라 2개의 블록이 생성될 것입니다.
생성된 2개의 블록 중 검은색 블록은 정상블록이고 초록색 블록은 거짓 블록이라고 보시면 모든 노드들은 제한없이 여러 블록에 자신의 지분을 증명할 수 있으므로 Long Range Attack 공격이 가능하게 됩니다.
블록에 참여한 검증자가 어느블록이 진짜 정상적인 블록인지 알 방법이 없어서 지분을 많이 사들인 검증에 참여한 노드가 거짓인 블록체인에 합의를 해버릴 경우 정상적으로 거래를 한 사람은 모두 공격을 당할 수 있죠.
이러한 문제점으로 인해 이더리움 개발자들은 보증금과 벌금이라는 제도를 도입하여 이를 해결하려고 하고 있습니다. 검증자들이 블록을 증명할 때 보증금을 어느정도 걸어놓고 그 블록이 거짓인 것이 드라나면 보증금에서 벌금을 차감하는 방식으로 해결방안을 모색하고 있죠.
Long Range Attack이란 블록을 분기시킨 다음 그 길이를 원래의 메인 체인의 길이보다 길게 함으로써 블록체인의 정보를 위, 변조하여 공격 목적을 달성하려는 공격이라고 할 수 있습니다.
이런 Long Range Attack에 속하는 공격 방법 중 'POSTERIOR CORRUPTION'이라는 것이 있습니다. 이 공격 방법을 '사후 부패'로 번역하는 경우도 있지만 '사후 블록 변질 공격'이라고 하는 것은 어떨까 하는 생각을 해 봤습니다.
블록체인에서는 블록을 생성하기 위한 연산이 이루어질 때 동시에 블록이 생성될 수 있고 이 경우 51% 이상이 봤을 때 조금이라도 더 많은 정보를 블록에 담고 있는 블록이 주된 블록으로 인정되어 다음 블록과 연결될 수 있고 나머지는 유효한 블록으로 인정받지 못하게 됩니다. 즉 블록체인이 연결될 때 조금이라도 길이가 더 긴 쪽이 메인 체인으로 인정을 받게 되고 그렇게 되지 못한 블록들은 고아 블록이 되어 버리는 것입니다.
그런데 이때 어떤 사람이 블록체인을 공격할 목적으로 어느 블록에서 분기되는 블록을 생성했다고 해 보겠습니다. 그리고 그것을 메인 블록으로 인정 받게 하려고 노력을 할 것입니다. 그러나 쉽지가 않을 것입니다.
그런데 POS 합의 알고리즘에서는 과거 과반 이상의 지분을 보유했다가 현재는 지분을 팔아서 보유하고 있는 코인이 없음에도, 과거에 자신들에 지배력을 부여했던 암호화 키를 여전히 보유할 수 있고 그 권한을 사용하는 것이 가능합니다.
예를 들어 사토시라는 사람이 10000번째 블록에서 스테이킹을 해제하여 보유한 지분을 팔았다고 하고 나카모토라는 사람이 블록체인의 길이를 더 길게 하여 자신이 생성한 블록 내역을 메인 체인에 포함시키려는 시도를 하고 있었다고 해 보겠습니다.
<참고 그림 1>
ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ... 10119번째 블록 : 메인 체인
ㅁ X ㅁ X X X ㅁ ㅁ X ㅁ ... 10110번째 블록 : 나카모토의 체인
위의 그림처럼 나카모토가 메인 체인보다 9개의 블록만큼 길이가 모자란 블록체인을 생성하고 있기 때문에 이 블록체인은 메인 체인으로 인정을 받지 못하게 됩니다. 그런데 앞서 사토시가 과반 지분을 보유하고 있다가 10000번째 블록에서 스테이킹을 해제하고 보유한 지분을 팔았다고 말씀드린 바가 있습니다.
이 경우 사토시는 현재 스테이킹을 하고 있지 않으므로 새로운 블록을 검증하지는 못하지만 첫 번째 블록부터 10000번째 블록 중 자신이 이미 서명했던 블록에 대한 재서명을 하는 것이 가능합니다. 이런 상황에서 나카모토가 사토시의 프라이빗 키를 훔친다든가, 사토시에게 보상을 약속하고 첫 번째 블록부터 10000번째 블록 중 사토시가 서명했던 블록을 나카모토의 체인에 유리하도록 재 서명해 버린다면 어떻게 될까요?
<참고 그림 2>
ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ... 10119번째 블록 : 메인 체인 X
ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ... 10230번째 블록 : 나카모토의 메인 체인
위의 그림처럼 나카모토가 이어가고 있던 블록에다가 사토시가 다시 재서명한 블록이 결합되면서 결과적으로 나카모토의 체인의 길이가 더 길어져 버리는 결과를 낳게 됩니다. 따라서 나카모토가 만든 체인이 메인 체인이 되는 것이죠. 결과적으로 길이가 더 긴 체인이 만들어짐으로써 'Long Range Attack'이 성공한 것이라고 할 수 있습니다. 즉, 이 방식은 체인의 후방에서 시작된 블록의 재서명으로 인해 공격자의 블록체인의 길이가 더 길어지고 그것이 메인 체인이 되게 하는 것이라고 할 수 있습니다.
답변이 도움이 되길 바랍니다.