본문 바로가기
Investment/Blockchain, Bitcoin

알기쉬운 블록체인 10강 : 블록의 생성 I

by YOU_IN 2021. 8. 11.

안녕하세요! :-)

 

이번 강의에서는 블록의 생성에 관한

첫번째 챕터입니다. 

 

10강도 내용이 굉장히 길어요!

모두 집쭝집쭝!

 

그럼 오늘도 블록체인 공부에

도움이 되셨으면 좋겠습니다!

 

 

 


 

제 10강 블록의 생성 I

 

출처 : https://www.cripto-valuta.net/en/come-funziona-la-blockchain/

 


 

10-1. 거래 정보의 보호

 

◈ 정보 조작의 문제

 

• 자신을 귀족 가문의 자손으로 위장하려면?
- 가상의 귀족 할아버지를 만들어 족보 위조하기, 가계도 설정
-> 다른 가문의 가계도와 얽힌 부분은?
- 저명한 귀족 가문의 가계도에 자신의 할아버지를 끼워 넣기
-> 살아온 발자취는?
- 할아버지의 생애 전체를 치밀하게 위조하기
-> 학력, 경력, 유년시절은?

• 목표
: 블록체인으로 유지되는 트랜잭션 이력을 변경할 수 없게 만들어 위조나 조작을 방지

• 해결할 문제
: 개방된 분산 P2P 시스템에서 부정직한 피어들의 위조 시도로부터 트랜잭션 정보를 보호

• 어떠한 방식으로 문제를 해결?
- 개방 시스템에서 정직한 노드와 부정직한 노드를 사전에 구분하는 것은 불가능을 전제.
1) 아무도 트랜잭션 정보를 조작할 수 없도록 만듦
2) 트랜잭션 이력을 변경하는 일이 도무지 감당이 안되어 단념하게 만듦
=> 불변성 = 읽기 전용. 한 번 생성되면 내용이 변경될 수 없다. 읽을 수는 있지만 내용 변경은 불가하여 Read only. ex) 운전면허, 여권, 졸업증명서 등

 

◈ 불변성 구현 Mechanism

 

• Overview
1) 조작이 쉽게 드러나게 만듦
- 블록체인-데이터-구조에서는 변경-감지 방식으로 저장됨
- 사소한 변경도 hash 참조를 손상시켜 쉽게 감지됨
2) 변경된 date를 끼워 넣으려면 여러 블록을 다시 작성하도록 강제함
- 변경하려면 해당 블록부터 마지막 블록까지 모두 변경해야 함
3) date 추가, 변경, 재작성하는 작업에 엄청난 비용이 발생하게 만듦
- 각 블록의 작성 시, 블록헤더마다 고유하게 존재하는 헤시퍼즐을 풀어야 하므로 엄청난 계산 비용 발생 (전기세가 훨씬 더 많이 나옴)

• 세 가지 고려사항
1) 블록헤더의 필수 data
- 트랜잭션 데이터를 담고 있는 머클트리의 루트, 이전 블록헤더를 가리키는 해시값, 해시퍼즐의 난이도(난이도를 임의로 낮추어 계산량을 줄이는 것 방지), 해시퍼즐을 풀이한 시작 시간, 해시퍼질을 해결할 수 있는 nonce 등이 들어간다.
- 해시는 역함수가 없기 때문에 해시 퍼즐을 풀기 위해 nonce값을 여러 개 넣어서 풀어야 한다.
2) 새 블록헤더를 생성하는 프로세스
i. 새로 추가되는 트랜잭션을 담고 있는 머클트리의 루트 얻기
ii. 직전 블록헤더를 가리키는 해시 참조 생성
iii. 필요한 난이도 획득
iv. 현재 시간 확인
v. 1~4에 언급된 data를 포하하는 예비 블록헤더를 생성
vi. 예비 블록헤더에 해당하는 해시퍼즐 계산
vii. 해시퍼즐을 해결할 nonce를 예비 블록헤더에 포함시켜 새 블록 완결

 


