Skip to content

블록체인 작업증명 구현 #16

@Jinsun-Lee

Description

@Jinsun-Lee
  • 개념: 블록체인은 관리 대상 데이터를 블록으로 하는 소규모 데이터들이 p2p 방식을 기반으로 생성된 체인 형태의 연결고리 기반 분산 데이터 저장 환경에 저장하여 누구라고 임의로 수정할 수 없고 누구나 변경의 결과를 열람할 수 있는 분산 컴퓨팅 기술 기반의 원장 관리 기술이다
  • 키워드: 블록, P2P, 체인, 분산, 원장
  • 블록 = 지키고 싶은 중요한 데이터

  • hash function이 주요 기술 -> 원본 데이터가 고정된 길이의 데이터로 변환해 줌(단방향)
  • 입력이 같으면 출력이 같아 항상
  • sha256 해시함수 사용(32바이트의 숫자값)
  • 이전블록의 해시값, 머클트리 루트, 난이도, 논스
  • geth(Go-ethereum)를 사용해서 제네시스 블록을 json 파일로 만들어 이더리움 사설 테스트 네트워크 노드 구축 가능

  • 현재 블록은 이전 블록의 해시값을 같이 저장
  • 하나의 블럭: hash(n-1), 중요한 데이터, nonce가 저장됨
  • nonce는 해시값을 만들 때 제시하는 과제 같은 것
  • 논스는 블록 해시값을 만족시키기 위해 사용되는 임의의 숫자
  • 다음 해시값이 Y로 시작할래라고 요청하면 -> 값을 비틀어서 Y로 시작하는 해시값이 출력되게끔 노가다를 반복함
  • 그게 우리가 지정한 논스값의 답을 찾는 것
  • 한 문제를 풀 때 보통 10분 정도가 소요됐었어

  • 위변조가 발생하면 값이 달라지는데, 시간이 지날수록 그 이후의 블록들을 전부 수정되어야 해
  • 즉, 어떤 블록을 위조하려면 그 블록의 데이터를 변경하고, 해시값을 재계산하고, 다음 블록들의 해시들을 전부 다시 계산해야 해. 네트워크 전체보다 더 빠른 속도로 계속 블록을 생성해야 하는데... 길이가 길수록 누적 계산량이 기하급수적으로 커지게 됨
  • 그래서 가장 긴 체인 = 그 데이터 위에 더 많은 계산과 합의가 쌓였다는 의미 = 따라서 조작하려면 네트워크 전체보다 더 많은 자원이 필요 = 그래서 시간이 지날수록 그 거래는 “사실상 확정된 팩트”로 취급

  • 그 뒤에 엄~청 긴 체인을 연결하면 되지 않을까?
  • 이게 바로 51% 공격 시나리오
  • 공격자는 과거의 특정 블록부터 자기만의 체인을 새로 채굴
  • 기존의 정식 체인보다 더 길게 만든 뒤에 네트워크에 공개
  • 가장 긴 체인 = 가장 많은 계산이 들어간 체인이라는 Longest Chain Rule에 의해 자신의 체인이 채택되길 기대
  • 그러나 수정한 블록부터 현재 블록까지 전부 다시 채굴해야 함
  • 동시에 네트워크는 계속 정상 체인을 연장하고 있음
  • 즉, 과거부터 다시 시작해서 현재를 추월해야 함

  • 그런데 비트코인의 해시파워는 전세계 채굴자들이 분산 보유
  • 공격자가 과반의 연산력을 가져야 평균적으로 따라잡을 수 있음
  • 50퍼 미만이면 시간이 지날수록 성공 확률은 기하급수적으로 감소
  • 그래서 이론적으로 해시파워의 과반을 공격자가 장악하고, 네트워크가 작고 참여자가 적으면 현실적 위험이 존재
  • 그래서 블록체인의 보안은 수학적 절대성이라기보다, 경제적 불가능성에 기반함

  • 블록체인에서는 누가 다음 블록을 만들 권리를 가지는가가 중요
  • 이 권한을 결정하는 방식이 합의 알고리즘
  • 합의 알고리즘의 대표적인 두 방식이 PoW랑 PoS

  • PoW는 Proof of Work 작업증명, 비트코인
  • 계산을 가장 많이 한 사람이 블록을 만든다
  • 핵심이 연산!!!!!!
  • 경쟁력은 연산력, 전기 많이 씀, 계산량이 곧 보안, 가장 긴 체인은 가장많은 연산이 들어감 -> 구조가 단순하고 오랜 기간 실전에서 검증되어 안정성이 입증되어 있음
  • 거래들을 모아 블록 후보를 생성
  • 해시값이 특정 조건을 만족하도록 넌스를 계속 변경
  • 조건을 만족하는 해시를 먼저 찾은 사람이 블록 생성
  • 보상으로 코인 획득

  • PoS Proof of Stake 지분증명, 이더리움
  • 코인을 많이 맡긴 사람이 블록 생성 권한을 얻는다
  • 누가 더 많이 맡겼는가!!!!!!!!!
  • 왜? 이 네트워크의 가치를 가장 많이 보유한 사람이 이 네트워크를 망가뜨릴 이유가 가장 적어서!
  • 그래서 담보를 설정해서 블록 생성자는 자신의 자산을 걸고 참여! 부정행위는 걸리면 지분을 몰수 -> 그럼 배신했을 때 예치한 코인이 몰수 + 코인 가격 하락 + 본인의 자산 가치 급감 / 그러나 정직할 경우, 블록 보상 + 코인 가치 상승 가능
  • 즉, 도덕적인 신뢰가 아닌 경제적인 인센티브 설계 방식
  • 코인을 예치하면, 시스템이 확률적으로 검증자 선정, 선정된 검증자가 블록 생성, 보상 지급, 부정행위시 예치금 몰수

  • 누가 다음 블록을 만들지가 왜 중요할까?
  • 블록을 만든다는 건 단순히 데이터를 추가하는 행위가 아님
  • 그 사람은 어떤 거래를 넣을지 선택하는 권한을 갖게 됨
  • 블록 안에 어떤 거래를 담을지 결정할 수 있고, 그 블록이 받아들여지면 보상을 받는다
  • 사람이 직접 손으로 고르는 구조는 아님
  • 내부 합의 알고리즘이 자동으로 결정을 함

  • 해시는 언제 변경되고, 어떻게 바뀌는지
  • 해시를 설정하는 것은 곧 난이도
  • 개인이 바꾸는 것이 아니라, 프로토콜에 정의된 규칙에 따라 자동 조정됨
  • 예. 평균 블록 생성 시간이 10분이 되도록 or 약 2016개 블록마다 or ...

  • Image






Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions