Search

블록체인의 원리

블록체인(Blockchain)은 탈 중앙화된 분산 원장 관리 시스템입니다. 여기서 탈 중앙화(Decentralization)란 특정 주체가 권한을 가지고 무엇인가를 결정하거나 제약할 수 있는 것이 아닌 분권화 되어있는 시스템 위에서 모든 규칙이 동일하게 적용되는 것을 의미합니다. 비트코인의 블록체인은 완전하게 탈 중앙화 되어있으므로, 어떤 주체가 함부로 시스템 규칙을 변경거나 거래 내역을 수정할 수 없고 특정인을 제약하거나 또는 검열할 수 없으므로 누구나 안심하고 자유롭게 비트코인을 사용할 수 있습니다.
비트코인의 송금은 디지털 서명과 함께 트랜잭션(Transaction)을 생성하고 블록체인 네트워크에 새로운 거래로 추가함으로써 처리됩니다. 블록체인은 이런 트랜잭션들이 저장되어 있는 블록(Block)들의 모음입니다. 블록은 생성 주기에 따라 시간이 지날수록 매번 새로운 블록이 생성되고 블록체인에 추가되게 됩니다. 블록은 생성될 때마다 그 시간(타임스탬프)을 기록하기 때문에 특정 거래의 체결 시간을 확인하려면 해당 트랜잭션이 포함된 블록의 생성 시간을 확인하면 됩니다.
mempool.space에서 812218번째 블록이 생성된 것을 캡처했습니다. 비트코인의 경우 평균적으로 10분다 새로운 블록이 생성되고 블록체인에 추가되게 됩니다.
새롭게 생성된 블록은 기존 블록들과 함께 그 내용을 수정하지 못하도록 하는 암호 기술을 적용하여 블록체인에 “체인”하는 과정을 거칩니다.

블록 “체인”하는 해시 암호화

비트코인 블록체인의 모든 블록들은 SHA-256 암호 알고리즘을 사용한 해시(Hash) 함수를 통해 일렬 정렬되어 있습니다. 블록마다 연쇄적으로 해시 함수가 적용되어 있어서 그 결과 값인 해시만 비교 검증하는 것만으로도 블록에 저장된 데이터가 변조 되었는지 여부를 확인할 수가 있는데요. 이는 아래와 같은 해시 함수의 특징 때문에 가능합니다.

해시 함수의 특징

1.
같은 입력 값에 대해 항상 같은 출력 값을 가짐
2.
출력 값은 항상 같은 길이를 가지며(비트코인의 경우 해시는 항상 64자리의 값을 가짐) 넓은 범위에 고르게 분포함
3.
암호화하여 출력된 해시는 복호화(암호화된 값을 원래의 값으로 돌리는 과정)가 불가능하며 출력 값들은 선형적 관계가 없으므로 서로 연관성을 찾을 수 없음
위 3가지 특징으로 인해 함수의 출력 값인 해시만으로는 원본 데이터는 전혀 알 수 없지만 원본 데이터가 조금만 바뀌더라도 출력 값인 해시는 완전히 다른 값을 가지기 때문에 이를 비교해 원본 데이터의 변형여부를 확인할 수가 있습니다.
첫번째 문장의 맨 앞 “T”만 소문자 “t”로 변경해 해시 함수를 실행해보면 첫번째 문장의 해시와 전혀 연관성을 찾아볼 수 없는 완전하게 다른 해시를 출력합니다. 원본의 아주 미세한 차이가 있더라도 출력 해시는 완전 달라지게 됩니다.

해시를 활용한 블록체인의 데이터 무결성 보장

블록체인은 이 해시의 특성을 활용한 위변조 검증을 통해 데이터의 무결성을 보장합니다. 새로운 블록이 생성되고 기존 블록과 “체인”되는 과정은 신규 블록이 가지고 있는 모든 트랜잭션 데이터를 해시 함수를 사용해 머클 해시를 만들고, 넌스(Nonce)라고 하는 비트코인의 채굴과정에서 찾은 값과 바로 이전 블록의 최종 해시를 함께 사용하여 신규 블록의 최종 해시를 만들어 냅니다. 그리고 이 해시는 다시 다음번 블록이 생성될 때 블록의 최종 해시를 만들어 내기 위한 입력 값으로 사용됩니다.
블록 생성과정에서 이전 블록 해시와 현재 블록의 데이터를 함께 사용하여 블록 해시를 생성합니다. 이 과정의 연속으로 모든 블록은 일직선 상에 연속적으로 해시되므로 원본 데이터의 위 변조를 방지합니다.
모든 블록과 블록의 데이터가 직렬로 해시되므로 만약 악의적인 의도를 가진 누군가가 중간의 거래내역을 위조한다면 머클 해시가 변경될 것이고 머클 해시를 포함하는 블록 해시도 완전 다른 값을 가지게 됩니다. 블록체인은 이를 검증하여 거래내역의 위 변조를 막고 모든 데이터가 무결하다는 것을 보장합니다.

