user-image
블록헤더스
블록헤더스
2023.02.23

[Xangle Digest]

※해당 컨텐츠는 2022년 12월 24일 외부에서 기발간 된 컨텐츠입니다. 컨텐츠에 대한 추가적인 주의사항은 본문 하단에서 확인해주세요.

작성자: 김민성(블록체인 밸리 2기), 백용기(디사이퍼 9기), 이윤서(하이블록 1기), 이주원 (이화체인 7기) - Reviewed by  Block Headers

목차

1. 블록체인에는 누가 참여할까?

2. 블록은 어떻게 등록되는가?

3. 블록 내 데이터는 어떻게 네트워크로 내로 전파되는가?

4. 블록에는 어떤 데이터가 담길까?

5. 블록체인의 원리로 인한 장단점은 무엇인가?

 


1. 블록체인에는 누가 참여할까?

보통 블록체인이라고 부르는 경우에는 퍼블릭 블록체인을 지칭합니다. 기본적으로 블록체인의 종류는 크게 4가지(퍼블릭: 누구나 참여 가능, 프라이빗: 승인 받은 노드만 참여 가능, 컨소시움: 컨소시움에 참여한 노드들만 참여가능, 하이브리드: 퍼블릭 블록체인+프라이빗 블록체인)정도로 나눌 수 있지만, 이 글은 누구나 참여할 수 있는 퍼블릭 블록체인에 대한 내용입니다.

위에서 말한 것처럼 퍼블릭 블록체인의 참여자는 블록체인 네트워크에 참여하고자 하는 누구나 다 참여 할 수 있습니다. 그리고 이런 블록체인 네트워크의 참여자들을 노드(node)라고 부릅니다. 좀 더 정확하게 말하자면, 참여자들이 사용하는 디바이스 자체를 노드라고 부르며, 그 형태는 PC부터 태블릿, 랩탑, 스마트폰 등 다양한 형태의 기기가 될 수 있습니다.

이상적 개념의 블록체인은 모든 노드가 각각 블록체인에 기록되는 모든 데이터를 전부 저장하고 기록하는 형태입니다. 하지만, 현실적으로 참여자들의 모든 기기에 이런 방대한 데이터를 모두 저장하며 사용하는 것은 매우 어렵습니다.

이런 문제를 해결하기 위해 등장한 개념이 바로 라이트 노드입니다. 블록체인에서 발생한 모든 거래정보를 저장하고 있는 노드인 풀 노드는 다른 노드와 달리 블록과 거래의 유효성을 검증할 순 있지만, 많은 저장공간이 필요하기에 단순히 네트워크를 이용하기 위한 목적으로는 적합하지 않았습니다.

라이트 노드는 모든 거래정보를 저장하는 것이 아닌, 블록의 정보를 요약한 데이터(블록 헤더의 데이터)만을 저장해 검증이 필요할 때만, 풀 노드와 데이터를 대조하여 확인하는 방식으로 적은 저장 공간만으로도 충분히 네트워크에 참여할 수 있는 환경을 구성할 수 있게 만들어졌습니다.

결론적으로 라이트 노드는 풀노드처럼 자체적으로 검증을 할 순 없지만, 낮은 진입장벽으로 블록체인 네트워크에 참여할 수 있게 만듭니다. 현재 라이트 노드는 주로 지갑으로 많이 활용되고 있으며, 모바일 기기만으로도 구성할 수 있는 접근성을 제공하고 있습니다.

 

2. 블록은 어떻게 등록되는가?

먼저 블록이 네트워크에 등록 및 연결(체인)되는 과정을 이해하기 위해, Alice가 Bob에게 1 BTC을 보내는 상황을 가정해봅시다. Alice가 Bob에게 1 BTC를 보내기 위해서는 다음과 같은 과정들이 진행됩니다.

(1) 개인지갑 생성

