블록체인의 기본 개념(1)
2019년부터 시작된 나의 블록체인 공부.. 티스토리로 작성했던 글을 다시 가져오면서 순서대로 정리해볼까 한다.
가장 먼저, 블록체인 기본 개념에서 블록체인의 개념과 특징, 블록체인의 핵심기술과 블록체인의 종류를 살펴보려고 한다. 이 포스팅에서는 블록체인의 개념과 특징, 핵심기술에 대해서 이야기를 한다.
※ 블록체인의 이해
블록체인의 개념
비트코인은 2008년 미국 금융 위기로 등장했다. 미국 정부는 금융기관들의 실패 위기를 해결하기 위해 많은 양의 달러를 찍어내기 시작했다. 그 결과, 미국 달러의 가치는 추락하고 물가 폭등에 금리도 바닥이 되었다. 이때의 기회로 소수의 자본가는 막대한 부를 챙겼지만, 대다수의 경제 구성원은 엄청난 손실을 보았다. 기존 화폐 시스템에 대한 불신으로 이어지고 배신감을 느낀 지식인들은 새로운 화폐를 찾아 나섰다. 이러한 이유로 사토시 나카모토라는 가명을 쓴 가상의 인물은 ‘비트코인(Bitcoin)’이라는 탈 중앙화된 디지털 화폐를 개발하게 된 것이다.
여기까지 정리하면, 블록체인의 등장 배경에는 중앙화 시스템의 문제를 가졌다는 사실이다. 이러한 문제점을 해결하고자 블록체인은 중개자를 없애고 중앙집중적으로 수집되던 데이터를 모든 사용자에게 분산하여 저장하는 것이다.
비트코인은 통화를 발행하고 관리하는 중앙 기관(은행, 정부 등) 존재하지 않고 개인과 개인이 직접 거래하는 P2P(Peer to Peer) 방식이다. 이러한 방식은 중앙 기관의 비합리적인 규제와 운영에서 자유롭다. 비트코인과 같은 암호화폐를 구현할 수 있게 하는 기술이 바로 ‘블록체인(Blockchain)’이다.

그림1. 기존 거래 방식과 블록체인 방식 차이
다시 말해 블록체인은 데이터 분산 처리 기술이다. 블록체인 네트워크상에 연결된 개개인의 주체들을 노드라고 한다. 모든 노드가 데이터를 주거나 받을 수 있으므로 서버가 될 수 있고 클라이언트도 될 수 있다. 이렇게 저장된 데이터들의 묶음을 블록이라고 하며, 블록들이 보안과 증명을 위해서 서로 시간 순서대로 연결되는데 체인처럼 연결된다고 해서 블록체인이라고 불린다.

