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

블록헤더

위키원
wjddn843 (토론 | 기여)님의 2019년 10월 22일 (화) 13:15 판
이동: 둘러보기, 검색

블록헤더(block header)는 블록을 구성하는 요소를 구분한 단위 중 하나이다. 각각의 블록은 머리와 몸이라고 할 수 있는 블록헤더와 블록바디로 구성되어 있다. 블록헤더와 블록바디는 서로의 정보를 비교하면서 위변조 가능성을 확인하며 무결성을 높인다. 비트코인의 블록헤더에는 현재 블록과 이전 블록의 해시값, 해당 블록을 만든 비트코인의 버전, 머클루트, 타임스탬프, 현재 채굴 난이도, 논스가 포함되어 있다. 블록체인 네트워크마다 헤더에 저장되어 있는 내용은 다를 수 있다.

개요

현재 블록의 값은 이전 블록의 값을 해시화하여 만들기 때문에 언제든지 해시함수만 알고 있으면 두 블록의 위변조 여부를 확인할 수 있다. 머클루트도 블록바디의 거래내역들을 해시함수로 암호화해 보관하기 때문에 거래내역의 위변조 위험을 차단한다. 여기서 블록체인의 절대적인 보안성을 확인할 수가 있다. 블록헤더와 블록바디에 포함되어 있는 정보가 모두 유기적으로 연결되어 있기 때문이다. 현재 블록의 해시값과 이전 블록의 해시값, 머클루트와 블록바디의 거래내역, 채굴 난이도와 자동으로 주어지는 비츠값이 개별젹으로 존재함과 동시에 서로의 값에 영향을 주기 때문에 하나의 값이 조금만 틀어지더라도 전체의 값이 크게 바뀌게 된다.[1]

비트코인 블록헤더

구분명 내용
버전(Version) 소프트웨어 버전
비츠(Bits) 난이도
이전 블록 해시(Prev Block Hash) 이전 블록 해시
시간(Time) 블록 생성 시간
머클 해시(Merkle Hash) 거래 정보 해시
논스(Nonce) 난수[2]
블록(Block)
버전(Version)
비츠(Bits)
이전 블록 해시(Prev Block Hash)
시간(Time)
거래 정보 해시(Merkle Hash)
논스(Nonce)
바디(Body)
 
 
버전(version)

해당 블록의 버전이다. 현재 이 블록 헤더를 만든 비트코인 프로그램의 버전 정보를 말한다.[3]

이전 블록 해시(previous block hash)

이전 블록 해시 정보는 이전 블록의 주솟값을 가리키는 요소이다. 이전 블록헤더를 sha256 해시함수를 이용하여 두 번 해싱한 해시값 – SHA256(SHA256( ))으로, 각 블록의 헤더 정보에는 이전 블록의 해시값을 갖고 있어서 블록끼리 연결할 수 있다.[3]

머클루트(merkle root)

해당 블록에 포함된 거래정보의 거래 해시를 2진 트리 형태로 구성할 때 트리의 루트에 위치하는 해시값이다. 각 트랜잭션과 가까운 노드끼리 쌍을 지어 해시값을 구하고 최종적으로 구해진 해시값이 머클해시 값이다. 머클해시 값을 통해 단일 블록 내에 존재하는 트랜잭션의 무결성을 검증할 수 있으며 머클해시 값을 이용하여 블록의 해시 값을 생성하였기 때문에 블록해시의 무결성도 함께 검증할 수 있다. 쉽게 말해 해당 블록이 유효한지에 대한 무결성을 검증하기 위한 요소가 머클해시이다.[3]

  • 완료된 거래 정보의 변경이 불가능한 이유
거래 정보의 해시값은 해당 거래가 포함된 블록의 머클루트 계산에 입력값으로 사용되고, 머클루트는 블록 해시 계산에 입력값으로 사용한다. 블록 해시는 다음 블록(A 블록이라 하면)의 이전 블록 해시 값으로 저장되며, 이전 블록 해시는 A 블록의 블록 헤더 정보로서, A 블록의 블록 해시를 계산하는 데 입력값으로 사용한다. 따라서, 거래 정보가 변경되면 머클 해시가 변경되고, 머클 해시가 변경되면 블록 해시가 변경된다. 블록 해시가 변경되면 다음 블록의 블록 해시 변경으로 연쇄적으로 이어진다. 그리고 블록 해시는 작업 증명의 해답(nonce 값)을 찾아내야 구할 수 있기 때문에 거래 정보를 변경한 블록부터 그 이후의 모든 블록을 순서대로 다시 채굴해야 한다. 블록 하나 채굴하는데 평균 10분이 소요되고, 2019-07-15 기준으로 현재 총 블록 수가 약 48만 블록 이상이다. 최초의 원조 블록인 Genesis 블록에 포함된 거래를 변경하면 480만 분, 9.1년의 시간이 소요되므로 9.1년의 시간 동안에도 새로운 블록들도 평균 10분마다 하나씩 계속 생성되므로 이를 모두 뒤집는 것은 사실상 불가능하다.[4]
타임(time)

해당 블록의 대략적인 생성 시간을 말한다. 타임 스탬프는 유닉스 기준일자로 표시되고 1970년 1월 1일 자정부터 경과한 시간을 초 단위로 계산한다. [3]

비츠(bits)

