[TIL & Issue Note] 20220321

블록체인 원리 - (5) 비가역성

블록체인 원리 (6) - 하드 포크와 소프트 포크

1. 하드 포크와 소프트 포크의 기본 개념

하드 포크와 소프트 포크

동일한 블록에서 노드가 다른 행동을 하는 이유

  • 중앙화 서버 : 하나의 소프트웨어를 여러 사람이 접속
  • 블록체인 : 각자의 소프트웨어 접속 -> 모든 사람의 소프트웨어 버전이 다르기 때문에 발생

블록체인의 소프트웨어 변경

  • 최신 소프트웨어 사용자 -> 모든 변경이 반영된 상태로 사용
  • 이전 소프트웨어 사용자 -> 변경이 반영되지 않은 형태로 사용

하드포크, 소프트 포크

  • 동일한 블록에 대해 서로 다른 규칙을 적용, 서로 다른 결론에 이르는 현상

규칙이 상충시 발생하는 두 가지 현상

  1. 과거에는 유효하던 규칙이 지금은 무효화
  2. 과거에는 무효하던 규칙이 지금은 유효화 -> 결국 블록체인 데이터에 영향을 미치게 됨

2. 하드 포크

하드 포크

  • 하나의 네트워크 안에 두 개의 블록체인 데이터 생성
  • 이전 소프트웨어 사용 그룹이 모드 업데이트 하기전까지 절대 하나로 합쳐지지 않는 현상
  • 갈라진 상태가 그대로 고착
  • 과거에는 무효이던 규칙이 유효화되는 경우 발생

하드 포크 예시

블록의 크기가 바뀐 경우

  1. 비트코인의 블록의 크기 1MB -> 2MB 경우 무효 및 기각
  2. 소프트웨어 변경으로 2MB 블록 허용한 경우
    • 이전 버전, 최신 버전 사용자 서로 다른 블록생성
    • 최신 버전이 사용자가 생성한 블록은 이전 버전 사용자 규칙을 어기게 된 블록

소프트 포크

  • 과거에는 유효이던 규칙이 무효화되는 경우 발생
  • 과거 사용규칙 -> 심각한 결함을 발견 -> 사용불가 판단
  • 이전 노드는 최신 소프트웨어 블록에 블록체인 데이터 강제적 통일
  • 소프트 포크의 성공 여부는 채굴업자의 협조 여부에 달림 -> 최신 버전 사용 채굴업자 소프트 포크 성공 가능성

유효하던 규칙을 무효화한 소프트웨어를 배포한 경우

최신 소프트웨어 사용자
  • 무효화된 규칙 삭제한 블록 생성
이전 소프트웨어 사용자
  • 무효화 된 규칙 포함한 블록 생성
  • 이전 소프트웨어 사용자 -> 다양한 블록 생성 가능

소프트웨어를 채굴업자들이 많이 사용하게 하려면

  • 소프트 포크 감행 전 반드시 협조 요청

하드포크 소프트 포크 비교

발생

  • 하드포크 : 과거에는 무효이던 규칙이 유효화되는 경우 발생
  • 소프트포크 : 과거에는 유효이던 규칙이 무효화되는 경우 발생

예시

  • 하드포크 : 1MB -> 2MB 블록크기 허용
    • 최신 사용자 : 유효
    • 이전 사용자 : 무효
  • 소프트포크 : 과거 사용한 규칙 -> 결함 -> 미사용 및 삭제
    • 최신 사용자 : 무효화된 규칙 미사용 -> 이전 사용자 제작 불록 -> 무효함
    • 이전 사용자 : 무효화된 규칙 사용 -> 최신 사용자 제작 블록 -> 유효함

통일 시점

하드 포크
  • 기존 블록은 유효하지 않으므로 업그레이드 블록을 따라가지 않음
  • 모든 노드가 새로운 블록체인으로 업그레이드 할 때 하나의 블록체인 데이터로 통일
소프트 포크
  • 기존 블록은 업그레이드 블록이 유효한 블록으로 인정
  • 최신 소프트웨어 버전의 블록체인 데이터를 이전 소프트웨어 사용자는 강제적으로 따라감

프로그램의 업그레이드 및 변경

  • 블록체인의 경우 일괄 변경 가능성 매우 낮음
    • 소프트웨어 업그레이드 여부는 노드를 운영하는 사람이 결정
  • 중앙화 서버
    • 중앙서버만 변경하면 일괄 변경 가능

소프트웨어 메인터넌스 업그레이드

  • 블록체인에서 가장 어려운 부분
  • 가급적 자제하는 것이 바람
  • 채굴업자 사전 협약으로 성공확률 높이는 것 중요
  • 채굴업자 동의 없이는 블록 생산이 거의 불가능
블록체인 데이터는 중앙화 서버에 비해 소프트웨어 관리가 어려움

1. 비가역성의 의미

비가역적 기록

  • 기록 후 어떠한 경우에서도 변경하지 못하도록 하는 성질
  • 블록체인은 비가역적 성질을 가지기 위한 방법에 대한 연구와 관련이 있음