그림2. 블록체인 도식화
모든 노드가 특정 합의 알고리즘의 표준에 따라 블록을 검증하여 과반수의 합의를 통해 위‧변조를 방지하여 블록이 생성된 이후에는 단순하게 수정 혹은 삭제가 어렵다.
블록체인의 특징
블록체인은 다음과 같은 특징을 가진다.
-
탈중앙성(Decentralization)
P2P 기술을 이용하여 블록체인 데이터를 정부 혹은 은행과 같은 제3자가 아닌 네트워크에 참여하는 노드들이 직접 검증과 승인, 합의 등의 활동을 하며 분산원장을 관리한다.
-
투명성(Transparency)과 익명성(Pseudonymity)
새로운 블록이 생성되면, 모든 노드에 전송되어 공유된다. 그러므로 모든 노드는 블록의 거래 기록에 접근 가능하며, 감시가 가능하므로 거래의 투명성이 보장된다. 또한, 참여 노드들에 대한 개인정보는 드러나지 않으므로 익명성을 보장한다.
-
불변성(Immutability)
블록이 생성되고 연결된 경우, 블록을 수정하거나 삭제하기 어렵다. 새로 블록을 생성할 때, 이전 블록의 해시)를 이용하므로 중간에 연결된 블록의 내용을 수정하려면 신규 블록의 수정이 필수적이다. 따라서 중간에 있는 블록의 내용을 수정하거나 삭제하려면 절반 이상의 분산원장을 내용을 모두 수정해야 하는데, 이는 임의적 순간에 실행 불가능하다.
-
가용성(Availability)
블록체인의 데이터는 모든 참여자의 노드에 분산 저장되므로, 어느 한 노드에 장애가 발생하여도 시스템을 유지할 수 있다. 이러한 특징들로 인해 수수료 절감과 보안 비용 절감 등 경제적 효과로서 비용 절감에 높은 기대가 있다.
블록체인의 핵심기술
블록체인 기술의 핵심 구성요소는 크게 4가지로 나눌 수 있다. (1) P2P 네트워크, 분산원장 기술(Distributed Ledger Technology, DLT) (2) 암호화 기술 (3) 스마트 계약(Smart Contract) (4) 합의 알고리즘이다.
(1) P2P 네트워크, 분산원장 기술(DLT)
P2P(Peer-to-Peer) 네트워크란 클라이언트-서버 컴퓨팅(client-server computing) 방식을 벗어나 동등 계층 참여자들로 구성되는 네트워크이다. 즉 중앙 서버 없이 컴퓨터(노드)끼리 각각 서버와 클라이언트가 되고, 서로 사이를 연결하여 데이터를 주고받는 것이다.

그림3. 클라이언트-서버형 시스템과 P2P 시스템 차이
블록체인은 P2P 네트워크를 통해서 관리되는 데이터 분산 처리 시스템으로, 이때 거래 데이터는 주로 장부(Ledger)에 담기는데, 중앙 서버 한 곳에 저장되는 것이 아니라 네트워크에 참여하는 모든 노드에 저장 및 보관된다. 이렇게 모든 노드가 거래 정보를 기록한 원장 데이터를 공동으로 기록 및 관리하기 때문에 분산원장 기술이라고도 부른다. 분산원장은 블록체인을 구성하는 가장 중요한 요소 중 하나로, 탈중앙화된 시스템으로 만들어주는 핵심기술이다.
(2) 암호화 기술
블록체인에서 주로 사용되는 암호화 기술은 크게 해시(Hash) 함수, 공개키 암호화 알고리즘(Public Key Cryptography), 전자서명(Digital Signature)이다.
해시 함수는 어떤 데이터를 일정한 길이를 가지는 데이터로 변환하는 기술이다. 해시 함수 중에 많이 사용하는 종류는 SHA-256으로, 256은 출력의 비트(bit) 수를 나타낸다. 따라서 SHA-256은 어떤 입력값에도 항상 출력되는 해시값의 크기가 256bit(or 32byte)이다. 입력값 중 비트의 일부만 변경되어도 전혀 다른 결괏값을 출력하는 눈사태 효과에 따라 해시 함수는 출력된 결괏값을 토대로 입력값을 유추할 수 없다. 이러한 해시 함수는 주로 데이터가 변경되지 않았음을 증명할 때 많이 사용한다.
블록체인에서는 1) 블록 데이터의 증명, 2) 블록 속의 내용이 바뀌지 않았음을 증명하는 2가지 경우에 해시 함수를 사용한다.
1) 블록 데이터의 증명
블록 헤더에 포함된 이전 블록 해시값(Previous Blockchain)과 블록에 대한 해시값이 있다. 블록과 블록이 정상적으로 연결되었음을 증명하는 것이다. 각 블록 헤더에 이전 블록의 해시값이 저장되어 체인 형태의 연결 리스트(Linked List)로 되어있다. 따라서 악의적인 사용자가 이미 기록되어 있는 특정 블록을 변경하려고 한다면 새로운 블록이 생성되기 전에 블록마다 연결된 이전 블록의 해시값을 전부 다 변경해야 하지만 이는 사실상 불가능하다. 이러한 이유로 블록체인은 해시 함수를 이용하여 데이터의 위·변조를 어렵게 구현한 구조라고 할 수 있다.