우선 블록체인에서 거래를 위해 계좌와 같은 개념인 전자지갑을 생성해야 합니다. Alice는 지갑을 생성하고 1 BTC을 코인거래소(업비트, 빗썸 등)에서 구매합니다. 그리고 1 BTC를 지갑으로 입금(출금)하기 위해 유효한 서명이 필요한데요, 이 때 필요한 것이 전자서명기술이고 RSA(공개키 암호화) 방식이 사용됩니다. 공개키 암호화 방식에는 개인키(Private key)와 공개키(Public key)가 사용됩니다.

개인키(Private key)는 절대로 노출되선 안되는 데이터로, 계좌의 비밀번호와 같은 개념입니다.

반대로 공개키(Public key)는 누구에게나 공개해도 되는 데이터로 계좌번호와 같은 개념입니다.

공개키 암호화 방식 이해하기

공개키 암호화방식을 이해하기 위한 상황을 가정해보겠습니다. Bob이 Alice에게 편지를 보낼 때, Bob은 편지를 쓰고 다른 사람이 읽지 못하게 Alice의 공개키를 통해 암호화합니다. 그리고 Bob는 Alice에게 암호화된 편지를 보내는데요, Alice는 받은 편지를 자신의 개인키로 복호화해서 읽을 수 있습니다. 만약 Alice의 공개키 혹은 개인키가 아닐 경우 해당 편지는 읽을 수 없습니다.

출처: averycode velog

(2) 개인의 트랙잭션 발생(송금 및 구매)

그렇다면 트랜잭션은 어떻게 발생할까요? Alice가 Bob에게 1BTC을 송금할 때 트랜잭션이 발생하는데요, 우선 Alice는 트랜잭션을 해시 함수(Hash function)를 이용해 트랜잭션의 해시 값(Hash value)을 구합니다. 그리고 얻은 해시 값을 Alice의 비밀키로 암호화해 전자서명을 만듭니다.

출처: 재윤TV

위의 과정을 거친 후 Alice는 ①트랜잭션과 ②전자서명을 비트코인 네트워크에 공유합니다.

해시함수 이해하기

트랙잭션이 발생하면, 해당 트랜잭션이 올바르고 조작되지 않음을 증명하기 위해 Hashing Alogrithm을 사용합니다. 여기서 Hashing Alogrithm은 임의의 크기를 가진 입력 데이터(input)를 고정된 크기의 출력값(output)로 변환 및 저장하는 알고리즘을 의미합니다. 거의 모든 블록체인 네트워크는 BTC가 채택한 SHA-256방식의 Hashing Alogrithm을 사용합니다. SHA-256(Secure Hash Alogrithm-256)은 Hashing Alogrithm의 한 종류로, 임의의 크기를 가진 입력 데이터를 256비트 크기의 출력값으로 변환합니다. 이렇게 생성된 출력 데이터를 ’해시값’이라고 하며, 항상 64개의 글자(256비트)로 구성됩니다.

Hashing Alogrithm은 다음과 같은 2가지 특징이 존재합니다. 먼저 같은 데이터를 입력하면 언제나 똑같은 출력값을 얻으며, 반대로 데이터가 조금이라도 다르다면 완전히 다른 값을 얻게되는① Deterministic(결정론적)한 특징을 갖고있습니다. 두 번째 특징은 출력값을 통해 입력한 데이터를 유추할 수 없는 ②One-way(단방향)이며, 만약 출력값을 다시 Hashing Alogrithm에 넣어도 고정된 크기의 아예 다른 해시값이 출력됩니다.
블록체인 네트워크는 Hashing Alogrithm활용을 통해 트랜잭션의 변조 및 조작이 사실상 불가능하기 때문에 안전합니다.

(3) 네트워크에서의 기록과 검증

위 내용처럼 전 세계에서 동시다발적으로 발생한 ①트랜잭션과 ②전자서명을 네트워크 참여자(노드)들은 자신의 블록에 최대한 기록합니다. 그리고 노드들은 기록한 내용들이 정확한지 검증을 진행합니다.

출처: 블록체인 코어 시리즈: 작업증명(PoW)

