티스토리 뷰
0. 블록체인이란?
- 관리 대상 데이터를 '블록'이라고 하는 소규모 데이터들이 P2P 방식을 기반으로 생성된 체인 형태의 연결고리 기반 분산 데이터 저장환경에 저장되어 누구라도 임의로 수정할 수 없고 누구나 변경의 결과를 열람할 수 있는 분산 컴퓨팅 기술 기반의 원장 관리 기술
- 데이터 분산 처리 기술, 암호학적으로 안전한 블록들의 체인
- 중앙에서 데이터를 처리하거나 관리하는 기관이 없음
- 모든 사용자가 데이터 내역을 가짐
1. 블록체인 비대칭키 암호화 방식
- 비트코인에서 거래가 안전하게 이루어질 수 있도록 사용하는 암호화 기술
1.1 암호화 기술
* 대칭키 암호화
- 키가 하나
- 암호화를 할 떄와 암호를 풀 때 동일한 키를 사용한다
* 비대칭키 암호화
- 암호화할 때 사용하는 키와 암호를 풀 때 사용하는 키가 다름.
- 어느 한쪽의 키를 안다고 해도 다른쪽 키를 유추하기 힘들다.
개인키 <-----------------> 공개키 )))) 한쌍
한쌍의 키에 의해서 암호화와 복호화가 이루어짐
공개키 암호화 -> Only 개인키 가진 사람만 복호화
개인키 암호화 -> 공개키 가진 사람 전체 볼 수 있음 ===> 일종의 Signature 행위
2. 해시함수
2.1 해시란?
- 해시의 원래 의미? "고기", "야채써는일"
- 해시함수 : SHA1, SHA2 ... 비트코인등에서 사용
2.2 블록체인에서의 해시함수
- 블록체인에서는 해시함수의 특성을 이용하여 블록체인 작업증명과정에 사용
- 보안성이 높다
- 입력값이 어떤 길이이던지 해시 함수를 거치면 동일한 길이의 출력값이 나옴
- 많은 데이터를 해시함수 사용하여 적은 데이터의 해시값 변경하는게 가능하다.
2.3 해시함수의 특성 이용
- 출력값의 범위를 제한하여 컴퓨터의 계산시간을 대폭 줄인다
- 블록체인의 "작업증명"의 아이디어인 "해시캐시"
- 비트코인은 SHA-2 를 사용하고 있는 이를 대입법으로 빠른 시간내에 입력값을 전체 찾는건 어렵다.
- 그러므로 출력값의 범위를 제한하여 줄인다
ex) 앞의 몇비트까지는 0이고 나머지 비트는 어떤값이 나와도 정답이다.
3. 블록체인 property
3.1 작업증명 (Proof of Work)?
- 새로운 블록(신규기록)을 생성함에 있어서 일정한 노력이 들어갔음을 보장하는 것.
- 블록체인 자체가 여러 네트워크(Node)가 연결되어 블록을 형성하고 전달하면서 블록을 연결하는 과정
- 어느 한노드에서 새로운 블록이 무분별하게 만들어지고 배포된다면 다른 노드에서는 이에 대한 확인이 어렵다.
3.2 블록내용 / 난스
Q. 실제 블록에는 뭐가 들어 있을까?
>> 블록헤더 : 블록의 정체성(비전, 이전 블록의 해시, 머클루트, 타임스탬프, 난이도목표, 난스)
>> 거래카운터 : 거래의 개수
>> 거래 : 블록에 기록된 거래내역(블록 당 평균 500개의 거래)
3.2.1 Header
- 블록헤더 -> SHA256 (해시)
= 비교값과 비교하는 과정을 가짐
= 이 비교값보다 작은 해시값이 나오면 블록 체인이 블록 생성하는 "작업증명"이 성공하게 된다
= 비교값은 계속 변함
- 버전
- 이전블록의 해시값
- 머클루트
- 타임스탬프 등의 정보가 있음
- 논스 : 문제, 이 값을 넣었을 때 블록 해시값이 특정 수치보다 작아야함
* 머클루트
- 거래를 묶어주는 머클트리(Merkel Tree) => 일종의 이진트리
- 이진트리라는 말은? 쉽게 말해서 거래를 두개씩 묶는다는 말
- 거래를 두개씩 묶은 다음 SHA 256 알고리즘을 사용하여 해시값을 나타냄
- 두개씩 묶기 때문에 거래량이 기하급수적으로 늘어나도 특정 거래를 찾는 경로는 단순
- ex) 1024개 거래라고 해도 log2[1024] = 10 이기 때문에 열번의 경로를 찾아가는 연산시 특정 거래 데이터를 쉽게 찾을 수 있음
Q 머클트리를 사용하는 이유?
- 머클 루트만 헤더에 담아서 트랜잭션의 유효성 보장 가능
- 머클 트리의 경로를 따라가면 해시값이 다른 것이 나오게 되어 거래의 위변조도 쉽고 빠르게 알수 있게 되고 이를 방지할 수 있음
-머클트리 이진 트리 방식은 블록데이터의 일부만 다운 받는 라이트노드로 우리가 가지고 다니는 모바일로도 쉽고 빠르게 특정 거래를 찾도록 해준다.
* 트랜잭션(transaction)
- "쪼갤 수 없는 업무 처리의 최소 단위" = 거래내역
- TPS : 일초당 처리할 수 있는 트랜잭션의 개수
- 데이터 베이스의 트랜잭션이 안전하게 수행됙 위해서는 ACID 조건 충족 필요
- ACID (Atomicity, Consistency, Isolation, Durability)
* 원자성(atomicity) : 하나의 트랜잭션은 더이상 작게 쪼갤 수 없는 최소한의 업무단우
* 일관성(consistency) : 트랜잭션이 완료된 결과값은 일관성 있는 데이터베이스 상태로 유지되어야 한다.
* 고립성(isolation) : 트랜잭션을 수행하는 도중에 다른 연산 작업이 끼어들어서는 안된다.
* 지속성(durability) : 성공적으로 수행된 트랜잭션은 영구적으로 반영되어야 한다.
3.2.2 Body
- 트랜잭션 = 거래내역
4. 합의알고리즘
- 다수의 참여자들이 통일된 의사 결정을 하기위해 사용하는 알고리즘
4.1 작업증명(Proof of Work, PoW)
- 목표값 이하의 해시를 찾는 과정을 무수히 반복함으로써 해당 작업에 참여했음을 증명하는 방식의 알고리즘
- 채굴을 통해 작업증명을 한다.
- 비트코인, 이더리움, 라이트코인, 비트코인캐시... 등에서 작업 증명 방식을 사용
- 채굴자는 컴퓨터로 복잡한 수식을 풀어 조건에 맞는 해시값을 찾는 과정을 반복
- 이 경우 모든 노드들이 찾아낸 해시값을 검증하고 승인하는 과정을 반복
- 하나의 블록체인을 유지하려고함. ==가장 긴 체인(The longest blockchain)
- ex) 두 체인에서 모두 채굴을 하려면 계산 능력을 두 체인으로 나누어 계산을 해야하는데 두 체인중에서 유리한 체인을 골라서 유리한 체인에 모든 계산 능력을 집중하는 것이 보상에 유리
- 가장 긴체인은 채굴자가 손해를 보지 않기 위해서
- Nonce => 해시 함수의 결과 값이 특정 값보다 작아지도록 하는 Nonce 값을 찾는 문제
4.2 지분증명(Proof of Stake, PoS)
- 해당 암호화폐를 보유하고 있는 지분율에 비례하여 의사 결정 권한을 주는 방식
- 해당 암호화폐를 보유하고 있는 지분율에 비례하여 의사 결정 권한을 주는 방식
- 채굴 과정이 필요 없음
- 큐텀, 피어코인 등의 암호화폐가 지분 증명 방식을 사용하고 있음
5. 블록체인 트릴레마
트릴레마란? 세가지 옵션 모두를 받아들이기 어려운 선택
- 확장성(Scalability) - 사용자 수의 증대에 유연하게 대응할 수 있는 정도
- 보안성(Security) - 데이터나 프로그램을 권한이 없는 이용자가 사용할 수 없도록 하는 것
- 탈중앙화(Decentralization) - 중앙 집중화를 벗어나 분산된 소규모 단위로 자율적으로 운영되는 것, 블록체인은 기존의 서버-클라이언트 관계가 아니라 개별 노드들의 자발적이고 자율적인 연결에 의해 P2P 방식으로 운영됨
사용자 수의 증대에 유연하게 대응할 수 있는 정도
6. 대표적인 블록체인
6.1 비트코인
- 최초의 성공적인 분산 디지털 통화
- 높은 탈 중앙화와 보안성, 확장성X
- 비대칭 암호화 기술
- 모든 구조 => 분산형 구조
- 세그윗과 하드포크 방법 사용
6.2 이더리움
- 거래 기록 이외에 정보를 기록가능 = 스마트컨트랙트
- 분산형 어플리케이션(Dapp)
- 솔리디티 언어도입
- 탈중앙화와 보안성이 높지만 확장성 문제
6.3 이오스
- 확장성 문제를 해결하기 위해 만들어짐
- 빠른 처리 속도
6.4 클레이튼
- 사용자편의에 중점을 맞춤, 사용자가 이용하기에 편함, 탈중앙화는 어느정도 포기, 사용자에게 적합한 환경 구축
6.5 아이콘
- A라는 블록체인과, B라는 블록체인 연결
6.6 루니버스
- 개발자가 우선
<출처>
3.
'인공지능 > 블록체인' 카테고리의 다른 글
블록체인 - 이더리움 네트워크 구축 (0) | 2019.11.02 |
---|---|
블록체인 개발환경 만들기 (0) | 2019.11.02 |
블록체인 관련 python - [3] UUID (0) | 2019.09.30 |
블록체인 관련 python - [2] Flask 사용하기 - Get, Post (0) | 2019.09.30 |
블록체인 관련 python - [1] JSON & Flask 사용하기 - 기초 (0) | 2019.09.30 |