Front-end Developer

0%

블록체인 무엇인가? 3장 블록체인은 어떻게 작동하는가? 16 ~ 18단계

16. 블록체인이 데이터를 보호하는 방법

목표

블록체인이 유지하는 전체 트랜잭션 이력을 불변성 데이터로 만들어 위조나 조작이 없게 한다.

해결해야 할 과제

누구에게나 개방된 순수 분산 P2P 시스템을 개방한 채 조작이나 위조의 위협으로부터 트랜잭션 데이터를 보호한다.

아이디어

처음부터 아무도 이력을 조작하지 못하게 막아놓는다.

불변성은 읽기 전용의 다른 이름

불변성 데이터는 한번 생성되면 절대로 변경될 수 없고, 이러한 데이터는 읽기 전용 데이터라고도 한다. 데이터를 변경과 조작으로부터 보호하는 효과적인 방법이다.

작동원리

트랜잭션 이력을 변경하는 일이 감당 불가라서 누구라도 단념하게 만드는 방법으로 트랜잭션 이력을 불변성 데이터로 만든다.

트랜잭션 이력을 불변성 데이터로 만드는 데 필요한 세 가지

  • 트랜잭션 이력을 저장할 때 아무리 사소한 조작이라도 바로 드러날 수 있게 한다.
    • 아무리 사소한 변경이라도 데이터를 가리키는 해시 참조를 무효화 시켜서 몰래 조작이 불가하다.
  • 변경된 데이터를 끼워넣으려면 엄청난 양을 다시 작성하도록 강제한다.
    • 변경하려면 변경된 부분부터 헤드까지 전체 체인을 완전히 변경하거나 내버려둬야 한다.
  • 트랜잭션 이력에 데이터를 추가, 변경, 재작성하는 작업에 엄청난 계산량이 필요하도록 한다.
    • 블록체인-기술-모음은 블록체인-데이터-구조의 모든 블록에 대해 작성, 재작성, 추가 작업에 엄청난 계산 비용이 필요하게끔 만든다.

작동원리: 세부 사항 살펴보기

블록체인-데이터-구조의 새 블록 추가에는 많은 계산량이 들지 않지만 이것을 불변성으로 만들려면 새 목록을 추가하는 것이 많은 계산량을 필요로 하게끔 해야한다. 이를 위해서 아래와 같은 사항을 고려한다.

  • 필수 데이터
  • 새 블록 헤더를 생성하는 프로세스
  • 블록 헤더를 검증하는 규칙

필수 데이터

블록체인-데이터-구조의 모든 블록 헤더는 최소한 다음의 데이터를 가진다.

  • 트랜잭션 데이터를 담고 있는 머클 트리의 루트
  • 이전 블록 헤더를 가리키는 해시 참조
  • 해시 퍼즐의 난이도
  • 해시 퍼즐 풀이를 시작한 시각
  • 해시 퍼즐을 해결할 수 있는 난스

새 블록을 생성하는 프로세스

  1. 새로 추가되는 트랜잭션을 담고 있는 머클 트리의 루트 얻기
  2. 새 블록 헤더의 입장에서 이전 블록 헤더를 가리키는 해시 참조 생성하기
  3. 필요 난이도 획득하기
  4. 현재 시각 읽기
  5. 1~4번에 언급된 데이터를 포함하는 예비 블록 헤더 생성하기
  6. 예비 블록 헤더에 해당하는 해시 퍼즐 해결하기
  7. 해시 퍼즐을 해결할 난스를 예비 헤더에 포함시켜 새 블록 완결하기

검증 규칙

다음의 규칙을 준수한다.

  1. 직전 블록을 가리키는 유효한 해시 참조가 있다.
  2. 트랜잭션 데이터를 갖고 있는 머클 트리의 루트를 포함한다.
  3. 정확한 난이도를 가지고 있어야 한다.
  4. 타임 스탬프는 직전 블록 헤더의 타임 스탬프 이후여야 한다. (블록과 트랙잭션 데이터들이 추가 된 순서에 따라 정렬되어 있음을 보장)
  5. 난스를 포함해야 한다.
  6. 위 5개의 데이터 조각을 함친 해시값으로 난이도를 충족해야 한다.

검증 규칙은 해시 퍼즐을 해결하고, 필요한 계산 비용을 지불한 블록만 추가되도록 보장한다. 이처럼 해시 퍼즐을 해결하여 블록체인-데이터-구조에 새 블록을 추가하는 행위를 마이닝 혹은 블록 마이닝이라 부른다.

작동하는 이유

