기본 콘텐츠로 건너뛰기

blockchain 이론

이론편


Blockchain Structure

1.     비트코인 구조

비트코인의 목적
은행과 같은 중앙 기관을 경유하지 않고 P2P 네트워크에서 1 1교환이 가능한 전자 화폐 시스템을 구현하는 것
- P2P 기술과 공개키 암호 및 해시 함수 등 암호 기술로 구현

비트코인 구현 방법
- ‘온라인에서 교환이 가능한 전자 화폐’ 의 기술적 문제를 해결하기 위해 이전 소유자의 본인 보증과 부인 방지를 구현해야 하기 때문에 전자 서명이라는 방법을 사용
전자 화폐는 이 화폐가 이중으로 사용된 것인지 아닌지를 증명하기 위해 모든 거래(트랜잭션이력을 블록체인이라는 대장에 기록하고 네트워크에서 공유함
중앙 기관이 하는 일을 네트워크에 참여하는 모두가 담당
또한 변조를 막기 위해 거래를 블록’ 이라는 단위로 결합해 앞의 블록 정보를 포함해 해시로 만들어 불가역 데이터를 만듬
하지만 위의 ‘블록 체인이 간단히 만들 수 있다면 블록체인 전체를 위조해 조작할 수 있기 때문에 새로운 블록을 만들기 위해 계산량이 큰 문제를 푸는 방식을 도입
중앙 기관이 하는 일을 네트워크에 참여하는 모두가 담당
하나의 블록을 만드는데 막대한 CPU 파워가 필요하고 P2P 네트워크에서 블록 생성과 네트워크 전파 시점에 따라 블록체인이 분기하는 상황이 일어난다
이에 블록을 만든 사람에게 보상으로 CPU사용에 대한 인센티브를 제공하고 여러 개의 블록 중 가장 긴 블록체인을 채택함
비잔티움 장군 문제
전자 화폐시스템을 P2P 네트워크에서 실현하는 경우 발생 할 수 있는 문제점
                         i.         악의적인 참가자에 의한 부정변조
                        ii.         정보 전달의 지연으로 인한 불일치
                       iii.         네트워크를 자율적으로 유지운영하기 위한 추진력
위와 같은 문제를 비트코인은 블록체인, PoW, 전자서명해답 인센티브를 통해 실용적 해결책 제시

비트코인 처리 흐름
A.     블록체인 네트워크 참가자로서 계좌를 사용하는 사용자와 블록을 만드는 채굴자가 있는 구성을 가정 (실제로는 채굴자와 사용자를 겸 할 수 있다)
B.      사용자가 송금을 의뢰(트랜잭션)트랜잭션을 발행할 때 본인 확인을 위한 전자서명을 첨부
C.      발행된 트랜잭션은 P2P 네트워크를 통해 사용자와 채굴자 전원에게 브로드캐스트 됨
D.     트랜잭션을 받은 채굴자는 전자서명을 확인하고 블록을 생성하기 위한 요건을 만족시키는 해답을 찾기 시작
E.      맨 처음 조건을 만족하는 해답을 발견한 채굴자는 생성한 블록을 참가자 전원에게 브로드캐스트 함
F.      블록을 받은 각 노드는 정당한 블록인지를 검증 (이전 블록 정보+해답을 매개변수로 해시값을 구해 조건을 만족하는지 확인만족한다면 수신한 블록을 자신의 로컬 디스크에 있는 블록체인에 추가)

2.     블록체인 기술의 구성 요소와 분류

블록체인 기술 구성 요소
피어 투 피어(P2P) 네트워크 : 컴퓨터끼리 같은 목적으로 연결해 네트워크를 형성하는 방식어떤 컴퓨터도 같은 처리를 할 수 있기 때문에 1대가 정지해도 시스템 전체에는 영향을 주지 않음
합의 알고리즘 : P2P 네트워크와 같은 분산 네트워크에서 합의 형성을 수행하기 위한 알고리즘
전자 서명 해시함수 : 트랜잭션(거래)을 발생시킨 사람의 정당성을 보증하거나 거래블록체인 변조 방지암호화 등 보안과 관련된 기능
스마트 계약 : 블록체인 네트워크에서 동작하는 프로그램

블록체인 기반 기술 분류

공용(public)
컨소시엄형
개인(private)
(마이닝노드형
제한 없음
제한 가능
제한 가능
블록체인 검색
제한 없음
제한 가능
제한 가능
블록 생성시
높은 난이도 필요
임의
임의
마이닝 보수
필요
임의
임의

P2P 네트워크

1.     P2P 네트워크 개요


P2P Network
Server-Client Network
특징
비교적 소수의 서버에 집중하기보다는 망구성에 참여하는 기계들의 계산과 대역폭 성능에 의존하여 구성되는 통신망
오디오나 비디오데이터 등 임의의 디지털 형식 파일의 공유는 매우 보편적
클라이언트/서버 컴퓨터 간 컴퓨터의 처리 작업은 서로 분리
클라이언트가 사용자 입력에 초점을 맞춘 반면서버는 공유 데이터의 처리 및 저장웹 페이지 지원또는 네트워크 활동 관리 등의 역할을 수행
장점
서버를 준비할 필요가 없음
부하를 분산시켜 시스템 운영
높은 확장성
설계나 유지가 쉬움
단점
다수가 사용하는 네트워크 구축과 다른 노드 찾는 기능을 설계하기 어려움
서버 장애 시 서비스 중지
다수의 요청 발생 시 고사양 서버 필요



2.     P2P 네트워크 설계

퓨어 P2P와 하이브리드 P2P
하이브리드 P2P : 각 노드가 보유한 데이터의 정보가 인덱스 서버에 기록노드는 자신이 요구하는 데이터의 소유자를 인덱스 서버에 질의하고 해당 데이터를 가진 노드 정보를 받은 뒤 직접 노드에 연결해 데이터를 교환
퓨어 P2P : 인덱스 서버 없이 자신이 원하는 데이터를 검색하고 데이터를 교환
비구조화 오버레이와 구조화 오버레이

구조화 오버레이
비구조화 오버레이
특징
각 노드들이 물리적으로 연결되어 있으며그에 따라 네트워크 토폴로지(Topology)도 반영되어 있는 네트워크
각 노드들의 ID가 할당되어 있고그에 따라 연결되는 대상들도 이미 정해져 있음
라우팅(Routing)을 통해 메세지 전송 경로가 선택되어 있음
메세지를 전송하면 목적지 ID를 향해 효율적으로 전송이 되기 때문에 메세지 도착 가능성이 높음
노드의 확장성이 높음
노드 수가 증가하더라도 메세지의 전송 횟수는 크게 늘어나지 않음
노드 탐색은 네트워크의 물리적인 구조에 영향을 받아 유연함이 떨어짐
서로 물리적으로 연결되어 있지는 않지만논리적으로 연결된 것처럼 사용하는 네트워크
일반적으로 각 가정에서 P2P를 이용하는 경우
네트워크 토폴로지가 없으며각 노드를 탐색할 때는 탐색 메세지를 브로드캐스트(Broadcast)하여 주변 노드들에게 확산해나가는 방법을 사용
특정 노드를 향해 메세지를 전송할 경우 각 노드들간 메세지가 전파되면서 중간에 소실되는 경우가 많으며노드 수가 증가할 수록 메세지의 전송 횟수가 크게 증가하는 문제점이 있음
메세지 전송시 주변 노드에게 전파시켜 전달하다보니특정 노드에 메세지 전달하는 것을 보장할 수 없음
노드 수가 많으지면 메세지 전송 횟수가 크게 증가함
물리적 네트워크 구조와 관계없이 주변 노드들을 유연하게 탐색하기 유리함
메세지 전송 문제를 해결하기 위해중간 중간 슈퍼 노드를 배치하여 메세지 전송을 효율적으로 하려는 개념도 있음


3.     P2P 네트워크에 따른 블록체인 동작

A.     블록체인을 구성하는 P2P 네트워크에서 한 노드(노드 X)가 거래 데이터(트랜잭션)을 보낸다아직 이 시점에서 거래 자체는 실행(성립)되지 않은 상태
B.      노드 X로부터 P2P 네트워크로 전달된 트랜잭션은 네트워크에 참가하는 모든 노드로 전파된다이처럼 자신이 작성한 거래 데이터를 블록체인 네트워크에 전송하고 모든 참가 노드에 전파시키는 것을 브로드캐스트’ 라고 함
C.      트랜잭션을 받은 모든 노드가 마이닝을 실시해 조건에 맞는 해시값을 발견하면 기존의 블록체인에 새로운 블록을 추가한다(발행자는 노드 Y). 이것을 Proof of Work(PoW)라 함
D.     새로운 블록을 추가한 노드 Y는 블록을 P2P 네트워크에 브로드캐스트 함
E.      블록을 받은 각 노드는 블록이 올바른 것인지 검증하고문제가 없다면 해당 블록을 받아들여 자신이 가지고 있는 블록체인 을 업데이트함이 시점에 거래가 성립

합의 알고리즘

1.     합의 알고리즘이란?

P2P 네트워크와 같이 정보 도달에 시간차가 있는 네트워크에서 참가자가 하나의 결과에 대한 합의를 얻기 위한 알고리즘

2.     계산량에 따른 증명(Proof of Work)의 문제점

51% 문제
- PoW는 다수결로 결정을 내리는 알고리즘이다특정 채굴자가 전체 네트워크의 과반수 이상을 점유하게 된다면 다른 채굴자가 생선한 블록을 승인하지 않는 등 결과를 자유롭게 조작할 수 있음기존에는 문제가 되지 않았지만 땅값과 전기세가 싼 중국에 채굴자가 대거 참가해 과반수 넘게 점유하여 문제로 인식

파이널리티 불확실성
짧은 체인을 사용하고 있던 노드에서는 긴 체인이 채택돼 블록의 전환이 발생하면 다양한 문제가 발생할 수 있음파이널리티결제완전성=송금 등 결제 처리가 확실하게 집행되는것 )가 불확실한 것이 금융 시스템에 도입되기 힘든 이유 중 하나

성능한계
여러 노드간 합의를 통해 정보의 신뢰성을 담보하고 있기 때문에 합의에 걸리는 시간이 필요응답시간과 처리량을 올리는 것은 어렵고 실시간으로 처리해야 하는 업무는 적합하지 않음

블록체인의 용량
참가자 전원이 트랜잭션 실행 결과를 검토해 신뢰서을 확보하기 때문에 모든 블록 정보를 각각의 노드가 보유해야 함비트코인의 경우 축적된 블록체인 정보가 현재 80기가 바이트에 달하며 향후에도 계속 증가할 예정으로 하드 디스크 용량의 압박과 초기 실행 시간의 증가가 우려


3.     합의 알고리즘의 종류

대표적인 합의 알고리즘
합의알고리즘
채택 시스템
Proof of Work
Bitcoin Core, Ethereum 
Proof of Stake
Ethereum mijin
Paxos
Google Chubby
Raft
RAMCloud
PBFT
Hyperledger Fabric
Sieve
Hyperledger Fabric

분산 시스템의 장애 모델
- FAIL STOP 모델 :  어떤 오류로 인해 중지된 서버는 깨끗이 퇴출하는 모델
- FAIL RECOVER 모델 : 한 번 정지한 서버가 부활하는 모델
- BYZANTINE FAULT 모델 : 임의 노드가 악의적으로 실수를 일으키는 모델



4.     각 합의 알고리즘의 특징

PoW (Proof of Work)
- PoW 는 비트코인을 시작으로 많은 Public블록체인에서 채택하고 있는 알고리즘이다확률적으로 해답이 어려운 문제를 가장 빨리 해결한 사람에게 블록을 만들 수 있도록 허가하는 방식으로 다음과 같은 절차로 이루어진다.
 A  B 에게 송금을 의뢰(트랜잭션)한다.
② 발행된 트랜잭션은 P2P네트워크를 통해 참가자 전원에게 브로드캐스트 된다.
③ 트랜잭션을 받은 승인자는 블록을 생성하기 위한 요건을 만족시키는 해답을 찾기 시작한다. - 블록의 해시 값 ≤ 난이도를 만족하는 난수(nonce)값 찾기 (컴퓨팅 파워 필요)
④ 처음 조건을 만족하는 해답을 발견한 승인자가 참가자 전원에게 브로드캐스트 한다.⑤ 블록을 받은 각 노드는 정당한 블록인지 검증한다. 50%이상이 동의하면 블록은 체인에 추가된다.
⑥ 송금이 완료된다

PoS (Proof of Stake)
이더리움이 채택할 예정인 알고리즘으로 PoW 와 기본 방식은 동일하나 화폐량을 더 많이 소유하고 있는 승인자가 우선하여 블록을 생성할 수 있는 방식이다화폐량에 따라 해시 계산의 난이도가 낮아지기 때문에 PoW 와 비교하여 자원 소비가 작다.

PBFT (Practical Byzantine Fault Tolerance)
- PoW  PoS 의 단점인 파이널리티 불확실성과 성능 문제를 해결한 알고리즘으로 HyperledgerFabric과 Eris등 컨소시엄 형에서 이용하고 있다.(분기가 발생하지 않음)
네트워크의 모든 참가자를 미리 알고 있어야 하며참가자 중 1 명이 Primary(리더)가 되어 자신을 포함한 모든 참가자에게 요청을 보낸다그 요청에 대한 결과를 집계한 뒤 다수의 값을 사용해 블록을 확정한다.
매우 고속으로 동작하지만 참가자 전원과 의사소통하기 때문에 참가자가 증가하면 처리속도가 저하된다
- PBFT 의 처리과정은 다음과 같다
① 클라이언트가 모든 노드에 요청을 브로드캐스트 한다
 Replica0  primary(리더)가 되고 순차적으로 명령을 다른 노드에 전달한다.
③ 각 노드는 ②의 명령을 받으면 Primary(Replica0)를 포함한 모든 노드에 회신한다.
④ 각 노드는 ③에서 전달된 명령을 일정 수 이상 수신하면 Primary(Replica0)를 포함한 모든 노드에 수신한 신호를 전송한다.
⑤ 각 노드는 ④에서 보낸 명령을 일정 수 이상 수신하면 명령을 실행하고 블록을 등록해 client  reply 를 반환한다.

Sieve
- IBM 에서 고안한 PBFT 를 확장한 알고리즘으로 실행 결과 전송과 집계전송으로 흐름이 나뉘어져 있으며합의 형성 전 단계에서 실행 결과를 검토해 결과가 다른 경우 중지시킨다각 노드의 실행결과가 다를 가능성을 조기에 탐지하고 싶을 때 유용
- HyperledgerFabric에 채택되어 있지만 2016  7 월 기준으로 제외
- Sieve 처리 과정은 아래와 같음
① 각 노드 중 하나가 Client 가 되고리더의 명령을 송신한다.
② 리더(Replica1)가 각 노드에 실행의뢰를 전송한다.
③ 각 노드는 의뢰를 실행하고 결과를 리더에게 전달결과가 일정 수에 도달하지 못하면 중단되며 요청은 무시된다.
④ 수신한 결과가 중지가 아니라면 그 증거로 결과를 집계한다.(이 때 PBFT 가 사용되는 경우가많음)



Paxos
합의 문제를 해결하기 위한 알고리즘리더 중심으로 합의 형성을 수행함합의로 과반수의 동의를 얻었다면 그 동의 내용이 나중에 변경되지 않음리더의 부정이나 멤버의 거짓 신고의 경우 동기화가 이루어 지지 않기 때문에 악의를 가진 참가자가 있는 환경에서 운영하기 어려움이해하기 어렵고정확히 구현하기 어려움
Raft
- Paxos 보다 시스템 구현이 쉽고 이해하기 쉽게 되어 있음서버 중에 리더를 선출하는 구조로 멤버가 양분돼도 각 커뮤니티 별로 계속 동작하지만 과반수에 달하지 못하는 커뮤니티는 로그가 쌓이기만 할 뿐 완료(Commit)되지 않음네트워크가 삼등분 되는 경우 완료가(Commit) 되지 않는 상태가 계속 됨
합의알고리즘 비교표
구분
Paxos / Raft
PBFT/Sieve
PoW
PoS
통신비용
PoW/PoS 비용과 비슷
각 서버간 통신으로 높음
로컬 통신만으로 비용 낮음
로컬 통신만으로 비용 낮음
결함허용대수
1/2 미만
1/3 미만까지 문제없음
원리
다수결
다수결
CPU 계산량
보유한 자산 크기
CPU연산비용
낮음
낮음
높음
중간
권한의 분산
리더에게 강한 권한(리더교체 가능)
참가 서버 모두가 평등
전기세가 낮은 지역에 집중될 수 있음
일반적으로 화폐 보유는 집중될 가능성 높음
참가 조건
신뢰 서버만 참가 가능
신뢰 서버만 참가 가능
어떤 서버도 참가 가능
어떤 서버도 참가 가능
인증
없음
사전에 서로 신뢰한 공개 암호화 키 사용
참가 시 준비한 공개 암호화 키 사용
참가 시 준비한 공개 암호화 키 사용


전자 서명과 해시

1.     전자 서명을 통한 위조 및 변조 방지

전자 서명 개요
개인키로 암호화한 것은 공개키로 복호화할 수 있음(반대로 공개키로 암호화 한 것은 개인키로 복호화 가능)
개인키는 다른 사람에게 공개하지 않음
공개키는 다른 사람에게 공개

     보내는 사람은 개인키와 공개키로 구성된 키 쌍을 생성개인키는 서명 생성 용도의 키공개키는 서명 검증 용도의 키
     보내는 사람은 1에서 만든 공개키를 미리 받는 사람에게 전달
     보내는 사람은 1에서 만든 개인키를 이용해 전자 데이터를 암호화 함암호화로 만들어진 암호문을 전자 서명’ 이라 함
     보내는 사람은 3에서 생성한 전자 서명을 전자 데이터에 붙여 받는 사람에게 전달
     받는 사람은 2에서 받은 공개 키를 이용해 4에서 받은 전자 서명을 복호화복호화 하면 원본 전자 데이터가 생성됨
     받은 사람은 4에서 받은 전자 데이터와 5에서 복화화한 결과를 비교해 내용이 같은지 확인비교 결과 같으면 전자 데이터는 위조나 변조되지 않음

블록체인에서 전자 서명 이용
블록체인에는 발행된 모든 트랜잭션이 저장돼 있으며 각 트랜잭션에 전자 서명과 공개키가 세트로 부여돼 있음
블록체인 네트워크의 참가자는 과거 블록체인상에서 수행도니 모든 트랜잭션을 순차 검증 할 수 있음
트랜잭션을 발행하려면 공개키와 개인키의 쌍이 필요함
제삼자가 트랜잭션 내용을 위조하거나 변조하지 않았는지 여부를 검증
제삼자가 도용 등을 통해 트랜잭션을 수행했는지 여부를 검증
코인의 정당한 소유자가 제대로 트랜잭션을 수행했는지 여부를 검증

2.     해시를 통한 위조 및 변조 방지

해시 개요
전자 데이터로부터 생성되는 값생성된 해시는 다시 원래 데이터로 변환할 수 없음
전자 데이터로부터 해시를 만들 수 있지만 해시로부터 원본 전자 데이터를 만들어내는 것은 불가능
전자 데이터의 내용마다 특유의 고유한 값을 가짐
전자 데이터의 고유한 해시를 생성하여 위조 및 변조 여부를 확인
전자 데이터의 길이(비트)와 상관없이 고정된 크기의 해시를 생성(해시 사이즈는 해시 함수가 결정)
전자 데이터가 1비트라도 변하면 완전히 다른 해시가 만들어짐

블록체인에서 해시 이용
블록체인은 복수의 트랜잭션(거래)을 모은 블록을 만들고블록에는 이전 블록의 해시를 포함 후 해시 계산에 사용하는 ‘Nonce(해답)’ 이라는 값을 세트로 첨부
비트코인에서 블록은 블록헤더+트랜잭션 정보(복수)’ 로 만들어지며 블록 헤더는 이전 블록 헤더의 해시값+Nonce+트랜잭션 해시값’ 으로 구성
블록을 생성하기 위해서는 1개 앞의 블록 헤더의 정보와 생성한 Nonce 및 그 블록에 포함된 모든 트랜잭션의 해시값을 포함시켜 해시 함수에 입력
어떤 블록의 내용을 위조하거나 변조하면 해시 함수의 특성에 따라 그다음 블록에 포함된 해시값이 변하면 동시에 이후의 모든 블록에 포함된 해시값이 변함
위조나 변조를 성공시키기 위해서는 이런 모든 해시를 다시 계산해야 함

댓글

이 블로그의 인기 게시물

블록체인 거래소 모니터링시스템 구축이야기(2/?) - 서버 아키텍처

  코인 거래소 모니터링시스템 구축이야기(2/?) 코인 거래소 모니터링 시스템 구축 (가칭 : 김프멈춰) 서버 구성 사용자가 확인할 서비스 페이지, 데이터 저장소에 대한 서버는 NAS 서버로 운영 일일 Data 크롤링 서버는 Cloud 서버 이용하여 운영 - 서비스페이지 및 데이터 저장소 (Nas 서버) : Docker container ubuntu 20.04 - 일일 크롤링 서버 (Cloud at Cost Cloud 서버) : CentOS 7 서버 아키텍처 서버 아키텍처 레퍼런스 빗썸 : https://apidocs.bithumb.com/ 업비트 : https://docs.upbit.com/ 홍콩 Bitfinex : https://docs.bitfinex.com/docs 몽고 DB 설치 : https://coterie.tistory.com/20 1. 개요 :  https://limdh3325.blogspot.com/2021/04/1.html 2. 서버 아키텍처 :  https://limdh3325.blogspot.com/2021/04/2.html 3. MongoDB 설치 :  https://limdh3325.blogspot.com/2021/04/3.html 4. 데이터 모델링 :  https://limdh3325.blogspot.com/2021/05/4.html 5. MongoDB 저장 :  https://limdh3325.blogspot.com/2021/06/5.html