가장 긴 체인을 선택하는 이유

블럭체인을 공부하며 이해가 안가는 부분이 p2p 네트워크에서 blockchain의 교환(?)이 일어날때 가장 긴 chain을 선택한다는 점이었는데, 이더리움 백서를 보다가 이해하게 되었다.

채굴 목적을 더 잘 이해하기 위해서, 악의적인 공격자가 있을 때 어떤 일이 발생하는지 알아보자.
비트코인의 뼈대를 이루는 암호기법은 안전한 것으로 알려져 있다.
그러므로 공격자는 비트코인 시스템에서 암호기법에 의해 직접 보호되지 않는 부분인 ‘트랜잭션 순서’를 공격 목표로 잡을 것이다.
공격자의 전략은 매우 단순하다.

어떤 상품(가급적이면 바로 전달되는 디지털 상품)을 구매하기 위해 판매자에게 100 BTC를 지불한다.
상품이 전송되기를 기다린다.
판매자에게 지불한 것과 같은 100 BTC를 공격자 자신에게 보내는 트랜잭션을 생성한다.(이중지불 시도)
비트코인 네트워크가, 공격자 자신에게 보내는 트랜잭션이 판매자에게 지불하는 트랜잭션보다 먼저 수행된 것으로 인식하도록 한다.
1번 과정이 발생하고 몇 분 후에 몇몇 채굴자가 그 트랜잭션을 블록에 포함할 것이다.
이 블록 번호를 270000이라 하자. 대략 1시간 후에는 이 블록 다음의 체인에 5개의 블록들이 추가될 것이다.
이 5개의 블록들은 위 1번 트랜잭션을 간접적으로 가리킴으로써 “컨펌(confirming)”한다.
이 시점에서 판매자는 지불이 완료된 것으로 판단하고 상품을 전송할 것이다. 디지털 상품으로 가정했으므로 전송은 바로 끝난다.
이제 공격자는 판매자에게 보낸 것과 동일한 100 BTC를 공격자 자신에게 보내는 다른 트랜잭션을 생성한다.
만약 공격자가 그냥 단순하게 트랜잭션을 시도한다면, 채굴자들이 APPLY(S,TX)를 실행하고 이 TX는 상태에 더 이상 존재하지 않는 UTXO를 소비하려 한다는 것을 알아차리므로 이 트랜잭션은 진행되지 않는다.
그러므로 대신에, 같은 부모 블록 269999을 가리키지만 판매자에게 보낸 것을 대체하는 새로운 트랜잭션이 포함된 다른 버전의 블록 270000을 채굴함으로서 블록체인 “분기점(fork)”을 생성한다.
이 블록 정보는 원래 것과 다르므로 작업증명(proof of work)이 다시 수행되어야 한다.
그리고 공격자의 새버전 블록 270000은 기존 270000과 다른 해시를 가지므로 원래 블록 270001부터 270005는 공격자의 블록을 가리키지 않는다.
그러므로 원래 체인과 공격자의 새로운 체인은 완전히 분리된다.
이러한 분기점에서 비트코인 네트워크의 규칙은 가장 긴 블록체인을 참으로 인식하는 것이다.
공격자가 자신의 체인에서 혼자 작업을 하는 동안 정당한 채굴자들은 원래의 270005체인에서 작업할 것이기 때문에 공격자 자신의 체인을 가장 길게 만들기 위해서는 네트워크의 다른 노드들의 계산능력 조합보다 더 큰 계산능력을 가져야 한다.
(이를 51% attack이라 한다.)

참고 : https://github.com/ethereum/wiki/wiki/%5BKorean%5D-White-Paper

Comments