헤더 (Header)
헤더(header)는 블록 헤더(block header)라고도 하며, 비트코인 같은 작업 증명 블록체인에서 하나의 블록에 속하는 80바이트 크기의 요약 데이터로, 채굴자가 작업 증명을 만들기 위해 반복적으로 해싱하는 대상입니다. 헤더에는 블록에 담긴 모든 트랜잭션을 대표하는 값과 이전 블록에 대한 연결 정보가 들어 있어, 헤더의 해시가 곧 그 블록의 식별자 역할을 합니다.
블록 헤더의 구성 (비트코인 기준, 총 80바이트)
- 버전(version, 4바이트): 블록이 따르는 규칙의 버전을 나타냅니다.
- 이전 블록 해시(previous block hash, 32바이트): 바로 앞 블록 헤더의 해시입니다. 이 값 덕분에 블록들이 사슬처럼 이어집니다.
- 머클 루트(merkle root, 32바이트): 블록에 포함된 모든 트랜잭션을 머클 트리로 묶어 얻은 하나의 해시입니다. 트랜잭션이 하나라도 바뀌면 머클 루트가 달라집니다.
- 타임스탬프(timestamp, 4바이트): 블록이 만들어진 대략적인 시각입니다.
- 난이도 목표(bits, 4바이트): 헤더 해시가 넘지 말아야 할 목표값(target)을 압축해 표현한 값입니다.
- 논스(nonce, 4바이트): 채굴자가 해시 결과를 바꾸기 위해 자유롭게 바꾸는 숫자입니다.
작업 증명에서 헤더가 하는 일
채굴자는 헤더를 SHA-256으로 두 번 해싱하고, 그 결과가 난이도 목표값 이하인지 확인합니다. 조건을 만족하지 않으면 논스를 바꾸고(논스 범위를 다 쓰면 타임스탬프나 코인베이스 트랜잭션을 바꿔 머클 루트를 바꾼 뒤) 다시 해싱합니다. 해시 결과는 미리 예측할 수 없으므로 지름길이 없고, 조건을 만족하는 헤더를 찾을 때까지 막대한 횟수의 시도가 필요합니다. 조건을 만족하는 헤더를 찾았다는 사실이 곧 작업 증명입니다.
해싱되는 것은 80바이트 헤더뿐이지만, 머클 루트가 모든 트랜잭션을 대표하므로 작업 증명은 사실상 블록 전체를 보호합니다. 트랜잭션 크기와 개수가 아무리 많아도 헤더 크기는 80바이트로 같으며, 블록에 담을 수 있는 트랜잭션 수는 헤더가 아니라 별도의 블록 크기(무게) 한도가 정합니다.
블록 헤더의 특징
- 변조 방지: 과거 블록의 트랜잭션을 바꾸면 그 블록의 머클 루트와 헤더 해시가 바뀌고, 다음 블록 헤더에 기록된 이전 블록 해시와 맞지 않게 됩니다. 이를 고치려면 이후 모든 블록의 작업 증명을 다시 해야 합니다.
- 경량 검증: 헤더는 작기 때문에 경량 클라이언트(SPV)는 전체 블록 대신 헤더만 내려받아 작업 증명의 사슬을 확인하고, 머클 증명으로 특정 트랜잭션이 블록에 포함되었는지 검증할 수 있습니다.
- 투명성: 헤더는 공개되어 있어 누구나 블록 탐색기 등에서 확인하고 검증할 수 있습니다.
- 에너지 소비: 유효한 작업 증명을 찾기 위해 헤더를 반복적으로 해싱하는 과정에는 큰 컴퓨팅 능력과 전력이 필요합니다.
이렇게 생각해 보십시오
트랜잭션 데이터가 담긴 상자(“블록”)가 있고, 상자 겉면에 내용물 요약과 앞 상자의 번호가 적힌 80바이트짜리 표지(“헤더”)가 붙어 있다고 상상해 보십시오. 채굴자는 표지의 빈칸(논스)에 숫자를 바꿔 넣어 가며, 표지 전체의 해시가 정해진 목표보다 작아지는 숫자를 찾을 때까지 시도를 반복합니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.