노드들은 자신이 블록에 기록한 내용들을 검증하기 위해, 노드 중 누군가 네트워크에 자신의 블록을 공유합니다. 해당 블록이 네트워크에 공유되면, 다른 노드들은 블록에 기록되어있는 ①트랜잭션을 해시함수를 통해 해시 값을 확인합니다. 그리고 ②전자서명을 해당 트랜잭션의 공개키로 열어서 앞선 작업과 해시 값이 동일한지 검증합니다. 만약 동일하다면 해당 트랙잭션은 거래 내역의 위변조가 발생하지 않아 유효하다고 판단합니다.

출처: 재윤TV

다른 노드들 과반수가 블록에 기록된 모든 트랜잭션과 전자서명이 유효하다고 판단하면 해당 블록은 원본으로 등록됩니다. 그리고 다른 노드들은 사본을 각자의 컴퓨터에 저장하여 분산보관합니다. 그 다음 블록들도 같은 과정을 통해 블록 생성주기(비트코인은 10분)마다 블록으로 형성되어 연결(Chain)되는데요, 이를 블록체인(Block Chain)이라고 합니다.

(4) 그렇다면 왜 이렇게 복잡하게 검증할까?

노드 중 누군가 트랜잭션을 기록한 블록을 네트워크에 제안하고, 과반수의 동의를 받아 블록으로 인정받습니다. 그렇다면 왜 이렇게 복잡하게 검증을 할까요? 이렇게 복잡한 과정을 거쳐 보안을 유지하는 이유는 아무도 믿을 수 없기 때문입니다.

그렇다면 누구나 검증할 수 있을까요? 네 맞습니다. 누구나 검증 가능합니다. 왜냐하면 블록체인은 기본적으로 공개된 시스템으로 누구나 참여할 수 있기 때문입니다. 하지만 누구나 참여 가능하기에 다음과 같은 문제점들이 존재합니다.

1. 네트워크의 모든 노드가 블록을 만들 수 있기 때문에, 누구의 블록을 동기화 해야하는지에 합의해야한다.

2. 악의적인 참여자(비잔틴 노드)가 네트워크에 참여해도 정상적으로 작동해야 한다.

만약 A가 1BTC만 보유하고 B와 거래를 할 경우, 다음과 같은 이중지불 공격이 가능합니다.

51% 어택 : A가 조작된 트랜잭션이 담긴 블록을 제안하고, A의 통제하에 51%이상의 노드들이 해당 블록이 유효하다고 인정하게 만듭니다. 즉 A가 B에게 1BTC를 보내도, A의 지갑에 1BTC가 남아있는 상황을 의미합니다.

레이스(Race) 어택 : A가 거래를 위해 B에게 1BTC 보냄과 동시에 자신에게 1BTC를 보낼경우, 자신(A)에게 보낸 트랜잭션이 기록된 블록은 인정되고 B에게 보낸 트랜잭션은 유효하지 않다고 판명되게 만듭니다. 즉 이미 거래는 성사되어 A는 자리를 떠났다면, B는 물건을 내어주고 돈을 받지 못한 상황을 의미합니다.

(5) 그렇다면 어떻게 검증할까?(PoW : 작업증명)

앞의 문제들을 방지하고자 블록을 누구나 만들 수 있지만, 아무나 제안할 수 없게 만들어야 합니다. 그래서 비트코인 네트워크에서는 **작업증명(Proof of Work)**라는 방식을 통해 네트워크의 보안과 신뢰성을 유지합니다.

작업증명(Proof of Work) 이해하기

'작업(Work)'은 블록헤더의 논스(nonce)값을 구하는 행동을 의미하고, '증명(Proof)'은 논스값을 구한 노드가 블록을 제안할 수 있는 권한자(Validator)로 권한을 얻는 것에 대한 합의를 의미합니다. 이러한 작업을 하는 노드들을 채굴자(Miner)라고 부릅니다.

논스(Nonce) 이해하기

블록을 네트워크에 제안하기 위해서 채굴자가 풀어야 할 문제는 ‘해시함수의 결과가 n개의 0으로 시작하는 임의의 값, 즉 논스값(Nonce)을 찾아라’ 입니다.