* 난이도가 블록헤더의 일부이기 때문에 블록 해시값이 일부가 된다. 따라서 난이도를 임의로 줄이는 등에 대한 조작을 하면 쉽게 표시가 난다. 난이도를 줄여서 계산량을 줄여보려는 꼼수가 통하지 않는다.
3) 블록헤더를 검증하는 규칙
i. 직전 블록을 가리키는 유효한 hash 참조를 가지고 있어야 함
ii. 트랜잭션 데이터를 담고 있는 머클 트리의 루트를 포함해야 함
iii. 정확한 난이도를 가지고 있어야 함
iv. Time stamp는 직전 블록헤더의 time stamp 이후여야 함
v. nonce를 포함해야 함
vi. 앞의 다섯개 data 조각을 합친 hash값으로 난이도를 충족해야 함
=> 해시퍼즐을 해결하고 필요한 계산 비용을 지불한 블록만 추가될 수 있도록 보장, 규칙 4는 블록과 트랜잭션 데이터가 추가된 순서대로 정렬되어 있음을 보장

 

 

 

 

◈ Mechanism 분석

 

• 작동하는 이유
- data의 사소한 변경 -> 해시 참조값이 불일치 -> 영향 받는 모든 블록을 재작성 -> 엄청난 계산량으로 조작 포기
=> 블록페인-데이터-구조는 추가 전용 불변성 data 저장소

• 현대 헤드로부터 20블록 이전의 한 트랜잭션을 조작하려는 경우
1) 조작된 트랜잭션 데이터가 속한 머클트리를 재작성
2) 재작성된 머클트리의 루트가 속한 블록헤더를 재작성
-> 해시퍼즐을 다시 풀어야 함
3) 블록체인-데이터-구조의 헤드까지 이어진 모든 후속 블록 헤더들을 재작성
-> 20개의 블록헤더를 재작성(해시퍼즐 포함)

• 블록체인의 불변성은 hash puzzle의 난이도에 의해 결정!
- 해시 퍼즐이 어려울수록 조작에 많은 시간과 노력이 필요하고, 조작 가능성이 낮아짐
- 너무 쉬우면? 적은 시간과 노력으로 조작이 가능하여 조작을 부추김
- 너무 어려우면? 블록 생성에 많은 비용이 소요되어 참여 노드가 감소함
- 새 블록이 추가되는 속도에 따라 난이도를 동적으로 조절
하나의 블록이 추가되는데 걸리는 시간이 기준치보다 길면 난이도 감소, 하나의 블록이 추가되는데 걸리는 시간이 기준치보다 짧으면 난이도 증가
- 비트코인의 경우, 2016개의 블록 생성에 2주가 걸리는지 체크! (10분에 1블록 생성)

 


 

10-2. 거래 정보의 전파

 

◈ 정보 전달 문제

 

• 문제의 정의
- 블록체인이란 트랜잭션 데이터의 전체 이력을 가지고 있는 full node들로 구성
- 각 node는 자신의 경험을 통해 어떤 트랜잭션이 발생하는 증언하는 목격자
=> 목표 : P2P 시스템을 구성하는 노드들이 트랜잭션이 발생할 때마다 이를 서로 전달하여 이력을 관리할 수 있도록 보장

• 해결할 과제
- 순수한 분산 P2P 시스템에는 중앙 통제 장치가 없음. 즉, 정보 공유를 위한 중간자가 없음.
-> 모든 노드가 중간자에 의지하지 않고 모든 트랜잭션 정보를 수시할 수 있도록 보장

• Idea
- 각 노드가 주변의 몇몇 노드들에게 정보 전달
- 정보를 전달 받은 노드는 다른 노드들에게 이를 전달
- 결국 모든 노드들에게 동일한 정보가 전달

• 목적에 따른 사람들의 의사소통 유형 3가지
1) 잡담 : 정보를 담고 있지는 않지만 관계를 유지하는 게 목적
2) 소식 : 구성원들 간의 중요한 관심사에 대한 정보 전달
3) 새로운 동료 소개 : 이미 형성된 집단에 새로운 구성원을 추가하는 게 목적

 

 

 

 

◈ 정보 전달 Mechanism

 

• P2P 시스템의 특징
1) 각 노드는 인터넷을 통해 연결됨
2) 각 노드는 고유 주소로 식별됨
3) 각 노드는 언제든 인터넷에서 분리될 수도, 재 접속할 수도 있음
4) 각 노드는 통신하는 peer list를 독립적으로 유지 (직접적으로 대화하는 친구들이 따로 있다.)
5) 노드간의 통신은 메시지를 통해 이루어짐
6) 인터넷상에서 메시지는 주소를 이용해 하나의 노드에서 다른 노드로 전송(1:1 통신)

• P2P 시스템상에서 정보 전달의 특성
1) 목적지에 도달한다는 보장이 없음. 심지어는 메시지 소실 가능
2) 중복해서 전달될 수 있음
3) 보낸 순서와 다른 순서로 도착할 수 있음