해시 참조가 가리키는 데이터에 변경이 있으면 그 즉시 해시 참조 자체를 손상시키는 성질에서 비롯되어, 데이터 조작이 있을 경우 영향받은 모든 블록을 다시 작성하게 한다. 결국 블록체인-데이터-구조의 불변성은 해시 퍼즐의 난이도에 달려 있다. 난이도가 너무 낮으면 계산비용도 낮아져 조작의 가능성이 높아지고, 난이도가 너무 높으면 새 데이터를 추가하는 계산 비용도 높아져 새 데이터 추가에 대한 의욕이 상실될 수 있다. 따라서 블록체인 디자인 시 해시 퍼즐의 적절한 난이도를 결정하는 것이 매우 중요하다. 실제로는 새 블록이 추가되는 속도에 기초한 동적 난이도를 활용하는데, 새 블록의 추가 속도가 빨라지면 난이도를 높이고, 그 반대면 난이도를 낮추는 방식으로 적정 수준의 난이도를 유지한다.


17. 컴퓨터들이 정보를 배분하는 방법

목표

P2P 시스템을 구성하는 개별 컴퓨터들이 트랜잭션이 발생할 때마다 적절히 통보받아 자신의 트랜잭션 데이터 이력을 관리할 수 있도록 보장한다.

해결해야 할 과제

순수 분산 P2P 시스템에는 중앙 통제와 조정 장치가 없기 때문에 시스템의 모든 노드가 이러한 장치에 의지하지 않고 모든 트랜잭션 정보를 수신하도록 해주는 것이다.

아이디어

P2P 시스템을 구성하는 컴퓨터들이 정보를 공유하고 교환하도록 하는 것인데, 노드 하나가 피어 노드에게 정보를 전달받으면 다른 피어에게 그 정보를 전달하고, 그 피어가 또 다른 피어에게 전달하는 방식으로 시스템 내 모든 노드가 정보를 전달받도록 한다.

작동원리

분산 P2P 시스템의 컴퓨터는 디지털 네트워크를 통해 통신하기 때문에 노드들이 인터넷을 통해 서로 통신하도록 하는 방식으로 P2P 시스템을 구성할 수 있다. 단 노드가 네트워크를 통해 통신하고 언제든 단절과 재접속을 할 수 있다는 점이 메시지 전달에 영향을 미친다. 네트워크에서 이루어지는 메시지 전달에는 아래와 같은 특성이 있다.

  • 손실될 가능성이 있다.
  • 한 번 이상 도달할 수 있다.
  • 전송한 순서와 다른 순서로 도착할 수 있다.

이 특성때문에 통신에 장애가 발생할 수 있지만 아래의 방법으로 해결할 수 있다.

  • 새로운 정보를 받은 모든 노드는 자신이 통신하는 피어에게 전달하기 때문에 몇몇 메시지가 손실될 수 있어도 궁극적으로 모든 노드가 메시지를 수신하는 것을 보장한다.
  • 메시지는 디지털 지문 또는 암호화 해시값으로 식별 가능하므로 노드가 중복된 메시지를 식별해서 무시할 수 있다.
  • 트랜잭션 데이터와 블록 헤더에 타임 스탬프가 포함되어 있어서 노드들이 객관적인 시각 기준에 따라 메시지를 정렬할 수 있다.

P2P 시스템을 구성하는 노드 간 통신은 다음 세 가지 목적을 가진다.

  • 기존 연결 유지
  • 새로운 연결
  • 새로운 정보 배포

기존 연결 유지, 새로운 연결은 P2P 시스템 자체에 초점을 맞추고 있어서 피어 간 네트워크를 유지하고 약간의 디지털 관리 업무를 수행한다. 새로운 정보 배포는 블록체인-데이터-구조에 새로운 트랜잭션 데이터나 블록을 추가하는 것에 초점을 맞춘다.

  • 기존 연결 유지

네트워크의 각 컴퓨터는 통신하는 피어 리스트를 독립적으로 유지하고, 피어 리스트는 시스템을 구성하는 전체 노드의 부분집합이다. 주기적으로 각 컴퓨터는 피어가 연결상태인지 확인하기 위해 핑(ping)하고 메시지를 보내고, 퐁(pong)으로 대답하도록 요청한다. 만약 이 메시지에 반복적으로 대답하지 않는 피어가 있다면 리스트에서 제거한다.

  • 새로운 연결