검증된 블록을 전체 네트워크로 전파

새로운 블록을 생성하거나 검증하여 비트코인 거래내역을 블록체인 데이터베이스에 저장하고 유지하는 역할을 노드(Node)라고 합니다. 여러분이 비트코인 코어 앱을 컴퓨터에 설치한 뒤 실행하여 블록체인을 동기화하고 검증하도록 한다면 여러분의 컴퓨터도 비트코인 네트워크의 노드 중 하나가 되는 것입니다. 노드는 통신 가능한 다른 노드와 P2P 형태로 통신하여 서로의 블록체인 데이터를 공유하게 됩니다.
비트코인 코어 앱은 오픈소스이므로 누구나 쉽게 컴퓨터에 설치하여 블록체인 데이터를 공유하고 검증할 수 있습니다.
비트코인 블록체인은 이렇게 수 많은 노드에 의해 분산되어 유지 관리되므로 단일 실패 지점(single point of failure, SPOF)이 없습니다. 어떤 노드에서 오류가 발생하여 잘못된 블록을 생성하거나, 해커가 특정 노드를 해킹해 블록체인의 거래내역을 변조하거나 하는 경우가 발생하더라도 네트워크에 존재하는 다수의 노드가 이를 정상적인 블록체인 데이터로 복구하도록 합니다.

블록체인을 유지 관리하는 컨센서스

모든 노드의 블록체인 원장을 올바르게 유지하는 것은 비트코인의 컨센서스(Consensus) 알고리즘에 따라 처리됩니다. 컨센서스는 우리 말의 합의라는 뜻처럼 수 많은 노드가 블록 데이터를 올바르게 검증하고 잘못된 데이터를 복구하도록 하는 비트코인의 프로세스입니다. 비트코인은 작업 증명(proof of work, PoW) 방식의 컨센서스 알고리즘을 가지고 있습니다. 작업 증명은 말의 뜻 그대로 노드의 컴퓨터가 높은 작업 능력을 증명하여 블록체인 데이터를 검증하는 권한을 갖게 되는 것을 의미합니다.
작업 증명의 과정은 신규 블록 해시를 생성하기 위해 필요한 넌스(Nonce) 값을 찾는 것에서 부터 시작합니다. 넌스란 해시 함수를 실행하여 출력하였을 때 특정 조건을 만족하는 해시를 만들어내는 임시 입력 값을 뜻합니다. 위에서 설명한 해시의 입력 값을 전혀 알 수 없고 해시 간에 연관성이 전혀 없는 특성으로 인해 넌스를 찾아내기 위해서는 수 많은 연산을 반복하여 무한정 값을 대입해보는 방법 밖에 없습니다. 이 때문에 넌스를 찾는 것은 빠른 연산속도를 가진 컴퓨터가 많을 수록 유리해 집니다.
넌스를 찾는 것에 성공하면 새로운 블록을 검증하고 생성할 수 있게 됩니다. 신규 블록을 생성하는데 성공하면 일정량의 비트코인을 보상으로 받습니다. 컴퓨터가 일을 하여 비트코인을 보상으로 받는 것이 사람이 광산에서 금을 채굴하는 것과 유사하다고 해서 작업 증명의 과정을 두고 비트코인을 채굴한다고 표현하기도 합니다.
이외에도 비트코인은 그 희소성 때문에 디지털 금으로도 불립니다. 비트코인은 2100만개 정도로 총 발행량이 정해져 있습니다. 블록 생성 보상은 4년마다 반으로 줄어들며 나중에는 결국 블록 보상이 0이 되어 신규 비트코인이 더 이상 발행되지 않게 됩니다. 이는 사토시가 비트코인의 인플레이션 발생을 방지하기 위해 의도적으로 총 발행량을 제한해 둔 것입니다.
모든 비트코인이 채굴되었다고 하더라도 블록 생성 보상이 완전히 없어지는 것은 아닙니다. 블록에 포함되는 모든 트랜잭션에는 비트코인 전송에 대한 인센티브로 지급되는 수수료가 포함되어 있으므로 신규 비트코인을 보상으로 받지는 못하더라도 여전히 이 수수료는 블록 생성 보상으로 받을 수 있습니다.

 비트코인(Bitcoin)이란?

비트코인 관련 목록