현실적으로 비각역적 기록성을 가진 장치의 제작은 불가능
  • 비가역적 기록장치처럼 제작하는 것은 가능
  • 대표적인 방법은 작업증명 방식을 사용한 해시퍼즐

블록체인

  • 기록을 하기 힘든 장치
  • 기록 후 수정이 매우 힘든 장치
  • 비가역성을 소프트웨어로 구현하기 위한 방식
  • 기록의 무결성 유지 방법 : 모든 노드가 항상 검증에 참여

비가역적 기록장치가 존재하지 않는다면

  • 주기적으로 기록의 변경여부를 모든 노드가 다시 검증해야 하는 문제점 발생

비가역적 기록장치의 필요성

  • 최초 기록의 정확한 검증 가능
  • 주기적인 검증 노력 불필요
  • 검증 과정 단순화를 위해 비가역적 장치 필요
모든 노드가 연속적으로 검증 반복 -> 비가역적 기록장치 불필요
비가역적 장치의 부재 -> 신규 블록 생성에 있어 문제 발생

블록체인의 사이클

  1. 누가 기록할 것인지 선발(리더 선출)
  2. 선출 된 리더가 기록
  3. 모든 노드가 기록의 규칙 준수 여부 확인 (검증)
  4. 비가역적 보관 = 동의
  5. 합의

-> 한 번의 검증을 마치는 문제는 시스템의 현실적 구축과 직결되는 문제가 될 수 있음. -> 제대로 된 검증 규칙으로 하나의 블록체인이 형성됨 -> 비가역적 보관을 할 수 있는 장치가 존재하지 않는 경우 현실적인 에너지 낭비 문제 발생

기록의 검증 + 비가역성 = 기록에 대한 신뢰 생성
  • 재검증 하지 않더라도 영속적으로 이어짐

사카시 나카모토

  • 작업증명 방식으로 비가역성 증명 -> 수시로 재검증을 해야 하는 과정이 반복되면 블록체인은 존재 불가

2. 비가역성의 구현

블록체인에서 비가역성을 구현하기 위해 활용

  • 해시 함수
  • 작업증명

비가역성의 구현 단계

1단계 : 작업증명

  • 블록체인은 최초 기록과 수정이 어려운 장치
  • 기록이 항상 작업증명을 거치도록 만들어짐
  • 블록체인은 최초 기록과 수정에 에너지가 많이 소모됨
  • 해시 퍼즐 해결을 위해 10분이상 쉬지 않고 해시 함수를 반복
  • 계산 작업이 10분 안에 이루어질 수 있도록 난이도 조절
  • 정확한 기록을 위해 소프트웨어를 이용한 기록을 어렵게 만듦
  • 블록체인에 정보를 기록하기 위해 반드시 해시퍼즐 해결
  • 블록체인의 기록 시 한 번에 진실을 쓰려고 노력하게 됨

2단계 : 연쇄해시를 통한 작업변경의 기하급수적 증가

해시퍼즐
  • 일련의 과정을 통해 특정 목표값보다 더 작은 값을 찾는 과정
  • 블록헤더에는 이전 해시값이 들어있음
  • 현재 블록의 해시값을 찾을 때 이전 블록 해시값을 포함하여 계산함
  • 앞에 있는 블록의 값이 변경되는 경우, 이후 블록의 해시값도 변경됨

연쇄 해시의 효과

해시 퍼즐을 미리 풀 수 없음
  • 현재의 값 계산을 위해 바로 직전 블록의 해시 값이 존재 해야 하므로 불가능 하다.
  • 바로 직전에 만들어진 블록의 다음 블록만 생성 가능
이전 블록의 해시값이 변경 되면 이후 값은 모두 변경됨
  • 특정 블록의 특정값을 아무도 모르게 변경할 수 없음

블록체인의 계산

  • 현재 블록의 해시값은 연쇄적으로 시작된 모든 해시값이 계산됨
  • 제네시스 블록이 변경되면 이후의 모든 블록값이 변경됨 -> 모든 블록의 해시값을 다시 계산
  • 특정값을 변경하기 위해서는 바꾸려는 블록 이후의 모든 블록 해시값을 다시 계산
  • 블록체인의 작업증명은 오래된 기록이 변경될 수록 작업량이 기하급수적으로 늘어남

Prohibitively Expensive

  • 엄두도 못 낼 정도의 과도한 비용 소모를 의미
  • 비가역성 구현 방식은 변경 자체가 거의 불가능한 상태로 만들어졌음을 의미함.

블록체인은 정말 변경이 불가능한가

  • 방금 만들어진 블록 -> 하나의 해시 퍼즐만 계산하면 변경 가능

이중사용을 위해 6개의 블록을 만들어라

  • 점차 현재 값의 변경이 어려워짐
  • 블록의 깊이가 깊어질수록 변경 가능성은 기하급수적으로 낮아짐