P2P 시스템 내에 참여하고 싶은 컴퓨터는 시스템 내의 아무 노드에게나 시스템에 참여하고 싶다고 요청한다. 이렇게 요청을 받은 노드는 요청자인 피어의 주소를 피어 리스트에 추가하고 확인 응답을 보내고, 확인 응답을 받은 노드는 응답을 보낸 주소를 자신의 피어 리스트에 추가한다. 이렇게 되면 새로운 연결이 형성되어 시스템에 노드 하나가 더 증가한 것이다. 그리고 P2P 시스템에 참여할 때는 시스템의 일부인 다수의 노드와 연결을 형성한다. 특정 노드 하나의 연결이 끊어지더라도 시스템에 연결된 상태를 유지하기 위함이다.

  • 새로운 정보 배포

새로 추가될 트랜잭션 데이터와 새 블록 정보를 통신을 통해 전달하는데, 소유권 관련 정보를 공유하는 일은 다음 3가지 경우에 발생한다.

  • 지속적인 방식
    • 새로운 정보는 발생과 동시에 배포되고, 시스템에 연결된 모든 노드가 정보를 받는다.
  • 갱신 방식
    • 연결이 끊겼다가 다시 시스템에 연결되었을 때, 그 사이 놓친 트랜잭션 데이터와 블록에 대한 정보를 모두 받는다.
  • 온보딩 절차의 일부로 갱신
    • 시스템에 새로 참여한 노드는 트랜잭션 이력을 구축할 기회가 없었기 때문에 시스템 참여 직전까지 발생한 모든 트랜잭션 이력을 얻어와야 한다. 따라서 새로운 참여자가 참여하자 마자 모든 정보를 갖추어 노드가 될 수 있도록 보장한다.

작동하는 이유

앞서 살펴본 3가지 통신 방식이 새로운 컴퓨터가 시스템에 참여할 수 있도록 보장해주기 때문에 시스템이 확장되게 하면서 기존 연결 유지의 업무도 수행하게 한다. 가장 중요한 점은 블록체인-데이터-구조 내 새로 추가되는 트랜잭션 데이터와 블록에 대한 모든 정보를 P2P 시스템의 전체 구성원이 궁극적으로 받아볼 수 있도록 보장한다는 것이다.


18. 블록체인 속 무한경쟁 사회

목표

시스템의 무결성을 유지하면서 누구든지 트랜잭션 데이터 이력에 새로운 트랜잭션을 추가할 수 있도록 허용한다.

해결해야 할 과제

완전히 개방된 시스템에서 누구든 시스템에 참여하여 데이터를 전송할 수 있는데, 이 데이터들이 정확하다는 보장은 없다. 따라서 시스템을 모두에게 개방하면서도 오직 유효한 트랜잭션만 추가될 수 있도록 보장하는 것이 필요하다.

아이디어

시스템의 모든 노드가 다른 피어 노드를 감시하도록 하면서 동시에 유효하고 승인된 트랜잭션을 추가하거나 타인의 작업에 오류를 발생했을 때 적절한 보상을 해주어 동기를 부여한다.

작동원리: 구성요소들

블록체인-알고리즘은 노드가 새 트랜잭션 데이터와 블록을 어떻게 처리할지 통제하는 일련의 명령어이다. 개별적 규칙과 절차는 다음과 같다.

  1. 검증 규칙
  2. 보상
  3. 처벌
  4. 경쟁
  5. 피어 통제

1. 검증 규칙

블록체인-데이터-구조가 유효한 트랜잭션 데이터와 블록 헤더만으로 구성된 블록만을 가지도록 한다. 데이터 유효성의 검증에는 다음의 두 가지가 필요하다.

  • 트랜잭션 데이터 검증 규칙
  • 블록 헤더 검증 규칙
  • 트랜잭션 데이터 검증 규칙

형식의 정확성, 의미상 정확성, 승인의 3요소이다. 이 규칙은 블록체인의 응용분야(블록체인이 어떤 산업분야에서 사용되는가)에 따라 서로 다른 검증 규칙을 가지게 된다.

  • 블록 헤더 검증 규칙

형식과 의미의 정확성에 초점이 있고, 트랜잭션 데이터의 내용과 무관한 블록체인-데이터-구조에 정보가 추가되는 방식과 관련 있다. 개별적 해시 퍼즐을 해결한 헤더를 가진 블록만 그 다음 단계로 넘어가고, 그렇지 못한 블록은 즉시 폐기된다.

2. 보상

유효한 블록 생성을 위해 블록의 고유 해시 퍼즐을 풀어야만 한다. 이때 피어가 해시 퍼즐을 푸는 부담(에너지, 시간, 돈 등)을 짊어지도록 하는 방법은 비용에 상응하는 보상을 제공하는 것이다. 블록체인-알고리즘이 유효한 블록을 제출한 노드가 보상을 받는 방식을 정의한다.

