블록체인
- P2P(Peer to Peer) 네트워크를 통해서 관리되는 분산 데이터베이스의 한 형태
- 기존 : 거래 정보를 담은 장부를 중앙 서버 한 곳에 저장하는 방식
- 블록체인 네트워크에 연결 된 여러 컴퓨터(노드)에 저장 및 보관하는 기술
- 분산원장 기술
- 분산원장 (공유원장, 또는 분산원장기술) 은 복제, 공유 또는 동기화된 디지털 데이터에 대한 합의 기술이다.
이때 데이타들은 지리적으로 여러 사이트나, 여러 국가 또는 여러 기관에 분산되어 있게 된다.
즉 중앙집중적인 관리자나 중앙집중의 데이터 저장소가 존재하지 않고 기능이 동작하게 된다.
결국 사용자 개인간 직접 접속(peer-to-peer) 네트워크가 필요하며 당연히 노드 간 복제 데이터에 대한 합의 알고리즘이 수행되어야 한다.
- 분산처리와 암호화
블록체인이란?
- 블록들을 체인 형태로 묶은 형태
- 블록들이 형성된 후 시간의 흐름에 따라 순차적으로 연결 된 ‘사슬(체인)’의 구조를 가지게 된다.

특장점
- 분산저장
- 기존 거래방식의 단점 : 데이터를 위, 변조 하기 위해선 중앙 서버를 공격
- 블록체인의 장점
- 여러 명이 동일한 데이터를 저장
- 블록체인 네트워크를 위, 변조하기 위해서는 참여자(노드)의 거래 데이터를 모두 공격해야 하기 때문에 사실상 해킹이 불가능
- 중앙 관리자 불필요
- 중앙기관이나 관리자 없이도 다수가 데이터를 저장, 증명할 수 있기 때문에 탈중앙화 가능
블록체인의 기술 활용
- 금융거래
- 개인 의료 정보
- 영상 또는 이미지, 음원과 같은 콘텐츠
- 전자 계약 시스템
- 부동산 시장
- 의료 부문
- 인적 자원 관리
블록체인 동작 원리
- 하나의 새로운 블록을 구성한 경우, 이전부터 이어져 내려오던 블록체인의 맨 끝에 이 새로운 블록을 연결
- 새로 구성한 블록의 이름에 해당하는 해시를 찾아내는일
- 목표 값보다 작아야 한다는 조건을 충족해야함
- ex) 목표 해시 값 : 00ff32 새로 만든 블록의 해시 값 : 12fa3b (생성 실패) 새로 찾아낸 해시 값 : 00c3b1 (생성 성공)
블록체인 합의 알고리즘
PoW(Proof of Work) - 작업 증명
- 문제(특정 조건을 만족하는 해시 값 찾기 등)를 주고 조건을 만족하는 답을 찾아낸 노드에게 보상하는 합의 알고리즘
- 조건을 만족하는 답을 찾아낸 노드에게 보상하는 합의 알고리즘
사토시 나카모토
가 제안한 최초의 블록체인인 비트코인을 통해 제안된 합의 알고리즘
- 해시 값에 대한 조건이 주어지고 노드들은 해시 값을 구하기 위해 컴퓨팅 파워를 동원해 값을 찾는다.
- 값을 찾으면 새로운 블록을 추가하여 branch 형성
- branch가 생겼을 때 가장 긴 블록체인이 남은 브랜치가 최종 branch로 결정
- 나머지 브랜치는 버려지게 되며 과반수 이상의 노드가 합의한 거래가 원본으로 채택
장단점
- 장점
- 답을 찾아낸 노드가 이익을 가져가는 구조
- 모든 노드들이 서로 부정행위가 방지되도록 경계하는 구조로 탈 중앙화 가능
- 최초로 제안된 비트코인의 합의 알고리즘으로 해시함수를 통해서 블록체인을 형성하고 임의로 조작하기 힘든 강력한 보안성 확보
- 단점
- 조건을 만족하는 답(해시 값)을 찾기 위해 막대한 컴퓨팅파워가 필요해 많은 전력, 에너지 낭비
- 트랜잭션이 완료되기까지 많은 시간이 걸리고 느리다
관련 블록체인
- 비트코인, 이더리움, IOTA, 라이트코인, 비트코인캐시, 비트코인골드, 모네로
PoS(Proof of Stake) - 지분증명
- 해당 블록체인에 대해 가지고 있는 지분율로 보상 받게 되는 합의 방식
- 블록을 생성할 수 있는 권한 부여
- 많은 지분을 가지고 있을수록 보상을 받게 되고 해당 노드는 그 가치를 유지하기 위해 전체 네트워크를 배반하지 않고 유지할 것이라는 개념
- 이자와 같은 방식으로 보상이 지급되고 코인을 보관하고 있는 지갑을 네트워크에 연결시키면 보상을 받을 수 있다.
- PoS는 여러 시나리오(독점, 과점, 비이성, 공격 등)에서 안정적인 블록체인으로 수렴한다는 것이 게임이론으로 증명됨
- 이더리움 2.0부터는 PoW에서 PoS로 합의 알고리즘을 변경하려고 하고 있다.
장단점
- 장점
- 경제적이고 친황경적
- 일반인과 전문 miner(채굴자)의 효율이 같음
- 단점
- 검증이 되지 않아 보안성에 대한 리스크와 우려가 존재
- 지분을 많이 가진 노드들이 독점할 수 있는 가능성 존재
관련 블록체인
DPos(Delegated Proof of Stake) - 위임지분증명
- 말그대로 위임된 POS
- PoS 자산을 가진 사람들이 전부 참여하는 방식
- DPoS는 특정 인원에게만 POS를 할 수 있도록 권한을 위임하는 방식
- 블록생성을 위해 24시간 네트워크를 유지하며 하드포크마다 알고리즘 업데이트를 할 필요가 없다
- 소규모 참여자는 권한을 위임하고 위임한 상위노드로부터 이자를 받거나 송금 수수료를 감면 받는다
- 상위 노드로서 뽑힌 사용자는 PoS에서와 같이 블록생성을 진행할 수 있다
- 상위 노드로 뽑히는 기준은 본인을 투표한 구성원의 코인 총 합 순위로 매기는 것이 보통의 방법
장단점
- 장점
- 합의에 참여하는 노드가 한정되기 때문에 매우 빠른 속도(건당 0.5초)와 확장성
- PoS와 마찬가지로 블록생성 비용이 아주 낮다
- 단점
- 권한을 위임받은 노드들이 담합을 할 위험성
- 공개된 소수의 노드들에 대한 보안공격(DDoS등) 위험도 존재
- 블록생성에 대한 권한을 위임하기 때문에 탈중앙화 되지 않았다는 비판이 있을 수 있다
관련 블록체인
블록의 구성 요소

