ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [BlockChain] 작업증명(Proof of Work) 분석
    논문/연구 2020. 1. 3. 18:30

          로재의 개발 일기      


    연구제목

    작업증명(Proof of Work) 분석

    연구기간

    2020.01.02 ~ 2020.01.03

    연구목적

    1. Difficulty, Target, nonce의 상관관계 분석
    2. 작업증명을 분석하여 인증되는 거래를 추적

    연구내용

     

       Target/Difficulty/nonce

       Block Header

       블록의 헤더는 다음의 6가지 정보로 구성되어있다.


       Version : 소프트웨어/프로토콜 버전

       hashPrevBlock : 블록 체인에서 바로 앞에 위치하는 블록의 블록 해시.

       hashMerkleRoot : 개별 거래 정보의 거래 해시를 2진 트리 형태로 구성할 때, 트리 루트에 위하는 해시 값.

       nTime : 블록이 생성된 시간

       nBits : 난이도 조절용 수치

       nNonce : 최초 0에서 시작하여 만족하는 해시 값을 찾을 때까지 1씩 증가한다.

       Target (목표)

       Target은 매우 큰 256-bit의 숫자로 전체 블록체인 클라이언트에게 공유되는 수치이다. 


       블록이 성공적으로 생성되기 위해서는 블록 헤더의 해시가 네트워크에 의한 Target보다 작거나 작아야 한다. 그렇기 때문에 Target이 낮으면 낮을수록 Difficulty는 증가하게 된다.

       Difficulty (난이도)

       블록체인에서 새로운 블록이 생길때까지의 걸리는 시간을 임의의 난이도로 지정하는 것이다. 이는 무수한 블록들이 동시에 생기되면 겪는 ‘이중지불’을 최대한 방지하기 위해서 설정된 숫자 규칙이며 평균적으로 10분 간격을 사용하며 최대 2주 간격을 가지도록 난이도 조절이 가능하다


       다음과 수식을 만족한다.

       Difficulty = maximum_target / current_target


       Difficulty는 block header 의 Bits를 사용하며 16진수로 표현한 숫자의 앞 2비트와 나머지 비트를 사용한다.

       예를 들어 다음과 같이 block header가 들어 있다고 가정하자  

       이때 bits는 18009645 16진수는 0x18009645이다. 이때 이 16진수의 256비트 형식은 [0x00000000, 0x00000000, 0x009654, {0x00….00}]과 같다.  이 결과는 0x009645 * (256 ^ 21)이며 이는 현재의 difficulty와 같다.

       Difficulty = maximum_target / current_target와 같으며 이때 maximum_target은 0x00ffff * (256 ^ 26)와 같다. 이를 통해서 Difficulty = 0x00ffff*(256^26) / 0x009645 * (256 ^ 21)라는 수식의 도달이 가능하게 된다.

       Difficulty = 0x00ffff*(256^26) / 0x009645 * (256 ^ 21) = 0x00ffff * (256 ^ 5) / 0x009645 이며 이는 65535 / 38469 * (256 ^ 5) = 1.70357950558* 2^40 = 1873105475221.611이라는 결과가 도출이 가능하다.

       Nonce (논스)

       Nonce는 계정에서 보내는 트랜잭션에 할당된 번호로 채굴자가 블록의 해시가 현재 네트워크의 Target의 이하 혹은 같도록 하여 채굴이 가능하도록 하는 32bit값이다.

       Target의 값보다 작거나 같으면 블록 생성이 되지만 그렇지 않을 경우 일반적으로 nonce가 1씩 증가한다.

     

       작업증명 알고리즘 (Proof-of-Work algorithm)

       작업증명 알고리즘은 비트코인의 창시자인 나카모토 사토시가 비트코인에 대한 이야기를 담은 논문 Bitcoin: A Peer-to-Peer Electronic Cash System에서 언급한 합의 알고리즘이다.

              

       이는 과반수 합의 제도인 선거제도와 비슷한데, 블록의 데이터 해시 연결을 위해 블록에는 블록 헤더 데이터를 해시 함수를 계산한 블록 해시가 들어가 있다. 이 해시들의 데이터는 연쇄적으로 검증이 가능하여 가장 많은 작업을 하여 길이가 제일 긴 노드가 어느 기록이 참인지 결정할 수 있는 권한을 가지는 것 이다.

     

       개개인의 노드가 작업증명이 가능하여 그에 준하는 수수료와 코인을 지급받게 되는 방식이며, 이러한 작업증명은 1개의 cpu당 1번씩만 가능하게 된다. 또한 한번 작업증명을 충족했다면 해당 작업을 재수행하지 않고는 변경될 수 없다.

     

       블록의 데이터 해시 연결을 위해서는 블록에는 블록 헤더 데이터를 해시 함수를 계산한 블록 해시가 들어가있어 이를 연쇄적으로 검증이 가능하게 되어 데이터의 위변조 사실을 확인할 수 있다.

     

       작업증명 알고리즘을 사용하기 위해서는 블록 해시는 Difficulty와 Target 데이터 규격을 만족해야만 하며, 이때 블록해시는 해시 알고리즘에 의해 만들어지기 때문에 Target 데이터만을 가지고 알아 낼 수 없다. 이를 위해서 사용하는 것이 nonce이다.

     

       비트코인의 블록은 블럭헤더(header)와 블록몸체(body)로 나뉘며 블록헤더에 있는 요소를 더하여 블록해시를 구하고 이것이 current_tagrget보다 크면 nonce를 1씩 증가시켜 새로운 블록해시를 찾는다. 보다 작은 값을 찾을때까지 진행하며 만약 다른 채굴자(minor)가 찾게되면 이를 다른 블록들에게 전파(broadcast)하게 되어 전파받은 채굴자(minor)들은 이를 검증하여 검증이 맞게 되는 경우 채굴자에게 보상을 지급하며 다음 블록을 찾게 된다.

     

       POW를 사용하게 되면 생기는 장점은 시간, 전기, CPU라는 자원을 소모하여 찾아냈음이 네트워크 과반 이상에 의해서 ‘증명’된 것이기 때문에 이 코인은 암호화폐를 사용하고자 하는 사람들에게 충분한 가치를 가진다. 또한 동시적인 블록 생산 확률이 0에 수렴하여 이중지불의 오류를 예방할 수 있다.

     

       작업증명의 한계점

       매번 nonce와 bits로 연산을 진행해야 하기 때문에 자원의 낭비가 지나치게 크다.

       현재 화폐로 사용하기에는 초당 3 ~ 4개의 거래가 최대치이며 이는 카드사의 초당 2천여 개의 거래에 비해서는 대단히 적은 수치이다. 실질적으로 암호화폐로 사용하기 위해서는 이러한 과제를 해결해야 할 것이다.

     

     

    ※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    반응형

    '논문 > 연구' 카테고리의 다른 글

    [Blockchain] 블록체인 원리 및 구조 분석  (0) 2020.01.03
Designed by Tistory.