3. 처벌

  • 생성 당시엔 인정되었지만 나중에 유효하지 않거나 무용한 것으로 판명된 블록에 대해 이미 지급된 보상을 회수한다.
  • 노드가 작업 증명을 했지만 블록이 중복되거나 너무 오래된 경우, 쓸모없는 경우에 보상을 하지 않는다.

4. 경쟁

시스템을 유지하는데 드는 비용을 줄이면서 높은 작업 품질을 성취하는 최선의 방법으로 서로 경쟁하도록 만든다. 블록체인-알고리즘은 아래 두 가지 기준의 조합으로 지속적인 경쟁을 유발하며 적절히 보상한다.

  • 속도 경쟁

해시 퍼즐에 기초한다. 유효한 블록 생성의 핵심은 작업 증명을 생성하는 것이므로, 작업 증명은 곧 새 블록의 고유 해시 퍼즐을 해결했다는 의미이다. 모든 노드는 해시 퍼즐을 푸는 경쟁에 참여하게 되는데, 이 경쟁은 어떤 노드가 새 블록을 제출함과 동시에 끝난다. 새 블록을 제출한 노드는 품질 경쟁의 유일한 후보자가 된다.

  • 품질 경쟁

제출된 블록의 정확성에 초점을 맞춘다. 새 블록은 수신한 모든 모드는 트랜잭션 데이터와 블록 헤더의 검증 규칙에 기초하여 새 블록을 검증한다. 피어 통제를 통해 매우 높은 정확성을 유지하도록 한다. 새 블록을 수령한 노드는 자신이 속도 경쟁에서 패했다는 사실을 깨달았으므로 꼼꼼한 심판관이 되고, 제출된 블록이 무효라면 또다시 속도 경쟁을 거쳐야 하므로 자신이 새 블록을 제출하여 승자가 될 수 있음을 알고 있다.

5. 피어 통제

시스템의 모든 노드는 다른 노드의 감시자인데, 새 블록을 생성하고 트랜잭션을 검사하면서도 다른 노드가 생성한 블록을 수신해서 검토하고 검증하는 역할을 한다. 즉 새 블록의 생성과 유효하지 않은 트랜잭션 데이터와 블록의 감지, 거절, 제거에 기여한다.

작동원리: 골격

시스템의 모든 노드는 다음 두 상태 중 하나에 속해 있다.

  1. 피어에 의해 생성되고 제출된 새 블록을 평가 중
  2. 스스로 새 블록을 만들어 다른 피어에게 평가받으려 열심히 노력 중

블록체인-알고리즘의 중요 역할은 모든 노드가 동일한 작업 상태를 가지도록 보장하는 것이고, 동일한 작업 상태는 모든 블록이 동일한 트랜잭션 데이터 이력을 유지하게 하는 핵심 개념이다. 상태를 결정하는 것은 개별 노드에게 도착하는 메시지인데, 각 노드가 새 블록을 담고 있는 메시지를 받자마자 평가 상태로 스위치되고, 평가 상태가 완료되자마자 새 트랜잭션을 검증하고 자체적으로 새 블록을 생성하기 위한 상태로 스위치된다.

부정직한 노드는 어떻게 처리할까?

P2P 시스템에서 가장 두드러진 부정직한 행위는 다음과 같다.

  • 다른 사람으로 위장해 트랜잭션 제출
  • 유효하지 않은 트랜잭션 데이터나 블록을 인정
  • 노드를 다운시키기 위해 수많은 트랜잭션 데이터를 전송
  • 특정 트랜잭션 데이터 처리를 거부
  • 정보 전달을 거부

이러한 부정직한 경우는 아래와 같이 처라힌다.

  • 해당 개인 키 소유자에게만 계정의 접근을 허용하는 트랜잭션의 보안 개념(비대칭 암호화 기법, 디지털 서명을 통한 식별, 인증, 승인)
  • 모든 노드가 결국 모든 정보를 수신하는 것을 보장.
  • 특정 노드가 잘못되거나 데이터 처리를 멈추어도 전체 시스템이 계속 작동하도록 보장하는 시스템 아키텍처
  • 블록체인-알고리즘

블록체인이 부정직한 노드를 처리하는 가장 큰 무기는 정직한 다수의 힘과 보상 및 처벌의 효과이다.


References
[블록체인 무엇인가?] 다니엘 드레셔 지음