[신뢰의 혁명, 블록체인의 철학 009] '블록체인 기술 개관' 번역 연재 09회. "4 합의모델"과 "5 포크"
번역 연재 소개의 말
미국 국립표준기술원(National Institute of Standards and Technology, NIST)에서 2018년 10월 3일에 발간한 "블록체인 기술 개관"(Blockchain Technology Overview) 이라는 66쪽 짜리 보고서 최종본(National Institute of Standards and Technology Internal Report (NISTIR) 8202)을 번역합니다. 이 보고서의 초고는 2018년 1월 24일에 공개되었고, 많은 공개 논평(public comment)를 받아 새롭게 작성되었습니다.
문서와 관련된 자세한 내용은 다음 포스팅을 참고하세요.
[신뢰의 혁명, 블록체인의 철학 001] '블록체인 기술 개관' 번역 연재 01회. "목차"
많은 호응과 후원 부탁드립니다. 그리고 오류가 있으면 거침없이 지적해주세요. 번역물의 저작권은 저에게 있고, 출처와 함께 링크로 퍼가시기 바랍니다. 보팅과 리스팀은 고래도 춤추게 합니다. 맨 아래 dclick 광고 링크도 한 번 눌러주고 가시면 제게 도움이 됩니다.
이번 회는 "4 합의모델"과 "5 포크"입니다.
- 관련 포스팅
[신뢰의 혁명, 블록체인의 철학 008] '블록체인 기술 개관' 번역 연재 08회. "3 블록체인의 구성요소 중 '3.5 원장', '3.6 블록', '3.7 블록 연결하기'"
[신뢰의 혁명, 블록체인의 철학 007] '블록체인 기술 개관' 번역 연재 07회. "3 블록체인의 구성요소 중 '3.3 비대칭키 암호학 및 3.4 주소와 주소 도출'"
[신뢰의 혁명, 블록체인의 철학 006] '블록체인 기술 개관' 번역 연재 06회. "3 블록체인의 구성요소 중 '3.2 거래'"
[신뢰의 혁명, 블록체인의 철학 005] '블록체인 기술 개관' 번역 연재 05회. "3 블록체인의 구성요소 중 '3.1 암호 해시 함수'와 '3.1.1 암호 난스'"
[신뢰의 혁명, 블록체인의 철학 004] '블록체인 기술 개관' 번역 연재 04회. "2 블록체인의 범주"
[신뢰의 혁명, 블록체인의 철학 003] '블록체인 기술 개관' 번역 연재 03회. "들어가는 말"
[신뢰의 혁명, 블록체인의 철학 002] '블록체인 기술 개관' 번역 연재 02회. "보고서 개요"
[신뢰의 혁명, 블록체인의 철학 001] '블록체인 기술 개관' 번역 연재 01회. "목차"
4 합의 모델
블록체인 기술의 핵심 양상은 어떤 이용자가 다음 블록을 공표하느냐를 결정하는 일이다. 이 문제는 여러 가능한 합의 모델 중 하나를 시행함으로써 풀린다. 비허가형 블록체인 네트워크에서는 일반적으로 다음 블록을 공표하기 위해 동시에 경쟁하는 많은 공표 노드가 있다. 이들은 통상 암호화폐 그리고/또는 거래 수수료를 얻기 위해 이 일을 한다. 이들은 일반적으로 공개 주소를 통해서만 서로 알 수 있을 뿐 서로 불신하는 이용자들이다. 각 공표 노드는 금전적 이익을 위한 욕망에 의해 동기를 부여받았을 테고, 다른 공표 노드들이나 심지어 네트워크 자체의 복리에도 관심이 없다.
그런 상황에서, 이용자는 다른 이용자가 공표하려고 시도하는 블록을 전파하는 걸까? 또한, 여러 노드가 한 블록을 거의 동시에 공표할 때 누가 갈등을 해결할까? 이 작업을 하기 위해 블록체인 기술은 서로 불신하는 이용자 집단이 함께 작업할 수 있도록 합의 모델을 사용한다.
이용자가 블록체인 네트워크에 가담할 때, 이용자는 시스템의 최초 상태에 동의한다. 이 최초 상태는 유일하게 미리 구성된 블록, 즉 제네시스 블록에 기록된다. 모든 블록체인 네트워크는 공표된 제네시스 블록이 있으며, 모든 블록은 그 뒤에 블록체인에 추가되어야만 한다. 이는 동의된 합의 모델에 기반한다. 하지만 모델과는 별개로 각 블록은 유효해야만 하며 따라서 각 블록체인 네트워크 이용자에 의해 제각기 인가될 수 있다. 최초 상태와 그 이후 각 블록을 검증할 수 있는 능력이 결함되면, 이용자는 제각기 블록체인의 현재 상태에 동의할 수 있다. 만일 풀노드에 두 개의 유효한 체인이 제시된다 할지라도, 대부분의 블록체인 네트워크의 초기 설정 메커니즘은 '더 긴' 체인이 바른 체인으로 간주되어 채택된다는 점에 유의하자. 그 까닭은 작업 양 대부분을 더 긴 체인에 쏟았었기 때문이다. 이 일은 종종 몇몇 합의 모델에서 발생하며, 뒤에서 상세히 논할 것이다.
그리하여 다음의 성질들이 설정된다.
- 시스템의 최초 상태가 동의된다 (가령, 제네시스 블록).
- 이용자는 블록들을 시스템에 추가하는 합의 모델에 동의한다.
- 각 블록은 전 블록 헤더의 해시 다이제스트를 포함함으로써 전 블록에 연계된다 (처음의 '제네시스' 블록은 예외인데, 이 블록은 전 블록이 없으며 통상 전 블록 헤더의 해시가 모두 0으로 셋업되어 있다).
- 이용자는 제각각 모든 블록체인을 검증할 수 있다.
실제에 있어, 소프트웨어가 모든 걸 처리하며 이용자는 이런 세부사항을 알 필요가 없다.
블록체인 기술의 핵심 특징은 신뢰 받는 제3자가 시스템의 상태를 정할 필요가 없다는 점이다. 시스템 내의 모든 이용자가 시스템의 무결성을 검증할 수 있기 때문이다. 블록체인에 새 블록을 추가하려면 모든 노드가 시간이 흐르면서 공동의 일치에 이르러야만 한다. 하지만 얼마간의 일시적인 불일치도 허용된다. 비허가형 블록체인 네트워크에서 합의 모델은 악성 유저가 있을 수 있다 해도 작동해야 하는데, 악성 유저는 블록체인을 훼손하거나 장악할지도 모른다. 허가형 블록체인 네트워크에서는 이용자가 악성 행위를 하면 법적으로 문제를 풀 수 있다는 점에 유의하자.
허가형 같은 몇몇 블록체인 네트워크에는 공표 노드 간에 일정 수준의 신뢰가 존재할 수 있다. 이 경우에는 어떤 참가자가 체인에 다음 블록을 추가할지 결정하기 위해 자원 집중적 (계산 시간, 투자 등) 합의 모델을 쓸 필요가 없을 것이다. 일반적으로 신뢰 수준이 증가하면 신뢰를 생성하는 척도로 자원을 이용할 필요는 감소한다. 몇몇 허가형 블록체인 시행에서, 합의 모델의 시야는 블록들의 유효성과 진정성을 확보하는 범위를 넘어, 거래의 제안에서 블록으로의 마지막 포함까지 확인하고 인가하는 일 등 시스템 전반을 아우른다.
다음 절들에서는 몇 가지 합의 모델을 비롯해 가장 흔한 갈등 해소 접근법이 논의된다.
[아래의 4.1절에서 4.6절은 추후에 번역합니다. pp. 19 ~ 26. - 역자]
4.1 작업증명 합의 모델
4.2 지분증명 합의 모델
4.3 순서 지정 합의 모델
4.4 권위증명/신원증명 합의 모델
4.5 경과시간증명 합의 모델
4.6 합의 비교표
4.7 원장을 둘러싼 갈등과 해소
앞에서 논의했듯이 몇몇 블록체인 네트워크에서는 여러 블록이 거의 동시에 공표되는 것이 가능하다. 이렇게 되면 어떤 특정 순간에 다양한 블록체인 버전이 존재하게 될 수 있다. 블록체인 네트워크에서 일관성을 확보하려면 이 다양한 버전은 재빨리 해소되어야만 한다. 이 절에서 우리는 이 상황이 일반적으로 처리되는 방식을 논한다.
분산 네트워크에서, 네트워크 내 몇몇 시스템은 정보가 뒤처지거나 다른 정보를 갖는 일이 있다. 이런 일은 노드 간 네트워크 대기 시간과 노드 집단의 근접성 때문에 생긴다. 비허가형 블록체인 네트워크는 공개성과 경쟁하는 공표 노드의 수 때문에 갈등의 소지가 더 많다. 블록체인 네트워크의 상태에 대한 동의(합의에 이르는)의 주요 부분은 갈등하는 데이터를 해소하는 데 있다.
예를 들어:
- node_A가 거래 #1, 2, 3이 있는 block_n(A)를 창조한다. node_A는 그 블록을 몇몇 노드들에 분배한다.
- node_B가 거래 #1, 2, 4가 있는 block_n(B)를 창조한다. node_B는 그 블록을 몇몇 노드들에 분배한다.
- 갈등이 생겼다.
- block_n은 네트워크를 가로질러가며 똑같을 수 없다.
- block_n(A)는 거래 #3을 포함하고 있지만, 거래 #4는 아니다.
- block_n(B)는 거래 #4를 포함하고 있지만, 거래 #3은 아니다.
- block_n은 네트워크를 가로질러가며 똑같을 수 없다.
갈등은 일시적으로 블록체인의 서로 다른 버전을 생성하는데, 그림4에 묘사되어 있다. 이렇게 서로 다른 버전은 '잘못된' 건 아니다. 오히려 그것들은 각 노드가 이용할 수 있는 정보와 함께 창조되었다. 경쟁하는 블록들은 서로 다른 거래들을 담고 있을 테고, 그래서 block_n(A)가 있는 블록들은 block_n(B)에 없는 디지털 자산의 양도를 보고 있는 셈이다. 블록체인 네트워크가 암호화폐를 다루고 있다면, 어떤 블록체인 버전을 보고 있느냐에 따라 어떤 암호화폐가 전송되었기도 하고 전송되지 않았기도 한 상황이 일어날 수도 있다.
<그림4: 갈등하는 원장>
통상 갈등은 빨리 해소된다. 대부분의 블록체인 네트워크는 다음 블록이 공표될 때까지 기다려서 그 블록을 '공식' 블록체인으로 사용하며, 따라서 '더 긴 블록체인'을 채택하고 있다. 그림5에서 보듯, block_n(B)를 포함하는 블록체인은 '공식' 체인이 되는데, 이 체인이 다음 번 유효한 블록을 갖게 되었기 때문이다. block_n(A), 즉 고아 블록에 있던, 하지만 block_n(B)에는 없는 모든 거래는 미결 거래 풀(블록 내에 포함되지 않은 모든 거래가 머무는 곳)로 되돌려진다. 미결 거래 집합은 각 노드에 국지적으로 보존되는데, 그 까닭은 아키텍처에 중앙 서버가 없기 때문이라는 점에 유의하자.
<그림5 : block_n(B)를 가진 체인이 다음 블록을 추가했고, block_n(A)를 가진 체인은 이제 고아가 되었음>
블록들이 중복 기재될 가능성이 있기에, 거래는 해당 거래를 포함하는 블록의 꼭대기에 몇 개의 추가 블록이 창조되기 전까지는 통상 확증된 것으로 수락되지 않는다. 블록들은 대체될 수도 있기에, 블록의 수락은 종종 결정론적이기보다는 확률적이다. 공표된 블록의 꼭대기에 더 많은 블록이 건설되었을수록, 최초의 블록이 중복 기재될 여지는 줄어들게 된다.
가설을 세워 보자면, 작업증명 블록체인 네트워크에서 한 노드가 엄청난 양의 컴퓨팅 파워를 가지고 제네시스 블록에서 시작해서 현존하는 체인보다 더 긴 체인을 창조해서, 블록체인 역사 전체를 쓸어버릴 수도 있다. 이 일에 필요한 자원의 양이 이 일을 막을 정도로 크기 때문에, 이 일은 실제에서는 일어나지 않는다. 또한 어떤 블록체인 시행은, 이런 일이 일어날 수 없도록 보장하기 위해 점검 지점을 만듦으로써 블록체인 소프트웨어 내에 특수한 옛 블록들을 잠가버린다.
출처: BLOCKCHAIN TECHNOLOGY OVERVIEW, pp. 18 ~ 28.
5 포크
변경의 수행과 기술 업데이트는 최선의 시간에 행하기 어렵다. 비허가형 블록체인 네트워크는 많은 이용자로 이루어져 있고, 전 세계에 분산되어 있으며, 이용자들의 합의에 의해 통치되기 때문에, 더 극단적으로 어렵다. 블록체인 네트워크의 프로토콜과 데이터 구조를 변경하는 일은 포크라고 불린다. 포크는 소프트포크와 하드포크 두 범주로 나뉠 수 있다. 소프트포크에서 이런 변경은 업데이트되지 않은 노드들과 역방향으로 양립할 수 있다. 하드포크에서 이런 변경은 업데이트되지 않은 노드들이 변경을 따르는 블록들을 거절할 것이기 때문에 역방향으로 양립할 수 없다. 그렇게 되면 블록체인 네트워크에서 같은 블록체인의 여러 버전이 생겨나는 쪼개짐이 일어날 수 있다. 허가형 블록체인 네트워크는 공표 노드와 이용자가 알려져 있기 때문에 소프트웨어 업데이틀 요청함으로써 포크 이슈를 경감시킬 수 있다.
포크라는 용어가 어떤 블록체인 네트워크에서는 4.7절에서 기술한 일시적인 장부 갈등(가령 두 개 이상의 블록이 블록체인 네트워크 내에서 같은 블록 넘버를 갖는 일)을 묘사하는 데 사용되기도 한다는 점에 유의하자. 이것이 장부 안에서 포크이긴 해도, 그건 일시적이며 소프트웨어 변경에서 유래하는 게 아니다.
5.1 소프트포크
소프트포크란 블록체인 시행에 가해지는 역방향으로 양립할 수 있는 변경이다. 업데이트되지 않은 노드들은 업데이트된 노드들과 계속해서 거래할 수 있따. 만약 그 어떤 노드도 업그레이드하지 않으면( (또는 극소수 노드만 업그레이드하면), 업데이트된 규칙들은 준수되지 않을 것이다.
소프트포크의 사례는 에스크로(각주8)와 시한장치 환불을 지원하기 위해 새 규칙이 추가되었을 때 비트코인에서 일어났다. 2014년에, 아무 작업도 수행하지 않는 작업 코드(OP_NOP2)를 미래 어떤 시점에 소비할 수 있도록 거래 출력을 허용하는 CHECKLOCKTIMEVERIFY로 목적을 바꾸자는 제안이 있었다[주14]. 이 변경을 시행하는 노드들에서 노드 소프트웨어는 이 새 작업을 수행할 테지만, 이 변경을 지원하지 않는 노드들에서 거래는 여전히 유효할 거고 실행은 마치 NOP(각주9)가 실행되기라도 한 것처럼 계속될 것이다.
소프트포크의 사례를 하나 꾸며내 보면 이렇다. 블록체인이 블록 크기를 축소하기로(가령 1.0MB를 0.5MB로) 결정하는 것이다. 업데이트된 노드들은 블록 크기를 조절할 것이고, 정상적으로 계속해서 거래할 것이다. 업데이트되지 않은 노드들은 이 블록들을 유효한 것으로 여길 것이다. 왜냐하면 변경은 규칙에 어긋나지 않게 이루어졌으니까(말하자면, 블록 크기가 허용된 최대치 이하이다). 하지만 만약 업데이트되지 않은 노드가 0.5MB보다 큰 크기의 블록을 창조하려 한다면, 업데이트된 노드들은 그런 블록을 유효하지 않다고 거절할 것이다.
5.2 하드포크
하드포크는 블록체인 시행에 가해지는 역방향으로 양립할 수 없는 변경이다. 시간 상의 특정 시점에서(통상 특정 블록 넘버에서), 모든 공표 노드는 업데이트된 프로토콜을 사용하도록 갈아탈 필요가 있을 것이다. 게다가 모든 노드는 새 프로토콜로 업그레이드해서 새로 포맷되는 블록을 거절하지 않아야 할 것이다. 업데이트되지 않은 노드들은 업데이트된 블록체인에서 계속해서 거래할 수 없는데, 왜냐하면 그 노드들은 특정한 블록 사양의 버전을 따르지 않는 모든 블록을 거절하도록 프로그램되어 있기 때문이다.
업데이트하지 않은 공표 노드들은 계속해서 옛 포맷을 사용해 블록들을 공표할 것이다. 업데이트하지 않은 이용자 노드들은 새 포맷 블록들을 거절하고 옛 포맷 블록들만 수락할 것이다. 그 결과 동시에 존재하는 두 개의 블록체인 버전이 생겨난다. 서로 다른 하드포크 버전의 이용자들은 서로 영향을 주고받을 수 없다는 점에 유의하자. 대부분의 하드포크가 의도적인 반면, 소프트웨어 에러가 비의도적인 하드포크를 낳을 수도 있다는 점을 유념하는 것은 중요하다.
하드포크의 유명한 사례는 이더리움이다. 2016년, 이더리움에 탈중앙 자율 조직(Decentralized Autonomous Organization, DAO)이라 불리는 스마트 컨트랙트가 건설되었다. 스마트 컨트랙트가 건설되는 방식의 결함 때문에, 공격자는 이더리움이 사용하는 암호화폐인 이더를 빼갔는데, 그 결과 500만$를 도둑맞았다. 이더 보유자들에 의해 하드포크 제안이 투표에 부쳐졌고, 다수 이용자가 명백히 하드포크에 동의해서 결함 없는 블록체인 새 버전을 창조했으며, 또한 그 하드포크는 도난당한 자금을 되돌려놓았다.
암호화폐에서 하드포크가 있게 돼서 블록체인이 쪼개지면 이용자들은 양쪽 포크에서 서로 독립적인 화폐를 갖게 될 것이다(총 두 배의 코인을 갖게 됨). 만일 모든 활동이 새 체인으로 이동하면, 옛 체인은 결국 사용되지 않을 텐데, 왜냐하면 두 체인은 양립할 수 없기 때문이다(그 둘은 독립적인 화폐 시스템일 것이다). 이더리움 하드포크의 경우, 다수 지원이 명백히 새 포크로 이동했고, 옛 포크는 이더리움 클래식이라고 이름이 바뀌어 작동을 이어갔다.
5.3 암호기술 변경과 포크
블록체인 네트워크 내의 암호 기술에 결함이 발견되면, 결함의 심각성에 따라 달라지겠지만, 유일한 해결책은 하드포크를 창조하는 것이리라. 예컨대 기저의 알고리즘에 흠결이 발견된다면 미래의 모든 클라이언트가 더 강한 알고리즘을 사용하도록 요구하는 하드포크가 있을 수 있다. 새로운 해시 알고리즘으로 갈아타는 것은 심각한 실천적 문제를 제기할 수도 있다. 현존하는 모든 특화된 채굴 하드웨어를 무효화할 수도 있기 때문이다.
가정을 해보자. 만일 SHA-256이 결함이 있다고 밝혀진다면, SHA-256을 이용하는 블록체인 네트워크는 하드포크를 해서 새 해시 알고리즘으로 옮겨갈 필요가 있다. 새 해시 알고리즘으로 갈아탄 블록은 모든 전 블록들을 (검증을 위해) SHA-256으로 "잠글" 테고, 모든 새 블록들은 새 해시 알고리즘을 이용할 필요가 있을 것이다. 암호 해시 알고리즘은 많고, 블록체인 네트워크는 필요에 맞는 그 어떤 알고리즘이라도 사용할 수 있다. 가령 비트코인은 SHA-256을 사용하는 반면, 이더리움은 Keccak-256을 사용한다[주8].
블록체인 네트워크에 있는 암호학적 특징을 변경할 필요가 생길 한 가지 가능성은 실용적인 양자컴퓨터 시스템의 발전일 텐데, 양자컴퓨터는 현존하는 암호 알고리즘을 크게 약화시킬 (그리고 어떤 경우에는 쓸모없게 만들) 수 있다. NIST 내부 보고서(NISTIR) 8105, 즉 양자컴퓨터 후의 암호학 보고서[주16]는 통상의 암호 알고리즘에 대한 양자컴퓨터의 영향을 기술하는 표를 제공한다. 표2가 그 복제이다.
암호 알고리즘 | 유형 | 목적 | 대규모 양자 컴퓨터의 영향 |
---|---|---|---|
AES | 대칭키 | 암호화 | 더 큰 키 규모 필요 |
SHA-2, SHA-3 | N/A | 해시 함수 | 더 큰 출력 필요 |
RSA | 공개키 | 서명, 키 설정 | 더 이상 안전하지 않음 |
ECDSA, ECDH (Elliptic Curve Cryptography) | 공개키 | 서명, 키 교환 | 더 이상 안전하지 않음 |
DSA (Finite Field Cryptography) | 공개키 | 서명, 키 교환 | 더 이상 안전하지 않음 |
<표2: 통상의 암호 알고리즘에 대한 양자컴퓨터의 영향>
비대칭키 쌍을 위해 대부분의 블록체인 기술에서 이용되는 암호 알고리즘은 강력한 양자컴퓨터가 현실이 되면 대체될 필요가 있을 것이다. 왜냐하면 소인수분해의 계산적 복잡함에 의존하는 알고리즘(RSA 같은)이나 이산 로그를 풀어 작용하는 알고리즘(DSA와 Diffie-Hellman)은 양자컴퓨터에 의해 깨지기가 아주 쉽기 때문이다. 블록체인 네트워크에 의해 사용되는 해시 알고리즘은 양자컴퓨터 공격에 훨씬 덜 취약하지만, 약화되기는 한다.
출처: BLOCKCHAIN TECHNOLOGY OVERVIEW, pp. 29 ~ 31.
li-li님의 매력적인 스티미언 인터뷰 #10 (190106)
용어가 종종 헷갈릴때가 있었는데 찾아보기 좋네요. 보팅합니다!
크하아아아아아~앙~!
아름다운 형아~♥♩♬
그동안 알쏭달쏭 어렵게만 와닿았던
블록체인 용어들 톺아보기 완전 좋드앙~!
합의 모델 본문 중에
결함 ☞ 결합 이 아닐까 형아가 다시 함 확인해줘잉~!
디클릭 ♥ 사랑 함께 응원합니당~!
행복한 불금 ♥ 보내셔용~^^
Posted using Partiko Android
표까지 직접 만드셨네요. 고생하신 덕분에 더 이해할 수 있었습니다.
좋은 하루되세요~~
원서에 있는 걸, Typora를 이용해 마크다운으로 만들었습니다^^
곰돌이가 @armdown님의 소중한 댓글에 $0.009을 보팅해서 $0.014을 살려드리고 가요. 곰돌이가 지금까지 총 2665번 $32.860을 보팅해서 $33.118을 구했습니다. @gomdory 곰도뤼~
짱짱맨 호출에 응답하여 보팅하였습니다.
스팀달러 에어드랍 북이오 독점 판매 "살다 보면"에서 좋은 구절을 하나 소개합니다.
어머님이 내가 국수를 좋아한다고 손수 삶아 놓으신 거라고 하셨다. 좋아서 다시물을 찾으니 주위에 물은커녕 고명도 아무것도 없었다. 시어머니께 국수를 어떻게 먹냐고 하니 손수 내려오셔서 국수 그릇을 들고 우물에서 떠온 물을 붓더니 조선간장 한 수저를 넣어 주셨다.
Hi @armdown!
Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 4.360 which ranks you at #2368 across all Steem accounts.
Your rank has improved 21 places in the last three days (old rank 2389).
In our last Algorithmic Curation Round, consisting of 356 contributions, your post is ranked at #111.
Evaluation of your UA score:
Feel free to join our @steem-ua Discord server