그림4. 블록체인 상세구조
2) 블록 속의 내용이 바뀌지 않았음을 증명
블록 속의 내용이 바뀌지 않았음을 보이기 전에 머클 트리(Merkle Tree)의 개념을 살펴본다. 머클 트리란 모든 정보를 압축하여 간단하게 표현한 데이터로서, 블록에 포함된 거래 내역을 나무 형태로 만든 것이다. 랄프 머클(Ralph Merkle)이 1979년에 개발한 것으로, 해시 트리(Hash Tree) 또는 이진 트리(Binary Tree)라고 부른다. 머클 트리의 구조는 다음과 같다.

그림5. 머클 트리 구조
위와 같이 머클 트리는 블록 안의 데이터들(tx1, tx2, …. tx6)을 SHA-256으로 암호화하여 각 노드를 해시값의 형태로 나타낸다. 그다음 각 인접한 노드끼리 서로 합하여 또다시 SHA-256으로 암호화한다. 이러한 과정을 반복하여 결국 한 개의 루트 데이터가 만들어진다. 모든 노드는 SHA-256으로 암호화했기 때문에, 데이터끼리 계속 무한히 합쳐져도 노드의 크기는 32 Bytes로 항상 같다. 따라서 다수의 데이터를 하나로 묶어 크기를 줄일 수 있다. 또한, 모든 해시 결괏값은 이전 출력 해시값에 의해 만들어졌기 때문에 데이터가 하나라도 달라지면 최종결과인 머클루트도 달라진다. 따라서 머클루트를 통해서 거래내역의 변동 여부를 쉽게 확인할 수 있다.
머클 트리의 목적은 데이터의 간편하고 확실한 인증을 하기 위함이다. 앞서 말한 대로 거래내역의 변동 여부를 쉽게 확인할 수 있다는 것은 바꿔 말해, 특정 거래를 찾을 때 빠르고 쉽게 효율적으로 찾을 수 있다는 것이다. 이진 트리 방법으로 거래의 수가 N개 증가할 때마다 특정 거래를 찾는 경우의 수는 으로 늘어난다. 예를 들어 그림 5에 나와있는 6개의 데이터 중 H(tx4)를 찾기 위해, 6개 데이터를 전부 다 확인하는 것보다 = 3으로, 3번의 경로만 확인하면 빠르게 찾을 수 있다. 이러한 특성으로 거래 내역을 위조하려는 시도가 있어도 머클 트리의 경로를 따라가면 해시값이 다른 것이 나오게 되어 거래의 위변조도 쉽고 빠르게 알 수 있게 되고 이를 방지할 수 있다. 따라서 각 블록의 모든 거래 트랜잭션(transaction, tx)의 해시값을 머클 트리(Merkle Tree)를 이용하여 트리 구조로 만든 후에 하나의 해시값(Merkle Root)으로 블록 헤더에 저장한다. 향후 거래 내역의 위변조 여부를 검증할 때, 블록 헤더에 저장된 Merkle Root의 값만 비교하여 블록 내에 포함된 개별 거래의 위변조 여부를 검증할 수 있다.
공개키 암호 알고리즘(비대칭키 암호 알고리즘)은 개인키(Private Key)와 공개키(Public Key)라고 부르는 두 키를 쌍으로 사용해서 데이터를 암호화하는 방식이다. 두 키는 서로를 증명하기 위해서 동시에 만들어져야 한다. 개인키는 키를 만든 본인만이 알고 있어야 하며 공개키는 네트워크의 모든 사람에게 공개하여야 한다.
송신자는 수신자의 공개키로 데이터를 암호화하여 수신자에게 암호문을 보낸다. 암호문을 받은 수신자는 자신의 개인키로 암호문을 복호화하여 평문을 볼 수 있게 된다.
블록체인에서는 사용자 계정이 개인키와 공개키 쌍으로 관리된다. 이러한 키를 관리하는 어플리케이션으로는 대표적으로 메타마스크(MetaMask)가 있다. 메타마스크란 블록체인과 상호작용하는데 사용되는 소프트웨어 암호화폐 지갑으로, 지갑의 주소와 키가 발급된다. 그 키를 가진 사용자는 해당 지갑에 대한 접근 권한을 얻는다. 보통 암호화폐 지갑으로 사용자 계정이 관리되는데 여기서 주소는 공개키에 해당하고 키는 개인키에 해당한다.
전자서명은 서명자가 전자문서에 서명하였음을 나타내는 전자적 정보를 의미한다. 내용이 변경되지 않았음과 올바른 사람이 작성했다는 데이터의 무결성과 사용자 인증, 부인방지를 위해 전자서명이 쓰인다. 하지만 전자서명은 메시지의 비밀을 유지하는 기밀성을 제공하지는 않는다.
전자서명은 해싱, 서명, 검증 3가지 기본 단계로 이루어지는 경우가 많다.
- 해시
가장 먼저, 데이터를 해시화한다. 데이터를 반드시 해시해야하는 것은 아니지만 암호화폐의 경우 고정된 길이의 데이터를 다루는 것이 전체 과정을 쉽게 만들기 때문에 보통 해시를 이용하여 고정길이로 만든다.
- 서명
데이터 해싱 후, 공개키 암호화 방식을 사용하여 송신자는 자신의 개인키로 해시 값을 암호화하여 디지털 서명을 만든다. 그리고 송신자는 자신의 디지털 서명과 해시 값을 수신자에게 보낸다.
- 검증
수신자는 송신자의 공개키를 이용하여 송신자가 보낸 디지털 서명을 복호화하여 출력되는 해시 값과 송신자가 보낸 해시 값을 비교한다. 일치한다면 데이터가 변조되지 않았으며 올바른 송신자라는 것을 확인할 수 있다.
전자서명은 블록체인에서 트랜잭션에 서명하고 승인하는 데 사용되기도 하며, 데이터 전송, 계약, 분산신원증명(Decentralized Identity, DID) 등에도 사용된다.
(3) 스마트 계약(Smart Contract)
스마트 계약(Smart Contract)은 제3의 인증기관 없이 개인 간 단순히 금융거래를 하는 것뿐만 아니라 모든 종류의 거래가 프로그래밍을 통해 특정 조건이 충족되었을 때 해당 계약이 이행되도록 하는 기술이다. 스마트 계약은 1994년 컴퓨터공학과 법을 전공한 Nick Szabo라는 사람에 의해 처음 제안되었다.
이러한 스마트 계약은 블록체인 2세대에서 언급되기 시작했다. 블록체인 1세대는 비트코인이고 비트코인은 화폐의 역할로만 존재했다. 하지만 2세대로 넘어오면서 비탈릭 부테린(Vitalik Buterin)이 이더리움을 제안했고, 스마트 계약이라는 개념을 이더리움 블록체인에 도입하여 본격적으로 스마트 계약이 사용되기 시작했다. 다시 말해, 이더리움 또한 암호화폐이지만 화폐의 역할을 더해서 스마트 계약이라는 기능을 활용해 모든 종류의 계약을 자동으로 처리할 수 있도록 했다.
표1. 전통적 계약과 스마트 계약 비교
스마트 계약의 특징은 두 당사자가 서로 신뢰하지 않더라도 계약을 체결할 수 있다는 것이다. 예를 들어 부동산 매매계약에서 매수인이 매도인에게 5원을 지급하면 매매계약을 체결할 수 있다고 하자. 매수인은 반드시 5원(특정 조건)을 지급해야 계약을 체결할 수 있는데, 만약 매수인이 5원을 지급하지 못했다면 스마트 계약은 자동으로 실행되지 않아 미체결된다. 따라서 스마트 계약은 중개인이 없고 서로 신뢰하지 않아도 계약을 이행할 수 있도록 한다. 이러한 스마트 계약의 과정은 코드로 작성되는데, 대표적으로 솔리디티(Solidity)언어로 작성된다.
(4) 합의 알고리즘
블록체인 네트워크에서 모든 노드가 특정 합의 알고리즘의 표준에 따라 블록을 검증하여 과반수의 합의를 통해 위‧변조를 방지할 수 있다. 대표적인 합의 알고리즘에는 다음과 같은 것들이 있다.
작업증명(Proof of Work, PoW)은 최초의 블록체인 증명방식으로 비트코인이 도입한 합의 알고리즘이다. 채굴을 통한 PoW 과정은 목푯값 이하의 블록 해시를 생성하는 ‘임시값(nonce)’을 찾는 행위로, 임시값을 가장 먼저 빨리 찾는 사람이 블록을 생성할 수 있는 권한을 가지고 그 보상으로 코인을 얻는 알고리즘이다. 이와 같은 방식이 마치 금광에서 광부들이 금을 캐는 것과 유사하다고 해여 채굴이라고 불린다. 임시값을 가장 먼저 빨리 찾은 사람(노드)이 블록체인 네트워크에 자신이 만든 블록을 전파하게 되면 모든 노드가 그 블록을 검증하고 합의하여 51% 이상 노드들이 정당하다고 인정해야 블록이 생성된다. 비트코인의 경우 작업 난이도를 조절하여 블록이 10분에 한 개씩 만들어지도록 설정했다. 임시값은 SHA-256을 이용하여 만든다.
이렇게 작업증명은 일한 만큼 보상받는 방식으로 채굴하는 컴퓨터의 성능이 좋으면 좋을수록 더 많은 보상을 받을 수 있다. 그런데 컴퓨팅 파워를 가진 채굴 조직인 마이닝 풀 업체들이 연합하여 전체 네트워크의 51% 이상을 차지하게 된다면 올바르지 않은 블록을 정당하다고 결정하여 보안의 취약성을 일으킬 수 있다. 또한, 채굴을 위해 많은 전기를 사용하여 에너지 낭비와 환경문제를 일으키게 된다. 그래서 이러한 PoW의 단점을 보완하기 위한 대안으로 지분증명이 나왔다.
지분증명(Prove of Stake, PoS)은 PoW의 단점인 컴퓨팅 파워를 소모함으로 많은 전기 에너지를 필요하게 되자 이를 해결하기 위해 나온 것이다. 더 많은 지분(코인)을 가지고 있을수록 그에 비례하여 블록을 생성할 권한을 더 많이 부여받는 방식이다. 참여에 대한 보상은 이자와 같은 방식으로 코인이 지급된다. 예를 들어서 노드 A, B, C가 각 25%, 40%, 35%의 지분을 가지고 있다고 하자. 그럼 B가 지분이 가장 많으므로 40% 확률로 권한을 획득하여 블록을 생성하고 나머지 B, C 노드들은 검증자로 블록을 검증한다.
따라서 지분이 많을수록 블록을 생성할 수 있게 함으로써 블록을 나쁜 의도로 생성할 동기부여를 없애며, 잘못 생성할 경우 페널티를 부여한다. 하지만 코인을 보유하고 있는 사람 누구나 블록을 생성할 수 있으므로 코인이 많은 사람이 악의적인 공격을 가할 수 있다. 그렇지만 이러한 악의적인 공격을 시도할 경우 PoW보다 공격자가 훨씬 큰 비용을 지불해야 하므로 PoS 방식이 중앙집권화가 더 어려워서 안정성 확보에 더 유리하다는 장점이 있다. 또한, 컴퓨팅 파워가 많이 필요하지 않아 경제적이며 친환경적이다.
위임지분증명(Delegated Proof of Stake, DPoS)은 지분증명(PoS)에서 한 단계 발전한 것이다. PoS는 지분을 가진 모든 노드에게 블록을 생성할 권한을 주었던 반면, DPoS는 지분을 보유한 노드들이 대표 노드를 선출하여 블록 생성과 검증에 대한 권한을 부여한 것이다.
표2. PoW, PoS, DPoS 비교
댓글남기기