블록체인은 분산 원장(Distributed Ledger) 기술을 기반으로 하는 일련의 암호화된 시계열 구조를 지닌다. 블록 내에 기록된 거래(transaction), 계약 등의 개별 프로세스 과정들은 이전 블록의 정보(해시값)를 포함한 형태로 해시(Hash)화되어 블록체인 네트워크 내의 합의(consensus) 과정을 통해 승인된다.
블록체인은 암호화폐(Cryptocurrency)와 혼동되기도 하는데, 블록체인은 암호화폐를 포함하는 상위의 개념이고, 암호화폐는 블록체인을 기반으로 발행되고 유지되는 디지털 자산으로 볼 수 있다. 본 글에서는 블록체인을 구성하는 기술적 요소들인 P2P(Peer to Peer) 네트워크, 합의 알고리즘, 전자서명과 해시(Hash) 알고리즘에 초첨을 맞추어 이들 요소들에 대한 개론적 설명을 제공하고자 한다.
P2P 네트워크
블록체인 네트워크 개별 노드에서 발생한 이벤트들에 대한 정보는 네트워크 내 여러 노드들로 전파되어 블록에 쌓이게 되는데, 네트워크 각 노드에서 분산형 원장 기술을 구현하기 위해서는 클라이언트 서버형 네트워크가 아닌 P2P 네트워크를 구축하여야 한다 ([그림 1]).
합의 알고리즘
합의 알고리즘은 P2P 네트워크를 통해 전송된 거래 내용들이 하나의 블록으로 완성되어 체인화되는 과정에서, 해당 블록의 진위를 확정하기 위한 네트워크 참여자의 합의 절차 알고리즘이다. 대표적으로 비트코인에서 사용된 작업증명(Proof of Work) 방식이 있는데, 네트워크 참여자(노드)들이 경쟁률에 따라 난이도가 변화하는 퍼즐 문제를 풀어 블록을 완성시키고 그 보상으로 암호화폐를 획득(채굴)하게 되는 알고리즘이다. 작업증명을 나타내는 그림 2를 보면, 노드 0, 1, 2 및 3의 네 참가자들이 블록을 빨리 완성하는 경쟁을 한다. 처음 블록은 노드 0이 완성하였고, 두 번째 블록은 노드 1과 노드 2가 거의 동시에 블록을 만들어 블록체인의 분기(포크)가 발생되었다. 이후 노드 2의 블록과 연결된 블록 작업을 수행한 노드 3이 가장 빨리 블록을 완성하여 노드 2가 만든 블록만이 승인되어 블록체인 상에 남게 되었다.
작업증명 방식은 암호 화폐 채굴을 위한 경쟁을 통해 참여자들 간의 자율적인 (의도하지 않은) 신뢰가 구축된다는 역설적 성격을 지닌다. 서로를 알지 못하는 참여자들이 이익을 추구하기 위해서 부정한 방식을 택할 수 있는데, 만약 부정을 단합한 세력이 50%를 초과하지 못한다면 진실을 따르는 다수의 참여자들의 채굴 성공으로 인해 부정한 세력은 손해를 보게 된다.
이러한 부정 참여자에 관련된 문제는 비잔틴 장군 문제(Byzantine General Problem)로 알려져 있는데 작업증명 방식을 포함한 블록체인의 합의 알고리즘들은 이러한 비잔틴 오류 문제에 대한 해결 방안을 제시하고 있다.
작업증명 방식은 기본적으로 “블록을 완성하기 위한 퍼즐을 누가 빨리 푸는가”라는 문제로 귀결되는데, 작업증명 방식을 통해 분권화(decentralization)를 지향한 사토시 나카모토(필명, Satoshi Nakamoto)의 초기 의도와는 달리 보다 빠른 연산을 가능케 하는 ASICs(application specific integrated circuits)와 같은 고성능 컴퓨팅 인프라를 대량으로 확보한 소수의 채굴 집단(mining pool)이 암호화폐의 채굴을 독점화하는 현상이 일어나게 되었다.
최근 암호화폐 가격의 상승으로 인해 비싼 장비를 들여 전기를 많이 사용하고도 이익을 얻을 수 있게 되자 암호화폐 채굴자들 간의 ASICs에 의존한 채굴 경쟁은 더욱 심해지게 되었고 이에 따른 암호화폐 채굴의 고비용 구조도 심화되었다.
최근에 개발된 체세대 블록체인들은 작업증명 방식이 아닌 지분증명(Proof of Stake), Pratical Byzantine Fault Tolerance(PBFT)와 같은 다른 방식들을 채택하고 있는데, 이는 작업증명 방식이 갖는 비용적 비효율성(cost inefficiency)을 극복할 수 있기 때문이다.
지분증명은 참여자의 블록 완성 가능성이 그 참여자의 관련 암호화폐 보유량과 보유기간에 비례하여 증가하는 합의 알고리즘 방식인데, 해당 암호화폐를 많이 보유한 참여자일수록 그 화폐의 가치를 보존하기 위해 부정한 행위를 하지 않을 것이라는 전제에 바탕을 두고 있다. 최근에 지분증명의 개선된 형태로 등장한 위임 지분증명(DPoS, Delegated Proof of Stake)은 해당 암호화폐를 많이 보유한 참여자들이 더 많은 투표권을 행사하여 블록을 확정하는 대리인들을 선출하고 이들에게 블록을 승인하게 하는 권한을 부여하는 방식이다. 이더리움은 현재 작업증명 방식을 사용하고 있지만, 궁극적으로는 지분증명 방식을 도입할 예정이다.
Practical Byzantine Fault Toleranace(PBFT)는 다수결에 의해 블록을 확장하므로 분기가 발생하지 않고, 참여자의 악의적 실수에 강한 내성을 갖으며, 처리속도가 빨라 기업형 블록체인(Enterprise Blockchain)에 주로 많이 사용된다. 하지만, 블록체인 네트워크 참여자가 증가하면 통신량이 증가하고 처리량이 감소하는 단점을 지니고 있다.
PBFT는 모든 블록체인 네트워크 참여자를 알고 있어야 하는데, 만약 악의를 지닌 노드들의 개수를 f라 하면, 전체 참여 노드들의 개수는 3f+1 이상이어야 한다. 그림 3은 PBFT의 예를 보여주고 있다. 처음 client가 모든 노드들에게 요청을 전달하면, Replica 0이 리더가 되고 Replica 1, 2 및 3에게 그 요청을 각각 송신한다. Replica 1, 2 및 3은 ‘prepare’ 시점에서 총 2f개 (아래 그림에서는 2개) 이상의 요청을 수신하면 리더 노드(Replica 0)를 포함한 모든 노드들에 수신한 요청을 전송하고, 각 노드는 ‘commit’ 시점에서 총 2f개 이상의 요청을 수신하면 요청을 실행하고 client에 다시 송신한다.
전자서명
전자서명은 블록체인 내 거래의 진위를 가리기 위해 사용되는데, 시간에 따라 이루어진 전자서명 과정을 되짚어 감으로써 과거 블록체인 상에서 이루어진 거래 내역들을 확인해 볼 수 있다. 거래의 검증에는 거래 당사자의 공개키(Public Key)와 비밀키(Private Key)가 사용되는데, 비밀키는 거래의 전자서명을 위해 사용되며, 공개키는 전자서명의 검증을 위해 세트로 부여된다. 비트코인을 포함한 여러 블록체인에서는 타원곡선암호(ECDSA)를 사용해 256비트 이상의 공개키 및 비밀키 쌍을 생성한다. 그림 4는 비트코인 블록체인에서 개별 거래에 대한 전자 서명 과정을 보여준다.
해시 알고리즘
해시는 인간의 지문에 비유될 수 있는데, 해시 함수에 입력된 내용이 서로 다를 때 해시 함수의 결과 값들 역시 서로 다른 값을 갖게 된다(실제 같은 값을 갖게 되는 것이 현실적으로 불가능하다). 즉 해시 함수의 결과 값은 입력 값에 대응되는 고유한 값을 갖게 된다. 또한, 해시 함수는 역함수가 존재하지 않아 그 결과 값을 가지고 입력 값을 알아낼 수 없다. 해시 함수의 이런 성질은 블록체인 상의 과거 기록들을 변조할 수 없는 비가역적 특성을 부여하고, 이를 이용해 과거 데이터의 위조 변조 유무를 가려 낼 수 있다.
블록체인에서 블록은 거래 내역 정보와 블록 헤더(header)로 구성되는데, 해시 함수는 거래 내역 정보를 Merkle tree 형태로 해시화하고, 이 해시 트리가 포함된 블록헤더 부분을 해시화하는 데에도 사용된다. 이전 블록 헤더의 해시 값도 현 블록 헤더에 포함되어 해시화되는데 해시 함수의 고유성으로 인해 과거 블록들의 내용 중 일부가 변조되는 경우 이후에 연계되는 모든 해시 값들이 변하게 된다. 따라서, 과거 시점의 자료에 대한 위조나 변조에 성공하려면 이후 블록체인들에 존재하는 모든 해시 값들을 바꿔야 하므로 블록체인에서의 해시 함수 사용은 기록에 대한 오류나 부정을 원천적으로 봉쇄할 수 있는 장점을 지닌다.
그림 5는 비트코인 블록체인에서 사용되는 SHA256이라는 해시 함수의 역할을 보여주는 그림이다. 블록은 블록헤더와 거래 기록 영역으로 나뉘어져 있는데, 블록헤더에는 거래기록들에 대한 해시 루트(Hash root)와 이전 블록에 대한 해시 값, 그리고 블록 승인을 받기 위한 작업증명 퍼즐의 답인 ‘Nonce’로 구성되어 있다.
해시와 관련된 퍼즐의 난이도는 블록체인의 채굴과정에 참여하는 해시 파워(Hash power, 또는 Hash rate)에 비례하여 증가하게 되고, Nonce는 해시 함수의 결과 값을 타겟 값 미만으로 확정하는 입력 값으로 결정된다.
블록헤더에 담긴 해시 루트, Nonce, 이전 블록에 대한 해시 값은 다시 해시 함수에 입력되어 그 결과 값이 다음 블록의 블록헤더 부분에 기입되게 된다. 이러한 블록체인의 연쇄적 해시화 과정을 통해 과거 기록에 대한 위조나 변조는 원천적으로 방지되는 무결성 효과를 얻는다.
참고문헌
1. 아카히네 요시하루, 아이케이 마나부, 양현 옮김, 블록체인 구조와 이론: 예제로 배우는 핀테크 핵심 기술, 위키북스, 2017
2. Arvind Narayanan, Joseph Bonneau, Edward Felten, Andrew Miller, Steven Goldfeder, Bitcoin and Cryptocurrency Technologies: A comprehensive Introduction, Princeton University Press, 2016