• 통신 장애 해결 방법
1) 메시지는 소문 형식으로 전달
- 메시지를 받은 노드는 자신의 peer들에게 전달
- 부분적으로 메시지가 소실될 수 있지만 중복해서 전달됨으로써 결국 모든 노드들에게 전달되는 것이 보장
2) 메시지는 암호화 hash 값으로 식별 가능
- 중복되어 전달된 메시지를 쉽게 식별하고 버림
3) 메시지는 시간에 따라 정렬됨
- 트랜잭션 데이터와 블랙헤더는 time stamp를 포함

• P2P 시스템에서 노드간 통신의 3가지 유형
1) 기존 연결 유지
- 각 노드는 통신하는 peer list를 독립적으로 유지
- peer list는 시스템을 구성하는 전체 노드 set의 부분 집합
ex) 중한 회사 내에서 일부 직원들이 동료인 것
- 각 노드는 주기적으로 peer들이 접속 상태인지 확인(메시지를 보내고 싶을 때 통신이 가능한 노드들에게만 보낼 수 있기 때문에)
-> Ping Pong 메시지를 사용 (살아있니? – 응, 살아있어)
-> 일정 시간 이상 접속하지 않는 peer는 list에서 제거

2) 새로운 연결
- P2P 시스템에 참여하려는 노드는 임의의 노드에게 접속 요청을 전달
- 요청 받은 노드가 응답하면 두 노드는 서로 peer list에 상대방을 추가
- 같은 방법으로 peer list에 다수의 노드를 추가함으로써 강건한 네트워크 형성

3) 새로운 정보의 배포
- 블록체인-데이터-구조에 새로운 트랜잭션 데이터나 블록을 추가
(i) 지속적인 방식 : 새로운 트랜잭션과 블록은 발생과 동시에 배포
(ii) 갱신 방식 : 연결이 끊긴 후 재접속시 그동안 발생한 트랜잭션과 블록을 전달받음
(iii) on-boarding 절차의 일부 : 시스템에 새로 참여한 노드의 경우 처음부터 지금까지 발생한 모든 트랜잭션 이력을 한꺼번에 전달받아 블록체인-데이터-구조를 구축

• Mechanism 분석-작동하는 이유
- 새로운 노드가 시스템에 참여할 수 있도록 보장하여 시스템 확장을 가능하게 함
- 각 노드들이 peer list에 있는 노드들을 지속적으로 체크함으로써 기존 연결을 유지하고 관리함
- 각 노드들인 트랜잭션 데이터나 블록과 같이 블록체인-데이터-구조에 새로 추가할 정보를 모든 노드들에게 전달함을 보장

 


10-3. 거래 정보의 검증

 

◈ 시험지 채점 서비스의 예

 

• 시험지 채점 서비스
- 학교에서 용역 회사에 사지선다형 시험 문제에 대한 학생들의 답지와 정답을 전달하고 용역 회사가 직원을 고용해 채점 후 결과를 학교로 전달
- 용역회사 입장에서는 정직원을 고용하는 경우 부대비용이 너무 많이 든다. 재택근무를 하는 시간제 직원을 고용하여 결과물을 평가해 성과급을 지급
- 시간제 직원은 정확한 채점에 대한 동기가 부족

• 성과급 지급 방법
1) 채점할 답지, 정답, 채점 결과는 모두 컴퓨터 시스템을 통해 전달
2) 답지를 가장 먼저 정확히 채점한 직원에게 1달러 보상금을 지급
3) 채점 결과를 직원들이 서로 검증하게 함. 다른 직원의 오류를 발견한 직원은 오류를 일으킨 직원의 보상금을 빼앗아 올 수 있음

• 성과급 지급 방법이 초래하는 결과
- 직원들은 보상을 받기 위해 규칙을 지켜야 할 경제적 이유가 생김
- 규칙1에 따라 모든 직원은 동료들의 오류 교정에 필요한 모든 정보가 제공됨. 모든 직원은 작업 조건이 동일함
- 규칙2에 따라 모든 직원은 작업 속도를 높일 동기가 생김. 작업 속도와 작업의 질은 Trade-off 관계임
- 규칙3에 따라 모든 직원은 작업의 질을 높일 동기가 생김. 모든 직원은 동료들의 오류를 교정할 동기가 생김

• 부작용
- 모든 직원들이 담합하여 채점을 랜덤하게 하고 오류 교정을 생략할 수 있음
-> 단체 행동을 방지할 수 있어야 함

 

 

 

 

◈ 검증 문제의 정의

 