위에서 설명했듯이, 해시함수의 출력값으로부터 입력 데이터를 유추할 수 없습니다. 입력 데이터가 조금만 변경되어도 출력값이 완전히 바뀌기 때문에, 채굴자들은 논스값을 무작위로 해시함수에 대입합니다.

여기서 몇 개의 0으로 시작하는 블록 해시값을 찾아야하는지를 나타내는 기준을 타겟(target) 이라고 하고, 이러한 해시값을 찾기 위한 난이도를 어려운 정도(Difficulty)라고 합니다. Difficulty는 작업 수행을 위해 소모되는 컴퓨팅 파워의 양에 따라서 달라집니다. 즉, 작업의 Difficulty가 높아진다는 뜻은 채굴자가 논스값을 찾는데 더 많은 무작위 대입 작업을 실행해야 한다는 것을 의미합니다.

(6) 그렇다면 누가 검증할까?

그렇다면 누가 이렇게 복잡하고 자신의 시간과 컴퓨팅 파워를 사용해 거래내역을 기록하고 검증할까요? 누군가 검증해주기를 기다렸다가, 검증된 블록을 전달받아 보관하면 되는 것이 아닐까요??

비트코인 네트워크는 위의 PoW를 통해 블록을 제안한 검증자에게 검증을 해준 대가로 보상을 지급합니다. 하지만 이 보상은 원화나 달러와 같은 법정화폐가 아닌 암호화폐로 지급합니다.(비트코인 네트워크에서는 비트코인을 지급합니다.) 대부분의 암호화폐의 특징은 가치가 실시간으로 변동하는데, 암호화폐의 가치에 영향을 주는 특성 중 네트워크의 사용자가 많아질수록 가치가 상승하는 특성이 있습니다. 즉, 네트워크 사용자가 많아지려면 네트워크가 신뢰성 있게 운영되어야 합니다. 그렇기에 검증하는 참여자는 자신의 보상의 가치를 높이기 위해 매번 정확하게 거래를 검증해야합니다. 이를 광산에서 광물을 채굴하는것에 빗대어 "비트코인을 채굴한다"라고 표현합니다.

 

3. 블록 내 데이터는 어떻게 네트워크 내로 전파되는가?

위의 과정들을 통해 블록이 채굴되면, 채굴자는 새로 채굴한 블록에 대한 메시지를 다른 채굴자들에게 전달합니다. 이렇게 메시지를 다른 네트워크 참여자들에게 전달하는 과정을 브로드캐스트 (Broadcast)라고 부릅니다. 다른 채굴자들은 전달받은 새 블록이 유효한지 확인합니다. 새 블록이 유효하다면, 복사본을 만들어 자신의 저장소에 저장하면 해당 트랜잭션이 완료되도록 합니다.

브로드캐스트 (Broadcast) 과정 (by Irene Lee)

채굴자들은 이전 블록의 출력된 해시를 포함하여 저장하기 때문에 모든 블록이 서로 연결되는 형태를 띄고(블록+체인=블록체인), 이것이 하나하나가 블록체인으로 간주합니다. 각각의 채굴자들이 가지고 있는 복사본들, 즉 블록체인들 중 가장 많은 계산 작업이 투입된 블록체인, 가장 긴 블록체인이 신뢰할 수 있는 체인으로 선택됩니다.

 

4. 블록에는 어떤 데이터가 담길까?

위에서 살펴본 것처럼 퍼블릭 블록체인에는 방대한 양의 정보가 담겨 있고, 노드들은 계속해서 이 정보들을 검증합니다. 그렇다면, 과연 이 블록에는 어떤 정보가 담겨있고 어떻게 구성되어 있을까요?

블록의 구조는 크게 블록 헤더와 블록 바디, 2가지로 나누어 볼 수 있습니다.

블록 헤더는 버전, 이전 블록 해시, 머클루트, 타임, 난이도 목표, 논스로 구성된 6가지 블록의 주요 정보들이 담기는 부분입니다. 블록 헤더에는 블록의 모든 거래정보를 요약한 특정 값(머클루트)가 들어있습니다. 따라서 이 블록 헤더를 저장함으로써, 라이트 노드는 적은 용량만으로도 블록체인의 주요 정보들을 파악해 블록체인 네트워크에 참여할 수 있습니다.

