본문 바로가기

카테고리 없음

블록체인 유효성 검증

1.블록의 유효성 검증이란?

 

블록체인 내에 있는 모든 노드들이 채굴자가 채굴한 블록 안에 있는 거래 내역(트랜잭션)의 정당성을 검사하는 것이다.
또한 해당 블록이 채굴 조건을 만족했는지의 여부도 검사한다.

이를 통해 악의적인 의도를 갖고 내용을 위조, 변조시킨 블록을 생성하여 채굴한다 해도 모든 노드들에게 검증을 받게 돼 발각된다.

하지만 블록체인 내의 컴퓨팅 파워 51%를 보유하고 있다면 이는 가능하나 엄청난 비용이 발생하기 때문에 오히려 위조 성공 시 보다 손해를 보게 된다.

이러한 이유로 블록체인은 강력한 보안성과 신뢰성을 보장하는 기술이라고 여기는 것이다.

 

2.유효성 검증 이해를 위해..

 

1> 상태변환 함수

<암호화폐의 예>

비트코인과 같은 암호화폐의 장부는 상태(State) 변환 시스템으로 볼 수 있다. 

은행 시스템에서는 a가 10coin, b가 5coin , c가 7coin....... 과같이 개인고객의 잔고 상태를 표기하지만 블록체인의 경우 State 정보로 잔고 상태를 나타낸다.(State는 UTXO의 집합으로 이루어진다.아래에서 설명!)

 

암호화폐의 유효성 검증은 상태 변환 함수에 현재 상태와 트랜잭션을 입력으로 넣어줘 새로운 State(잔고 상태)를 만들며 검증을 해나간다. (즉 UTXO 집합 구조가 변경된다.)

(state_function(now_state, transaction) -> new_state or error)

 

2>UTXO

실제 암호화폐상의 장부 상태는 a가 10coin ,b가 5coin, c가 7coin과 같은 형식으로 이루어져있지 않고 그림과 같이  UTXO('소비되지 않은 트랜잭션 출력')의 집합으로 이루어져있다.

UTXO는 코인 금액과 주인의 공개키 정보가 담겨있어 개인키를 보유한 사람만이 해당 UTXO에 대한 소유권을 주장 할 수 있다.

 

<실제 UTXO 집합은 A , B로 구분되지 않는다. 1개의 Set에 여러 소유주의 UTXO가 있는 것>

 

3>트랜잭션의 구조 

트랜잭션(거래 정보)은 1개 이상의 입출력을 갖고 있다.

-입력: 사용할 UTXO에 대한 참조, 참조한 UTXO에 소유주임을 입증 할 privatekey로 작성된 전자서명

-출력: transaction_function의 출력은 새로운 상태에 적용 될 UTXO들이다.(UTXO그림 참조!)

결국 입력에 사용된 UTXO가 State에서 삭제되고 출력 UTXO 가 State에 추가된다.

 

 

4>유효성 검증 절차 & 위조

 

0. 채굴에 성공한 채굴자는 block을 모든 노드들에게 전파시킨다.

1. 채굴 완료 블록에 의해 참조되는 이전 블록이 존재하는지, 유효한지 확인한다(변조에서 중요한 역할을 한다.)

2. 채굴자가 얻은 nonce값이 조건을 충족하는지 확인한다.

4. 변수S에 이전 블록의 마지막 상태(state)를 담는다. 

5. Transaction이 n개인 경우  0...n-1의 모든 트렌젝션에 Transaction_function( s , i 번째 tx)를 순차적으로 적용하며

함수의 출력이 error를 리턴하면 false를 리턴하며 종료, n-1까지 error가 없다면 true를 리턴하고 마지막 상태를 이 블록에 저장한다.

 

예시>

      -> Transactio_function( s , 0번째 tx) -> new_s_0

      -> Transactio_function( new_s0 , 1번째 tx) -> new_s_1

            ............. 

      -> Transactio_function( new_s_n-2 , n-1번째 tx) -> new_s_n-1

      -> block에 new_s_n-1 저장

 

이를 통해 악의적인 위조 트랜잭션을 포함하여 생성된 blcok이 블록체인에 연결되는 것을 막을 수 있다.

(변조는 아래에서 다룸)

 

- 참조된 UTXO 가 State에 없다면, 에러를 리턴. (없는걸 있다고 한 경우)

- 만약 서명이 UTXO 의 소유자와 매치되지 않으면, 에러를 리턴. (다른 사람의 것을 자신의 것이라 주장하는 경우)

- 만약 입력에 사용된 UTXO 들 금액의 합이 출력 UTXO 들 금액의 합보다 작으면, 에러를 리턴.

  (보유한 금액 보다 더 많은 금액을 지불하려 하는 경우)

 

5>변조 

블록체인을 접할때 가장 많이듣는 이야기중 하나는 위변조에 강하다고들 한다.

위조는 위에서 설명했고 변조는 무었이며 어떻게 막는것인가?

 

변조란 기존에 유효성 검증을 끝내 이상없이 블록체인에 연결된 block내의 트랜잭션 내용을 바꾸는 행위를 말한다.  

밑에 그림을 기준으로 설명하겠다.

 

1. #3의 트랜잭션 하나를 수정한다. ex)alice 50coin-> bob을 alice 50coin->alice로 변경

2. #3의 수정내용대로 공격자는 coin을 사용한다.

3. 몇 분 후에 몇몇 채굴자가 그 트랜잭션을 블록에 포함시킨다. 이 블록 번호는 #0

 

하지만 공격자가 그냥 단순하게 트랜잭션 변경을 통한 공격을 한다면  다른 채굴자들이 State_function(S,TX)를 실행하고 이 TX는 State에 더 이상 존재하지 않는 UTXO 를 소비하려 한다는 것을 알아차리므로 이 트랜잭션을 포함한 block은 거부된다.

 

그러므로 #4을 가리키지만 다른 버전의 블록 #3을 채굴해야하고 #2와#1이 해당 블록을 가리키도록(previous blockhash값을 가지도록) 해야함으로 이에 맞게 #2,#1을 채굴해내야만 한다.

위 작업이 힘들어도 만약 이를 실현한다 한들 합의 알고리즘에 의해 노드 A가 올바른 block이라 주장해도 이는 무시된다.

※ 나머지 노드들은 위조되지 안은 block을 갖고 있기 때문이다.

 

공격자가 이를 성공시키기 위해서는 51% 이상의 노드의 내용을 위조시켜야 한다.
이를 위해서는 51%의 노드들을 통제할 수 있는 만큼의 컴퓨팅 파워가 필요하다.
서두에서 말했듯이 이러한 노력은 금전적 가치가 없고 오히려 손해다...

 

결국 이러한 51% 공격을 시도하는 행위를 일체 막기 위해 채굴자들에게 적절한 보상을 함으로써 블록체인 생태계를 유지시키도록 한다.

 

출처:

1) 이더리움 백서 

2) https://m.blog.naver.com/mage7th/221439829511

3) https://www.i-on.net/news/newsletter/column/1218889_7965.html