• 목표
- 누구든지 트랜잭션 이력에 새로운 트랜잭션을 추가할 수 있도록 허용
- 시스템의 무결성 유지

• 해결할 과제
- 가정 : 블록체인은 완전한 개방형 시스템, 부정직한 사람도 참여 가능, 전달된 트랜잭션 데이터가 정확하다는 보장이 없음
- 과제 : 트랜잭션 데이터의 유효성을 검증할 방법이 필요

• Idea
- 모든 노드가 서로를 감시
- 적절한 보상
1) 유효한 트랜잭션을 추가하거나 동료의 오류를 발견한 경우
2) 트랜잭션을 정확히 처리하고 동료의 오류를 교정할 동기 부여

 

◈ 검증 Mechanism

 

• 검증 매커니즘의 구성 요소
1) 검증 규칙 (데이터에 대한 유효성을 판단하는 기준)
- 블록체인-데이터-구조사 유효한 해당 요소로만 블록들이 구성되도록 하는 것이 목적
(i) 트랜잭션 데이터 검증 규칙
- 형식적 정확성, 의미상 정확성, 승인
(ii) 블록헤더 검증 규칙
- 형식적 정확성에 초점
- 트랜잭션 데이터의 내용과 무관
- 블록체인-데이터-구조에 정보가 추가되는 방식과 관련
핵심 요소 : 작업 증명의 확인, 해시 퍼즐을 해결하여 작업 증명을 확인 받은 블록만 선택

2) 보상 (노드들의 자발적 참여 유도)
- 유효한 블록을 생성하려면 블록 고유의 해시 퍼즐을 풀어야 함. 이 과정에서 시간과 비용이 발생
- 각 노드가 블록 생성의 부담을 지도록 하는 유일한 동기 = 비용 이상의 보상 제공
- 보상은 전체 시스템의 무결성을 유지하기 위해 짊어진 부담에 대한 대가

3) 처벌 (무결성 유지 필요 요소)
- 시스템의 무결성에 반하는 행동에는 처벌이 필요
ex) 블록이 생성 시에는 인정되었지만 차후에 유효하지 않거나 무용한 것으로 판명된 블록에 대해서는 보상을 회수 / 중복된 블록, 너무 오래되거나 쓸모없는 블록에는 보상하지 않음
- 보상하지 않으면 작업을 위해 사용한 시간과 비용만큼 손해

4) 경쟁 (비용을 줄이면서 품질을 높임)
- 비용을 줄이면서 높은 품질의 결과물을 얻기 위한 방법
- 속도 경쟁, 품질 경쟁을 조합하여 지속적으로 노드들이 경쟁하며 일을 한다. 두 가지 경쟁에서 모두 이긴 블록만 새 블록을 제출하는데 대한 보상을 받는다.
- 속도 경쟁에서 패배한 노드가 품질 경쟁의 심판이 되서 속도 경쟁에서 승리한 노드들의 블록을 검증하게 만든다.
(i) 속도 경쟁
: 블록 고유의 해시 퍼즐을 빨리 푸는 것이 작업 증명의 핵심
: 한 노드가 해시 퍼즐을 풀어 새로운 블록을 제출함으로써 경쟁이 끝남
(ii) 품질 경쟁
: 제출된 새 블록은 모든 노드들에게 전달됨. 새 블록을 수신한 모든 노드들은 품질 경쟁의 심판 역할. 트랜잭션 데이터와 블록 헤더의 검증 규칙에 따라 새 블록을 검증
: 유효한 블록으로 판정되면 새 블록을 제출한 노드는 보상을 받음. 다음 블록에 대한 속도 경쟁이 시작됨.
: 유효하지 않은 블록으로 판정되면 그 블록은 폐기되고 현재 블록에 대한 속도 경쟁이 다시 시작됨.
: 속도 경쟁에서 진 노드들은 다시 속도 경쟁에 참여하여 승자가 될 수 있음. 제출된 새 블록의 오류를 발견하면 다시 속도 경쟁에 참여하기 때문에 최대한 까다롭게 검증할 동기가 부여됨.
=> 시스템의 무결성 유지

5) peer간 통제
- 시스템 내의 모든 노드는 다른 노드의 감시자
- 모든 노드가 노동자인 동시에 감독관
- 각 노드는 새로운 블록의 생성과 유효하지 않은 정보의 감지, 거절, 제거에 기여

 


10강 강의 노트 끝-!

감사합니다 :)

*사진의 모든 출처 : http://www.kmooc.kr/

댓글