블록 바디는 실질적인 거래정보(트랜잭션)이 기록되는 부분이며, 상세한 트랜잭션들의 내용이 기록되는 부분입니다.

지금부터는 이 블록의 구성요소 중 블록 해시와 블록 헤더에 대해 조금 더 자세히 살펴보도록 하겠습니다. 아래 그림을 통해 살펴봅시다.

출처: 스팀잇 블로그

블록 헤더의 6가지 요소

버전(Version)

말그대로 해당 블록이 생성된 전체 네트워크의 버전을 뜻합니다. 프로그램의 버전정보와 같은 의미라고 보면 됩니다. (ex. Bitcoin Core 0.7.0)

이전 블록 해시(Previous blockhash)

출처: 비트코인 devguide

블록체인에서 바로 이전 블록의 블록 해시 값입니다. 블록체인은 거래 정보의 묶음인 ‘블록’이 체인 형태로 연결되어 있는 구조입니다. 따라서 이를 증명하기 위해선 연결된 ‘이전 블록’을 나타내주어야 하기에, 이전 블록 해시를 기록해주는 요소가 필요합니다.

머클루트(Merkle Root)

머클 루트를 이해하기 위해선, 머클 트리의 구조를 알아야 합니다.

출처: 비트코인 devguide

간단하게 설명하자면 머클 트리 구조는 그림에서 볼 수 있듯, 트랜잭션을 묶어 해시값을 구하고, 여기서 나온 해시값을 또 묶어 상위 해시값을 구하는 행위를 반복해 결국 하나의 해시값을 도출해내는 형태의 자료구조라고 볼 수 있습니다. 그리고 이 모든 과정을 거쳐 나온 하나의 해시값을 머클루트(Merkle Root)라고 하고, 블록 헤더엔 이것을 기록합니다.

즉, 머클루트는 블록 내의 모든 트랜잭션들의 정보를 요약한 하나의 해시값 이라고 볼 수 있습니다.

타임(Time)

블록의 생성 시간을 의미합니다. 이 타임 스탬프의 기준은 Unix 시간 기준으로 표기 됩니다.

난이도 목표(bits, target)

작업 증명에서 사용되는 난이도의 해시 목표 값을 의미하는 지표입니다.

논스(Nonce)

해시 값을 계산하기 위한 임의 값으로, 블록헤더의 구성 요소 중 유일하게 변경 가능한 값 입니다. 이 nonce 값을 1씩 변경해가며, 블록 해시를 계산하고 특정 해시 값보다 작게 나오는 값을 찾으면 작업 증명이 완료되는 구조 입니다.

🚧 난이도 목표와 논스 값에 대해서는 위에서 다룬 ‘그렇다면 어떻게 검증할까?(PoW : 작업증명)’ 파트에서 더 자세한 내용을 확인해주세요.

블록 바디

출처: twitter(@atomicBTC)

블록 바디에는 실질적인 트랜잭션 기록들이 담기게 됩니다. 여기서 실질적 트랜잭션은 Coinbase 트랜잭션부터 해당 블록에서 생성된 모든 트랜잭션을 뜻합니다.

블록 해시(Hash of the block)

블록 해시는 블록헤더 정보 요소 6가지의 모든 합을 SHA256으로 변환한 결과 값입니다. 이를 통해 블록은 자신만의 고유 해시 값을 갖게 됩니다. 이는 블록의 ‘이름표’ 역할을 합니다. 블록 해시 값을 통해 사용자는 블록을 지칭할 수 있습니다.

 

5. 블록체인의 원리로 인한 장단점은 무엇인가?

여기까지 블록체인의 작동 원리에 대해 다뤄보았습니다. 블록체인은 기존 데이터베이스와 다른 형태로 데이터를 저장하는데요, 이러한 방식에 따른 장점과 단점이 존재합니다.

