블록체인 원리 - (5) 비가역성
블록체인 원리 (6) - 하드 포크와 소프트 포크
1. 하드 포크와 소프트 포크의 기본 개념
하드 포크와 소프트 포크
동일한 블록에서 노드가 다른 행동을 하는 이유
- 중앙화 서버 : 하나의 소프트웨어를 여러 사람이 접속
- 블록체인 : 각자의 소프트웨어 접속 -> 모든 사람의 소프트웨어 버전이 다르기 때문에 발생
블록체인의 소프트웨어 변경
- 최신 소프트웨어 사용자 -> 모든 변경이 반영된 상태로 사용
- 이전 소프트웨어 사용자 -> 변경이 반영되지 않은 형태로 사용
하드포크, 소프트 포크
- 동일한 블록에 대해 서로 다른 규칙을 적용, 서로 다른 결론에 이르는 현상
규칙이 상충시 발생하는 두 가지 현상
- 과거에는 유효하던 규칙이 지금은 무효화
- 과거에는 무효하던 규칙이 지금은 유효화 -> 결국 블록체인 데이터에 영향을 미치게 됨
2. 하드 포크
하드 포크
- 하나의 네트워크 안에 두 개의 블록체인 데이터 생성
-
이전 소프트웨어 사용 그룹이 모드 업데이트 하기전까지 절대 하나로 합쳐지지 않는 현상
- 갈라진 상태가 그대로 고착
- 과거에는 무효이던 규칙이 유효화되는 경우 발생
하드 포크 예시
블록의 크기가 바뀐 경우
- 비트코인의 블록의 크기 1MB -> 2MB 경우 무효 및 기각
- 소프트웨어 변경으로 2MB 블록 허용한 경우
- 이전 버전, 최신 버전 사용자 서로 다른 블록생성
- 최신 버전이 사용자가 생성한 블록은 이전 버전 사용자 규칙을 어기게 된 블록
소프트 포크
- 과거에는 유효이던 규칙이 무효화되는 경우 발생
- 과거 사용규칙 -> 심각한 결함을 발견 -> 사용불가 판단
-
이전 노드는 최신 소프트웨어 블록에 블록체인 데이터 강제적 통일
- 소프트 포크의 성공 여부는 채굴업자의 협조 여부에 달림 -> 최신 버전 사용 채굴업자 소프트 포크 성공 가능성
유효하던 규칙을 무효화한 소프트웨어를 배포한 경우
최신 소프트웨어 사용자
- 무효화된 규칙 삭제한 블록 생성
이전 소프트웨어 사용자
- 무효화 된 규칙 포함한 블록 생성
- 이전 소프트웨어 사용자 -> 다양한 블록 생성 가능
소프트웨어를 채굴업자들이 많이 사용하게 하려면
- 소프트 포크 감행 전 반드시 협조 요청
하드포크 소프트 포크 비교
발생
- 하드포크 : 과거에는 무효이던 규칙이 유효화되는 경우 발생
- 소프트포크 : 과거에는 유효이던 규칙이 무효화되는 경우 발생
예시
- 하드포크 : 1MB -> 2MB 블록크기 허용
- 최신 사용자 : 유효
- 이전 사용자 : 무효
- 소프트포크 : 과거 사용한 규칙 -> 결함 -> 미사용 및 삭제
- 최신 사용자 : 무효화된 규칙 미사용 -> 이전 사용자 제작 불록 -> 무효함
- 이전 사용자 : 무효화된 규칙 사용 -> 최신 사용자 제작 블록 -> 유효함
통일 시점
하드 포크
- 기존 블록은 유효하지 않으므로 업그레이드 블록을 따라가지 않음
- 모든 노드가 새로운 블록체인으로 업그레이드 할 때 하나의 블록체인 데이터로 통일
소프트 포크
- 기존 블록은 업그레이드 블록이 유효한 블록으로 인정
- 최신 소프트웨어 버전의 블록체인 데이터를 이전 소프트웨어 사용자는 강제적으로 따라감
프로그램의 업그레이드 및 변경
- 블록체인의 경우 일괄 변경 가능성 매우 낮음
- 소프트웨어 업그레이드 여부는 노드를 운영하는 사람이 결정
- 중앙화 서버
- 중앙서버만 변경하면 일괄 변경 가능
소프트웨어 메인터넌스 업그레이드
- 블록체인에서 가장 어려운 부분
- 가급적 자제하는 것이 바람
- 채굴업자 사전 협약으로 성공확률 높이는 것 중요
- 채굴업자 동의 없이는 블록 생산이 거의 불가능
블록체인 데이터는 중앙화 서버에 비해 소프트웨어 관리가 어려움
1. 비가역성의 의미
비가역적 기록
- 기록 후 어떠한 경우에서도 변경하지 못하도록 하는 성질
- 블록체인은 비가역적 성질을 가지기 위한 방법에 대한 연구와 관련이 있음
현실적으로 비각역적 기록성을 가진 장치의 제작은 불가능
- 비가역적 기록장치처럼 제작하는 것은 가능
- 대표적인 방법은 작업증명 방식을 사용한 해시퍼즐
블록체인
- 기록을 하기 힘든 장치
- 기록 후 수정이 매우 힘든 장치
- 비가역성을 소프트웨어로 구현하기 위한 방식
-
기록의 무결성 유지 방법 : 모든 노드가 항상 검증에 참여
비가역적 기록장치가 존재하지 않는다면
- 주기적으로 기록의 변경여부를 모든 노드가 다시 검증해야 하는 문제점 발생
비가역적 기록장치의 필요성
- 최초 기록의 정확한 검증 가능
- 주기적인 검증 노력 불필요
- 검증 과정 단순화를 위해 비가역적 장치 필요
모든 노드가 연속적으로 검증 반복 -> 비가역적 기록장치 불필요
비가역적 장치의 부재 -> 신규 블록 생성에 있어 문제 발생
블록체인의 사이클
- 누가 기록할 것인지 선발(리더 선출)
- 선출 된 리더가 기록
- 모든 노드가 기록의 규칙 준수 여부 확인 (검증)
- 비가역적 보관 = 동의
- 합의
-> 한 번의 검증을 마치는 문제는 시스템의 현실적 구축과 직결되는 문제가 될 수 있음. -> 제대로 된 검증 규칙으로 하나의 블록체인이 형성됨 -> 비가역적 보관을 할 수 있는 장치가 존재하지 않는 경우 현실적인 에너지 낭비 문제 발생
기록의 검증 + 비가역성 = 기록에 대한 신뢰 생성
- 재검증 하지 않더라도 영속적으로 이어짐
사카시 나카모토
- 작업증명 방식으로 비가역성 증명 -> 수시로 재검증을 해야 하는 과정이 반복되면 블록체인은 존재 불가
2. 비가역성의 구현
블록체인에서 비가역성을 구현하기 위해 활용
- 해시 함수
- 작업증명
비가역성의 구현 단계
1단계 : 작업증명
- 블록체인은 최초 기록과 수정이 어려운 장치
- 기록이 항상 작업증명을 거치도록 만들어짐
- 블록체인은 최초 기록과 수정에 에너지가 많이 소모됨
- 해시 퍼즐 해결을 위해 10분이상 쉬지 않고 해시 함수를 반복
- 계산 작업이 10분 안에 이루어질 수 있도록 난이도 조절
- 정확한 기록을 위해 소프트웨어를 이용한 기록을 어렵게 만듦
- 블록체인에 정보를 기록하기 위해 반드시 해시퍼즐 해결
- 블록체인의 기록 시 한 번에 진실을 쓰려고 노력하게 됨
2단계 : 연쇄해시를 통한 작업변경의 기하급수적 증가
해시퍼즐
- 일련의 과정을 통해 특정 목표값보다 더 작은 값을 찾는 과정
- 블록헤더에는 이전 해시값이 들어있음
- 현재 블록의 해시값을 찾을 때 이전 블록 해시값을 포함하여 계산함
- 앞에 있는 블록의 값이 변경되는 경우, 이후 블록의 해시값도 변경됨
연쇄 해시의 효과
해시 퍼즐을 미리 풀 수 없음
- 현재의 값 계산을 위해 바로 직전 블록의 해시 값이 존재 해야 하므로 불가능 하다.
- 바로 직전에 만들어진 블록의 다음 블록만 생성 가능
이전 블록의 해시값이 변경 되면 이후 값은 모두 변경됨
- 특정 블록의 특정값을 아무도 모르게 변경할 수 없음
블록체인의 계산
- 현재 블록의 해시값은 연쇄적으로 시작된 모든 해시값이 계산됨
- 제네시스 블록이 변경되면 이후의 모든 블록값이 변경됨 -> 모든 블록의 해시값을 다시 계산
- 특정값을 변경하기 위해서는 바꾸려는 블록 이후의 모든 블록 해시값을 다시 계산
- 블록체인의 작업증명은 오래된 기록이 변경될 수록 작업량이 기하급수적으로 늘어남
Prohibitively Expensive
- 엄두도 못 낼 정도의 과도한 비용 소모를 의미
- 비가역성 구현 방식은 변경 자체가 거의 불가능한 상태로 만들어졌음을 의미함.
블록체인은 정말 변경이 불가능한가
- 방금 만들어진 블록 -> 하나의 해시 퍼즐만 계산하면 변경 가능
이중사용을 위해 6개의 블록을 만들어라
- 점차 현재 값의 변경이 어려워짐
- 블록의 깊이가 깊어질수록 변경 가능성은 기하급수적으로 낮아짐