작업 난이도는 논스 값 계산이 어려운 정도를 나타내며, 블록 헤더 정보에서 bits라는 값으로 조절된다. 예를 들어, 블록 해시를 부호 없는 1바이트의 숫자라고 하고, 1바이트의 숫자 값을 블록 해시값으로 산출하는 해시함수는 0~255 사이의 값을 결과로 나타낸다. 블록 해시가 128보다 작아야 한다면, 0~255 사이의 값을 산출하는 해시 함수를 적용해서 128보다 작은 블록 해시값이 나올 확률은 128보다 작은 수(0~127)의 개수는 128이고, 해시 함수가 산출 가능한 모든 값(0~255)의 개수는 256, 즉, 128/256이므로, 50%이다. 블록 해시가 32보다 작아야 한다면 확률은 12.5이다. 128과 32와 같은 숫자가 블록 헤더 정보의 bits이다. 실제로 bits 값이 128, 32로 저장되지는 않는다. 정리하면, 블록 헤더의 bits는 논스 값을 계산하는 기준이 되는 특정 숫자를 말하며, 블록체인 전체에 걸쳐 일률적으로 적용되는 숫자이다. [4]

논스(nonce)
  • 작업 증명(PoW) :새로운 블록을 블록체인에 추가하는 '작업'을 완료했음을 '증명'하는 것이다. 새로운 블록을 블록체인에 추가하려면, 그 새로운 블록의 블록 해시를 계산해내야하고, 그 블록 해시를 계산해내려면 그 블록의 블록 헤더 정보 중의 하나인 논스 값을 계산을 통해 구해야 한다. 결국. 논스 값을 구하는 것이 바로 작업 증명이다.[4]
  • 논스값의 계산 : 논스 값은 입력값 중의 하나로 해서 계산되는 블록 해시값이 특정 숫자보다 작아지게 하는 값이다. 해시함수 특성상, 어떤 해시값(B라고 하면)을 결과로 나오게 하는 입력값을 찾으려면, B에서 역산하는 방식으로는 찾을 수 없으며, 결과가 B가 될 때까지 무작위로 입력값을 계속 바꿔가면서 찾아낼 수밖에 없다. 그 입력값을 바꿀 수 있는 유일한 통로는 논스이다. 즉, 블록 헤더에 포함된 6가지 정보 중에서 확정되지 않아서 값을 바꿀 수 있는 유일한 항목이 논스 이다. 이 논스 값을 1씩 증가시키면서 반복적으로 계산한 블록 해시값이 특정 숫자보다 작은 값이 나오면, 그때의 논스 값으로 계산한 블록 해시가 그 블록의 블록 해시로 확정된다. 블록 해시라는 식별자를 얻은 그 블록은 새로운 블록으로서 블록체인에 추가되며 작업이 완료된다. [4]
  • 보상 : 새로 발행되는 비트코인과 해당 블록에 포함되는 거래의 거래 수수료의 합을 말한다. 비트코인의 새로운 발행은 채굴자가 블록을 처음 구성할 때 채굴자의 지갑으로 일정량의 비트코인이 입금되는 거래를 그 블록의 첫 거래(generation transaction)로 추가하는 방식이다. 새로 발행되는 비트코인은 최초에 50BTC에서 시작해서 블록체인에 21만개의 블록이 추가될 때마다 절반으로 줄어든다. 거래 수수료는 각 거래 당사자끼리 자율적으로 정하는 것이 가능하고, 거래가 블록에 추가되는 우선순위를 정하는데 거래 수수료가 입력값으로 사용된다. 따라서, 보상은 논스값을 찾아내고, 그 결과 새로운 블록을 블록체인에 추가한다. 해당 블록에 포함된 모든 거래를 유효한 거래로 확정시켜준 대가라고 할 수 있다. [4]

이더리움 블록헤더

  • 이더리움 블록헤더의 구성요소
  1. 부모해시(parentHash) : 부모 블록의 해시값
  2. 엉클해시(uncleHash) : 현재 블록의 엉클 블록들의 해시값
  3. 주소(beneficiary) : 채굴 후 해당 트랜잭션의 수수료를 받을 계정 주소
  4. 상태루트(stateRoot) : 계정의 상태정보가 모여있는 머클 패트리시아 트리의 루트 노드 해시값
  5. 트랜잭션루트(transactionsRoot) : 블록의 모든 트랜잭션에 대한 머클트리의 루트노드 해시값
  6. 영수증루트(receiptsRoot) : 해당 블록 내 모든 트랜잭션에 대한 일종의 영수증 머클트리의 루트노드 해시값
  7. 로그블룸(logsBloom) : 로그 정보를 사용하는데 필요한 32바이트 블룸필터
  8. 난이도(difficulity) : 블록 생성 난이도
  9. 블록번호(number) : 해당 블록 번호
  10. 가스한도(gasLimit) : 블록 당 지급 가능한 최대 가스의 제한량
  11. 사용된 가스(gasUsed) : 해당 블록 내 트랜잭션에 사용된 가스의 총합
  12. 타임테이블(time : 해당 블록의 최초 생성시간
  13. 믹스해시, 논스(mixHash, nonce : 해당 블록이 충분한 연산을 했음을 입증하는 해시값
  14. 기타(extra) : 블록의 기타 정보

각주

  1. 업비트, 〈암호화폐 필수용어, 'Block Header" 네트워크의 작은 위/변조도 허용하지 않는 'Block Header", 무엇일가요?〉, 《일분》, 2018-05-15
  2. 안형석 기자, 〈(블록체인의 미래①) 헤더와 바디로 구성된 블록체인〉, 《글로벌 메이커스》, 2019-05-23
  3. 3.0 3.1 3.2 3.3 불곰, 〈블록체인의 기술 정의〉, 《티스토리》, 2018-07-08
  4. 4.0 4.1 4.2 4.3 4.4 homoefficio, 〈BlockChain 기초 개념〉, 《깃허브》, 2016-01-23

참고자료

같이 보기


  검수요청.png검수요청.png 이 블록헤더 문서는 블록체인 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.