[블록체인] 10주차_블록의 생성 1
이 내용은 K-MOOC 알기쉬운블록체인 강의를 듣고 정리한 내용입니다.
거래 정보의 보호
정보 조작의 문제
1. 위조 방지 방법
- ‘불가능’은 아니지만 극단적으로 많은 비용과 노력이 필요해서 사실상 위조 어렵게 하기
- 블록체인 목표: transaction 이력을 변경할 수 없게 만들어서 위조나 조작 방지
- 해결할 문제: 개방된 분산 P2P 시스템의 부정직한 peer들의 위조 시도로부터 정보 보호
2. 블록체인의 위조 방지 방법
- 개방된 시스템에서 정직한 node와 부정직한 node를 사전에 구분하는 것은 불가능
- 따라서 애초에 그 누구도 transaction 정보를 조작할 수 없도록 만듦
- transaction 이력을 변경, 위조하는 일이 너무나 큰 노력과 비용이 들어가서 단념하게 됨
- ‘불변성’ =
읽기 전용(readOnly)
- 모든 종류의 증명서에 해당: 운전면허증, 여권, 졸업증명서 등
불변성 구현 메카니즘
1. 블록체인 위조 방지를 위한 조건 3가지
- 조작이 쉽게 드러나게 만듦
블록체인-데이터-구조
에서 변경-감지 방식으로 저장됨- 사소한 변경도 hash참조를 손상시켜 쉽게 감지됨
- 변경된 데이터를 끼워넣으려먼 블록을 다시 작성하도록 강제함
- 변경하려면 해당 블록부터 체인의 마지막 블록까지 모두 변경해야 함
- data를 추가, 변경, 재작성하는 작업에 엄청난 비용이 발생하게 만듦
- 각 블록 작성 시 블록헤더마다 고유하게 존재하는
hash puzzle
풀어야 하므로 엄청난 계산 비용 발생
- 각 블록 작성 시 블록헤더마다 고유하게 존재하는
2. 불변성을 위한 세 가지 고려사항
block header
의 필수 데이터- transaction (거래 내용) 데이터 담고 있는 Merkle tree의 root
- 이전 block header를 가리키는 hash 참조값
- hash puzzle의 난이도: (블록헤더 해시값 계산에 포함)난이도를 임의로 낮추어 계산량 줄이는 것 방지
- hash puzzle 풀이 시작 시간: 해시퍼즐 푸는 데 걸리는 시간 측정해서 블록체인 전체의 해시퍼즐 난이도 조절함
- hash puzzle을 해결할 수 있는 nonce(난스값): 블록헤더 해시할 때 난스값도 포함하는데, 해시한 값이 특정 조건을 만족하도록 만드는 특정 값이 난스값이 된다. 해시값으로 입력값 찾기 어려움으로 여러 가지 난스값을 하나씩 넣어보며 조건에 맞는 값을 찾는 것이 과제가 된다. (작업 증명, proof of work)
- 새
block header
생성하는 과정- 새로 추가되는 transaction 담고 있는 Merkle tree의 root얻기
- 직전 block header를 가리키는 hash 참조 생성
- 필요한 난이도 획득: 블록체인 전체에서 일정 시간 간격으로 난이도 조절됨
- 현재 시간 확인: 시간도 블록헤더 데이터에 추가됨
- 1~4의 정보를 포함하는 에비 블록헤더 생성
- 예비 블록헤더에 해당하는 해시퍼즐 계산
- 해시 퍼즐을 해결하는 난스(nonce)fmf 예비 블록헤더에 포함시켜 새 블록 완성
- 블록 생성 시, 풀어야 할 hash puzzle: 난이도도 해시의 일부가 되기 때문에 난이도를 쉽게 조정하는 행위도 쉽게 발각된다.
- 블록헤더 검증 규칙: 해시퍼즐 해결하고, 필요한 계산 비용을 지불한 블록만 추가될 수 있도록 보장함
- 직전 블록을 가리키는 유효한 hash참조를 가지고 있어야 한다.
- transaction 데이터를 담고 있는 Merkle tree의 root 포함
- 정확한 난이도
- time stamp가 직전 블록헤더의 time stamp 이후여야 한다. (블록 및 거래내용이 추가된 순서대로 정렬되어 있음을 보장)
- nonce값 포함
- 앞의 다섯 개 data 조각을 합친 hash값으로 난이도 충족해야 함
메카니즘 분석
1. 해당 메커니즘이 작동하는 이유
- 사소한 변화로도 해시값이 변하기 때문
- data의 사소한 변경 -> hash참조값 불일치 -> 영향 받는 모든 블록 재작성-> 엄청난 계산량으로 조작 포기
2. 현재 head로부터 20 block 이전의 한 transaction을 조작하려는 경우
- 조작된 transaction data가 속한 Merkle tree를 재작성
- 재작성 된 merkle tree의 root가 속한 블록 헤더를 재작성
- hash puzzle을 다시 풀어야 함
- 해당 블록부터 연결된 모든 후속 블록헤더들을 재작성
- 20개의 블록 헤더 재작성 (hash puzzle 포함)
- 20개의 블록 헤더 재작성 (hash puzzle 포함)
3. 불변성을 결정하는 Hash Puzzle의 난이도
- 해시퍼즐 어려울수록 조작 가능성 낮아짐
- 퍼즐 너무 쉬울 때: 적은 시간과 노력으로 조작이 가능해 조작을 부추김
- 퍼즐 너무 어려울 때: 블록 생성에 많은 비용이 소요되어 참여 node가 감소함
- 새 블록이 추가되는 속도에 따라 난이도 동적 조절
- 기준치: (Bitcoin) 2016개의 블록 생성에 2주가 걸리는지 체크 (10분에 블록 1개 생성)
- 하나의 블록 추가하는 데 걸리는 시간이 기준치보다 길면(어려우면) 난이도 감소, 기준치보다 짧으면(쉬우면) 난이도 증가
거래 정보의 전파
정보 전달 문제
1. 문제의 정의
- 블록체인: 트랜잭션 데이터 전체 이력이 저장된 원장을 보유한 개별 컴퓨터(full-node)로 구성
- full-node: 블록체인 전체 거래 이력 가지고 있는 개별 컴퓨터
- 각 node: 자신의 경험에 따라 트랜잭션이 발생했는지 증언하는 목격자와 같음
- 순수 분산 P2P 시스템에는 중앙 통제 장치 없음 = 정보 공유를 위한 중간자가 없음
- 해결 과제: 중간자에 의지하지 않고 모든 노드가 모든 트랜잭션 정보를 주고받을 수 있도록 보장해야 한다.
2. 순수 분산 P2P 시스템에서 노드 간 정보 전달 방식: 소문 확산
- 각 node가 주변의 몇몇 노드들에게 정보 전달
- 정보를 전달받은 노드는 또 자기 주변의 다른 노드에 이를 전달
3. 목적에 따른 의사소통 유형 세 가지
- 잡담: 정보를 담고 있지는 않지만 관계 유지가 목적
- 소식: 구성원들 간 중요 관심사에 대한 정보 전달 -> 블록체인-데이터-구조에 새로운 트랜잭션, 블록 추가
- 새로운 동료 소개: 이미 형성된 집단에 새로운 구성원 추가 -> 블록체인 네트워크에 새로운 노드 추가
정보 전달 메카니즘
1. P2P 시스템의 특징
- 각 노드는 인터넷을 통해 연결: 반드시 네트워크 연결되어 있어야 한다.
- 각 노드는 고유 주소로 식별됨: URL과 다른 블록체인 고유 주소 체계 존재
- 각 노드는 언제는 시스템(인터넷)에서 분리될수도, 재접속 할 수도 있다.
- 각 노드는 통신하는
peer list
를 독립적으로 유지함: 직접 통신하는 node들이 정해져 있다. - 각 노드 간 통신은
message
를 통해 이루어짐 - 인터넷 상의 메시지는 각 노드에 부여된 고유 주소를 통해 노드 간 일대일 전송됨: 즉
브로드캐스팅(전체 시스템 방송)
이 아니라일대일 통신
2. P2P 시스템 상에서 정보 전달의 특징
- 목적지에 도달한다는 보장이 없음
- 네트워크 통신: 언제든지 단절, 재접속 가능성 있음
- message 소실 가능
- 중복해서 전달될 수 있음: 여러 가지 경로(여러 노드에서 통신)로 전달하기 때문
- 보낸 순서와 다른 순서로 도착할 수 있음: 늦게 보내도 더 짧은 경로를 거쳐 온 메시지가 먼저 도착할 수도 있음
3. 통신 장애 해결 방법
message
는 소문 형식으로 전달message
를 받은 node는 자신의 peer들에게 전달- 부분적으로
message
가 소실될 수 있지만 중복해서 전달함으로써 결국 모든 node에게 전달되는 것을 보장함
message
는 암호화 hash값으로 식별 가능- 중복되어 전달된
message
쉽게 식별하고 버릴 수 있음
- 중복되어 전달된
message
는 시간에 따라 정렬됨- 트랜잭션 데이터와 블록헤더는
time stamp
를 포함 ->시간 순 정렬 가능
- 트랜잭션 데이터와 블록헤더는
4. P2P 시스템에서 node간 통신의 세 가지 유형
- 기존 연결 유지
- 각 노드는 통신하는
peer list
를 독립적으로 유지 peer list
는 시스템을 구성하는 전체 node Set의 부분집합- 각 노드는 주기적으로 peer들이 접속 상태인지 확인한다
- Ping Pong message` 사용: ‘Ping’ 보내서 ‘Pong’오면 접속 상태로 간주
- 일정 시간 이상 접속하지 않는 peer는 리스트에서 제거한다.
- 각 노드는 통신하는
- 새로운 노드 연결
- 시스템에 새로 참여하려는 node는 임의의 node에게 접속 요청 전달
- 요청 받은 node가 응답하면 두 node는 서로 peer list에 상대방 추가
- 같은 방법으로 다수의 노드를 peer list에 추가하여 강건한 network 형성
- 새로운 정보 배포: 새로운 트랜잭션이나 블록을 추가
5. 정보 공유의 세 가지 유형: 소유권 관리 위해 협업하는 과정
- 지속적인 방식: 새로운
트랜잭션
과블록
은 발생 동시에 배포 - 갱신 방식: 시스템의 한 노드가 연결 끊어졌다가 재접속 했을 때 그동안 발생한
트랜잭션
,블록
정보를 다른 피어로부터 전달받는 것 on-boarding
절차의 일부: 시스템에 새로 참여한 node의 경우 처음부터 지금까지 발생한 모든 트랜잭션 이력을 한꺼번에 전달받아블록체인-데이터-구조
를 컴퓨터에 구축하는 것
6. 통신 메카니즘 분석
- 새로운 node가 시스템에 참여할 수 있도록 보장함: 시스템 확장 가능
- 기존 연결 유지, 관리
블록체인-데이터-구조
에 새로 추가할 정보 자기 피어에 전달-> 결국 정보를 모든 노드에 전달하도록 보장함
거래 정보의 검증
시험지 채점 서비스의 예
1. 기본 전제
- 블록체인의 노드들: 이익을 위해 자발적으로 참여함 -> 이익에 맞지 않으면 언제든지 시스템에서 나갈 수 있음
- 이렇게 언제라도 나갈 수 있는 노드들을 활용해서 거래 정보 검증 및 처리해야 함
2. 예시) 시험지 채점 서비스
- 상황: 시험지 대신 채점해주는 회사에서 재택근무 시간제 근로자들을 고용하여 시험지 채점한 만큼(성과만큼) 보상해주려고 한다.
- 재택근무자: 정확한 채점에 대한 동기가 부족
- 성과급 지급 방법
- 채점에 필요한 답지, 정답, 채점 결과는 모두 컴퓨터 시스템을 통해 일괄 전달
- 답지를 가장 먼저 정확히 채점한 직원에게 시험지 장당 $1 보상금 지급
- 채점 결과를 직원들이 서로 검증: 다른 직원의 오류 발견 시 해당 직원 보상금 뺏어오기 가능
- 성과급 지급 방법이 초래하는 결과: 보상을 받기 위해 규칙 지킬 경제적 이유 생성=>작업 효율 증가
- (규칙1) 모든 직원은 동료의 오류 교정에 필요한 정보 제공받음 / 모두 동일한 작업 조건
- (규칙2) 모든 직원은 작업 속도를 높일 동기가 생김 / 그러나
작업속도
와작업의 질
은 (Trade-off, 상충되는 특징)관계임 - (규칙3) 모든 직원은 작업의 질 높일 동기 생김 / 동료의 오류를 교정할 동기 생김
- 직원들이 단체행동 한다면?
- 모든 직원들의 담합
- 채점 정확히 안 하고 random하게 진행
- 동료의 오류 교정 생략
- 단체 행동 방지책 필요
검증 문제의 정의
1. 목표
- 누구든지 트랜잭션 이력에 새 트랜잭션 추가할 수 있도록 허용
- system의 무결성 유지
2. 해결할 과제
- 가정
- 블록체인은 완전한 개방형 시스템: 부정직한 노드(사람)도 참여가능
- 전달된 트랜잭션 데이터가 정확하다는 보장 없음
- 과제: 트랜잭션 데이터의 유효성 검증 방법 필요
- 방법
- 모든 노드가 동료를 감시
- 적절한 보상
- 유효한 트랜잭션 추가 & 동료의 오류 발견 동기 부여
- 트랜잭션 데이터를 정확히 처리하고 동료 오류 교정 동기 부여
검증 메카니즘
1. 검증 메카니즘 구성요소들
- 검증 규칙: 데이터 유효성 판단 기준
- 보상: 노드들이 자발적으로 검증 작업 수행
- 처벌: 무결성 확보
- 경쟁: 저비용, 고효율 (효율 극대화)
- peer 통제: 서로의 오류를 찾기 위해 서로를 감시하는 일
2. 검증 규칙 2가지
- 트랜잭션 데이터 검증 규칙: 응용 분야에 따라 다름
- 형식적 정확성
- 의미상 정확성
- 승인 여부
- 블록헤더 검증 규칙
- 형식상 & 의미상 정확성에 초점
- 트랜잭션 데이터 내용과 무관
- 블록체인-데이터-구조에 정보 추가되는 방식 관련
- POW(Proof of Work) 사용하는 블록체인의 경우
- 작업 증명 확인
- 해시퍼즐 해결->작업 증명 받아야 선택됨
- 보상
- 유효한 블록 생성 위해 블록 고유의 Hash Puzzle 플어야 함
- 해시 퍼즐 풀 때 시간, 비용 발생
- 각 노드가 블록 생성 부담을 지게하는 유일한 동기 = 비용 이상의 보상 제공
- 처벌
- 시스템의 무결성에 반하는 행동에는 처벌 필요
- 블록 생성 시 인정되었으나 차후 유효하지 않거나 무용한 것으로 판명나면 보상 회수
- 중복된 블록, 너무 오래 된 블록, 쓸모 없는 블록에 대해선 보상 안 함
- 보상 안 하면 작업을 위해 사용한 시간, 비용 손해
- 경쟁: 저비용 고품질의 결과물을 위해서
- 속도 경쟁
- 블록 고유의 해시 퍼즐 빨리 푸는 것이 작업 증명의 핵심
- 한 노드가 hash puzzle을 풀어 새로운 블록을 제출->유일 후보->경쟁 끝
- 품질 경쟁
- 제출된 새 블록이 모든 노드들에게 전달됨
- 새 블록 수신한 모든 노드들이 품질 경쟁의 심판이 됨
- 트랜잭션 데이터, 블록헤더 데이터를 검증 규칙에 맞게 검증
- 유효 블록: 블록 생성한 노드는 보상 획득, 다음 속도 경쟁 시작
- 유효하지 않은 블록: 해당 블록 폐기, 현재 블록 재성성을 위한 속도 경쟁 시작
- 속도 경쟁
- peer 통제
- 시스템 내 모든 노드는 다른 노드 감시자
- 모든 노드는 노동자인 동시에 감독관
- 각 노드는 새로은 블록 생성 / 유효하지 않은 정보 감시, 거절, 제어에 기여
댓글남기기