Hash of the block
Magic Number - 0xD9B4BEF9 값으로 고정
Block Size - 블록헤더 + 블록 body의 크기
- Version - 소프트웨어 버전과 동일
- PreviousBlockHash - 이전 블록 헤더의 SHA256 해쉬, 블록 생성 시 기록
- Merkle Root - 거래가 발생할 때마다 값이 업데이트 됨. SHA256 해쉬
- Time - 타임스탬프, 몇 초마다 업데이트 됨
- bits, target - 난이도, 작업 증명 난이도, 특별한 공식을 사용해서 변환함
- Nonce - 4바이트 크기의 nonce 값
Body
- Transaction counter - 기록된 거래의 개수
- Coinbase transaction - 블록 생성시 만들어지는 최초 거래, 채굴 성공 시 비트코인 지급이 되는 거래가 됨
- Transaction #1 - 실제 비트코인의 거래 기록
- Transaction #2
- ......
블록 해시 (Hash of the block)
- 블록의 이름 정보
- 블록의 헤더 정보인 버전, 이전 블록 해시, 머클 루트, 타임, bits, 논스 정보를 모두 더하여 합을 구한 후 SHA256으로 변환한 결과 값
- 단순히 SHA256으로 변환해서는 정확한 블록 해시 값을 구할 수 없다.

이전 블록 해시 (PreviousBlockHash)
- 이전 블록 해시 정보는 이전 블록의 주소 값을 가리키는 요소

머클 루트 (Merkle Root)
- 블록의 바디 부분에 저장된 트랜잭션(거래 정보) 들의 해시 트리
- 머클 루트의 역할
- 머클루트값을 통해 단일 블록 내에 존재하는 트랜잭션의 무결성을 검증
- 머클루트 값을 이용하여 블록의 해시 값을 생성하였기 때문에 블록의 해시 무결성도 함께 검증
- 해당 블록이 유효한지에 대한 무결성 검증

머클 루트에 대해 좀 더 자세한 내용은 해당 블로그 참조!
비트코인 코어 소스코드로 살펴보는 머클 트리
타임(Time)
- 해당 블록의 대략적인 생성 시간을 의미
- 유닉스 기준일 자로 표시되며 1970년 1월 1일 자정부터 경과한 시간을 초 단위로 계산한 값이다.
비트s(bits)
- 난이도 해시 목표 값을 의미하는 지표
- 난이도 설정 값인 4바이트 Bits를 target으로 변환하는 공식
- Bits = 0x1b0404cb의 경우
- Bits의 앞 2자리와 뒤 6자리를 아래와 같이 분리
- 작업 증명 대상 target의 값은 다음과 같이 구함
- target = 0x0404cb * 2(8*(0x1b-3))**
논스 ( Nonce )
- 블록을 만드는 과정에서 해시 값을 구할 때 필요한 재료 역할을 수행
- 비트코인에서 작업 증명은 이 target보다 작게 나오는 블록 헤더의 해쉬 값이 되도록 Nonce를 구하는 것
- SHA256 해쉬는 32바이트, 16진수로 64자리로 표현됩니다.
- 위 예의 target을 64자리 16진수로 표현하면 다음과 같다.
- target = 0x00000000000404cb000000000000000000000000000000000000000000000..... (총 64자리)
- 0x (16자리)(48자리)
- 비트코인의 블록 헤더의 SHA256 해쉬 값이 이 값보다 작거나 같은 해쉬 값이 나오는 Nonce를 구하게 되면 채굴 성공