장점에 대해 먼저 알아봅시다. 첫 번째로, 탈중앙성을 통해 향상된 보안입니다. 중앙화된 데이터 저장과 반대로 여러 명의 블록체인 네트워크 참여자들이 각각 복사본을 저장하기 때문에, 한 참여자로 인한 문제가 발생해도 데이터에 대한 신뢰성과 가용성을 보증할 수 있습니다. 중앙화된 서버의 경우 해당 서버나 데이터베이스에 문제가 생길 시 전체 이용자들이 데이터 접근이 어려워지는 것과는 반대되는 상황입니다.

두 번째로, 안정성입니다. 유효성이 확인된 블록에 등록된 데이터를 제거하거나 변경하기는 매우 어렵습니다. 블록체인은 모든 변경 사항이 분산된 공개 원장에 영구적으로 기록되고 추적이 가능하며, 데이터가 담긴 블록이 체인 형태로 순차적으로 연결된 구조이기 때문에 해당 데이터를 수정하기 위해서 이후 블록들까지 수정해야 하기 때문입니다.

다음으로, 신뢰를 필요로 하지 않는다는 것입니다. 기존 결제시스템의 경우, 은행 혹은 신용카드, 국가 등에 대한 중개자에게 의존하기 때문에 참여자들에 대한 신뢰(Trust)가 필요 합니다. 하지만, 블록체인은 신뢰할 수 있는 중개자에 의존하는 것이 아닌(Trustless) 누구나 참여 가능하며, 전세계적으로 분산된 네트워크 속 채굴을 통한 트랜잭션 검증을 진행합니다. 즉 블록체인은 검증된 거래 내역을 모두에게 투명하게 공개하여 참여자들에 대한 신뢰 리스크와 중개자 이용에 따른 비용을 낮춥니다.

하지만, 아직까지 한계점들도 존재합니다. 비트코인 블록체인의 ‘51% 공격’을 대표적인 예시로 들 수 있습니다. ‘51% 공격’은 50% 이상의 네트워크 리소스를 점유하고 있는 집단 혹은 개인이 블록 검증과 트랜잭션 처리를 조작하는 것입니다. 이는 이론상으론 가능하지만, 현실적으로 네트워크 지분이 클수록 해당 네트워크의 신뢰가 무너진다면 큰 피해를 입기 때문에 가능성은 희박합니다.

또한, 각 참여자들이 데이터를 저장해야 하고, 시간이 갈 수록 데이터가 누적되어 그 크기가 커지기 때문에 저장소 관리가 어렵다는 문제도 존재합니다. 채굴의 과정의 경우, 과다한 컴퓨팅으로 인해 환경 문제도 발생하며, 개념적인 어려움과 개인 키 사용 등에 대한 사용자 진입 장벽 또한 한계점으로 지적됩니다.
 

 

 

-> '블록체인의 원리' 원문 보러가기
 

 

 

주의사항
본 글에 기재된 내용들은 작성자 본인의 의견을 정확하게 반영하고 있으며 외부의 부당한 압력이나 간섭 없이 작성되었음을 확인합니다. 작성된 내용은 작성자 본인의 견해이며, (주)크로스앵글의 공식 입장이나 의견을 대변하지 않습니다. 본 글은 정보 제공을 목적으로 배포되는 자료입니다. 본 글은 투자 자문이나 투자권유에 해당하지 않습니다. 별도로 명시되지 않은 경우, 투자 및 투자전략, 또는 기타 상품이나 서비스 사용에 대한 결정 및 책임은 사용자에게 있으며 투자 목적, 개인적 상황, 재정적 상황을 고려하여 투자 결정은 사용자 본인이 직접 해야 합니다. 보다 자세한 내용은 금융관련 전문가를 통해 확인하십시오. 과거 수익률이나 전망이 반드시 미래의 수익률을 보장하지 않습니다.
본 제작 자료 및 콘텐츠에 대한 저작권은 자사 또는 제휴 파트너에게 있으며, 저작권에 위배되는 편집이나 무단 복제 및 무단 전재, 재배포 시 사전 경고 없이 형사고발 조치됨을 알려드립니다.