의견.png

"블록헤더"의 두 판 사이의 차이

해시넷
이동: 둘러보기, 검색
16번째 줄: 16번째 줄:
  
 
=== 머클루트 ===
 
=== 머클루트 ===
* 완료된 거래 정보의 변경이 불가능한 이유
+
==== 완료된 거래 정보의 변경이 불가능한 이유 ====
거래 정보의 해시값은 해당 거래가 포함된 블록의 머클루트 계산에 입력값으로 사용되고, 머클루트는 블록 해시 계산에 입력값으로 사용한다. 블록 해시는 다음 블록(A 블록이라 하면)의 이전 블록 해시 값으로 저장되며, 이전 블록 해시는 A 블록의 블록 헤더 정보로서, A 블록의 블록 해시를 계산하는데 입력값으로 사용한다. 따라서, 거래 정보가 변경되면 머클 해시가 변경되고, 머클 해시가 변경되면 블록 해시가 변경된다. 블록 해시가 변경되면 다음 블록의 블록 해시 변경으로 연쇄적으로 이어진다. 그리고 블록 해시는 작업 증명의 해답(nonce 값)을 찾아내야 구할 수 있기때문에 거래 정보를 변경한 블록부터 그 이후의 모든 블록을 순서대로 다시 채굴해야 한다. 블록 하나 채굴하는데 평균 10분이 소요되고, 2019-07-15 기준으로 현재 총 블록 수가 약 48만 블록 이상이다. 최초의 원조 블록인 Genesis 블록에 포함된 거래를 변경하면 480만 분, 9.1년의 시간이 소요되므로 9.1년의 시간 동안에도 새로운 블록들도 평균 10분마다 하나 씩 계속 생성되므로 이를 모두 뒤집는 것은 사실상 불가능하다.  
+
거래 정보의 해시값은 해당 거래가 포함된 블록의 머클루트 계산에 입력값으로 사용되고, 머클루트는 블록 해시 계산에 입력값으로 사용한다. 블록 해시는 다음 블록(A 블록이라 하면)의 이전 블록 해시 값으로 저장되며, 이전 블록 해시는 A 블록의 블록 헤더 정보로서, A 블록의 블록 해시를 계산하는데 입력값으로 사용한다. 따라서, 거래 정보가 변경되면 머클 해시가 변경되고, 머클 해시가 변경되면 블록 해시가 변경된다. 블록 해시가 변경되면 다음 블록의 블록 해시 변경으로 연쇄적으로 이어진다. 그리고 블록 해시는 작업 증명의 해답(nonce 값)을 찾아내야 구할 수 있기때문에 거래 정보를 변경한 블록부터 그 이후의 모든 블록을 순서대로 다시 채굴해야 한다. 블록 하나 채굴하는데 평균 10분이 소요되고, 2019-07-15 기준으로 현재 총 블록 수가 약 48만 블록 이상이다. 최초의 원조 블록인 Genesis 블록에 포함된 거래를 변경하면 480만 분, 9.1년의 시간이 소요되므로 9.1년의 시간 동안에도 새로운 블록들도 평균 10분마다 하나 씩 계속 생성되므로 이를 모두 뒤집는 것은 사실상 불가능하다.<ref>homoefficio, 〈[https://homoefficio.github.io/2016/01/23/BlockChain-%EA%B8%B0%EC%B4%88-%EA%B0%9C%EB%85%90/ BlockChain 기초 개념]〉, 《깃허브》, 2016-01-23</ref>
  
 
== 이더리움 블록헤더 ==
 
== 이더리움 블록헤더 ==
45번째 줄: 45번째 줄:
 
* yahweh87, 〈[https://steemit.com/kr/@yahweh87/3 #3- 블록체인 기술 및 블록에 관한 정의]〉, 《스팀잇》
 
* yahweh87, 〈[https://steemit.com/kr/@yahweh87/3 #3- 블록체인 기술 및 블록에 관한 정의]〉, 《스팀잇》
 
* 강솔, 〈[https://medium.com/tomak/3-%EC%9D%B4%EB%8D%94%EB%A6%AC%EC%9B%80%EC%9D%80-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%8F%99%EC%9E%91%ED%95%98%EB%8A%94%EA%B0%80-c0a5d5d4df3c 이더리움은 어떻게 동작하는가 ? — Part 3.]〉, 《미디엄》, 2018-07-30
 
* 강솔, 〈[https://medium.com/tomak/3-%EC%9D%B4%EB%8D%94%EB%A6%AC%EC%9B%80%EC%9D%80-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%8F%99%EC%9E%91%ED%95%98%EB%8A%94%EA%B0%80-c0a5d5d4df3c 이더리움은 어떻게 동작하는가 ? — Part 3.]〉, 《미디엄》, 2018-07-30
 
+
* homoefficio, 〈[https://homoefficio.github.io/2016/01/23/BlockChain-%EA%B8%B0%EC%B4%88-%EA%B0%9C%EB%85%90/ BlockChain 기초 개념]〉, 《깃허브》, 2016-01-23
 
== 같이 보기 ==
 
== 같이 보기 ==
 
* [[블록체인]]
 
* [[블록체인]]

2019년 7월 15일 (월) 15:00 판

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

개요

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

비트코인 블록헤더

  • 비트코인 블록헤더의 구성요소
  1. 버전(version) : 해당 블록의 버전 숫자
  2. 이전 블록 해시(previous block hash) : 이전 블록헤더를 sha256 해시함수를 이용하여 두 번 해싱한 해시값 – SHA256(SHA256( ))
  3. 머클루트(merkle root) : 해당 블록에 포함된 거래정보의 거래 해시를 2진 트리 형태로 구성할 때 트리의 루트에 위치하는 해시값
  4. 타임테이블(time) : 해당 블록의 대략적인 생성 시간, 1970년 01월 01일 이후의 초단위 시간
  5. 비츠(bits) : 블록의 작업증명 알고리즘에 대한 난이도 해시 목표값
  6. 논스(nonce) : 특정 목표값보다 낮은 값을 구하기 위한 카운터

머클루트

완료된 거래 정보의 변경이 불가능한 이유

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

이더리움 블록헤더

  • 이더리움 블록헤더의 구성요소
  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) : 블록의 기타 정보

참고자료

같이 보기


  의견.png 이 블록헤더 문서는 블록체인 기술에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.