(이더리움 캐스퍼 알고리즘의)최소 삭감 조건

Yoonjae Yoo
DNEXT
Published in
19 min readMar 16, 2018

이 글은 비탈릭 부테린이 작성한 Minimal Slashing Conditions의 번역본입니다. 이더리움 캐스퍼에 관련한 한글 자료가 많지 않은 상황에서, 공부를 하려는 분들에게 조금이나마 도움이 되기를 바랍니다.

지난주에 Yoichi가 작성한 블로그 포스트에서는 나의 “최소한의 삭감 조건”의 보안성(safety)과 생존성(liveness)을 형식적으로 증명하는 과정에 대해 다루고 있다. 이것은 비잔틴 장애 내성(Byzantine-fault-tolerant)과 비동시성 환경에서의 보안성 및 암호경제적 보안성을 갖춘 합의 알고리즘에서 가장 중요한 구성 요소이고, 그 알고리즘은 나의 지분증명(proof of stake) 로드맵의 핵심이다. 이 포스트에서 나는 이 알고리즘이 무엇이고, 어떤 중요성을 띄며, 일반적으로 어떻게 지분증명 연구와 맞아 떨어지는지에 대한 세부 사항을 제공할 것이다.

캐스퍼의 핵심 목표는 아래와 같이 약식으로 정의될 수 있는 ‘경제적 완결성(economic finality)’을 획득하는 것이다.

X 달러의 암호경제적 담보금이 예치되어있을 때, (i) B1이라는 블록이 정규체인의 일부가 될 것이라는 증명 혹은 (ii) B1이 인정되지 않도록 효력을 발휘한 행위자들이 최소 X 달러 만큼의 금액에 해당하는 경제적 처벌을 받을 것이라는 증명을 한 클라이언트가 제공할 수 있다면, B1은 경제적으로 완결된 상태이다.

X를 7천만 달러라고 가정해보자. 기본적으로 한 블록이 완결된다면 그 볼록은 체인의 일부가 되고 그것을 변경하기 위해서는 매우 큰 비용이 필요하다. 작업증명(proof of work)는 이 성질을 가지고 있지 않다¹. 오로지 지분 증명만이 갖는 특성이다. 그 목표는 51% 공격이 엄청나게 비싸지게끔 만들어서 검증자(validator)들의 대부분이 협력하여도 엄청나게 큰 규모의 경제적 손실을 입지 않는다면 완결된 블록을 되돌릴 수 없게 만드는 것이다(그 손실은 너무나도 커서 만약 공격을 성공한다면 공격을 교정하기 위한 응급 하드 포크보다 총 코인 공급량의 감소에 시장이 더 크게 반응할 것이므로 결과적으로 해당 암호화폐의 순가격이 증가하게 될 것이다. 기저 철학에 대한 심도있는 설명은 여기서 확인할 수 있다).

캐스퍼에서 경제적 완결성은, 검증자로 하여금 참여하기 위해서는 반드시 예치금을 제출하고 그들이 일련의 규칙들(“삭감 조건들")을 위반했을 때에 예치금을 차감함으로써 달성이 된다.

하나의 삭감 조건은 아래와 같이 이루어져 있다:

만약 검증자가 다음과 같은 형식의 서명된 메시지

["PREPARE", epoch, HASH1, epoch_source1]

와 또다른 다음과 같은 형식의 서명된 메시지

["PREPARE", epoch, HASH2, epoch_source2]

를 전송했을 때(여기서 HASH1 != HASH2이고 epoch_source1 = epoch_source2이지만 epoch 값은 동일하다고 가정) 검증자의 예치금은 삭감(즉, 증발)된다.

프로토콜은 일련의 삭감 조건을 정의하고 있고 정직한 검증자는 그 조건들 중 하나라도 유발하지 않는 프로토콜을 따른다(참고: 우리는 종종 삭감 조건을 “위반한다”는 표현과 “유발한다”는 표현을 동일하게 사용한다). 같은 시대(epoch)에서 PREPARE메시지를 두번 보내면 안된다와 같은 규칙은 지키는 것이 그렇게 어렵지 않다.

“PREPARE”와 “COMMIT”이라는 용어는 비잔틴 장애 내성 합의 이론에서 가져온 것이다. 지금은, 두 단어를 서로 다른 종류의 메시지로 생각해라. 조금 있다가 프로토콜을 자세히 소개하겠지만, 합의 과정에 두 차례의 동의가 포함되어 있고 PREPARE은 첫번째 차례, COMMIT은 두번째 차례라고 생각하면 된다.

또한 완결성 조건이라는 것이 있는데 클라이언트가 특정 해시가 완결되었다는 것을 결정할 때 사용되는 조건을 의미한다. 이것은 조금 더 쉽다. 캐스퍼에서 사용되는 완결성 조건에 대해 바로 이야기해보려고 한다.

어떤 특정한 epoch 번호에 대해 다음과 같은 형식의 서명된 메시지 집합이 존재하고

["COMMIT", epoch, HASH]

이 서명된 메시지를 생성한 검증자들의 예치금 잔액을 전부 더했을 때 그 금액이 현재 활성화된 검증자들 전체 예치금의 2/3 이상이 된다면, 하나의 HASH는 완결된 상태이다.

짧게 얘기하자면, “해시는 특정 시대에서 2/3 이상의 검증자들에 의해 참여(commit)되었다" 혹은 “해시는 특정 시대에서 2/3 이상의 참여를 보유하고 있다”라고 표현할 수 있다.

삭감 조건은 다음과 같은 두가지 조건을 만족해야 한다.

  1. 책임있는 보안성(accountable safety): 만약 두개의 충돌하는 해시가 완결된다면, 최소한 1/3 이상의 검증자들이 어떤 삭감 조건을 어겼다는 것이 참으로 증명된다.²
  2. 실질적 생존성(plausible liveness): 최소 1/3 이상의 검증자들이 삭감 조건을 어기지 않았다면, 2/3 이상의 검증자들이 전송할 수 있으며 삭감 조건을 어기지 않고 새로운 해시를 완결시키는 메시지 집합이 있다.

책임있는 보안성은 “경제적 완결성"의 아이디어를 떠올리게 한다. 만약 두개의 충돌하는 해시가 완결된다면(즉, 포크 발생), 검증자들 중 다수가 삭감 조건을 어겼다는 것이 수학적으로 증명이 되고, 블록체인으로 이에 대한 증거를 제출해서 그들을 벌할 수 있다.³

실질적 생존성이란 기본적으로 “해당 알고리즘이 멈추거나(stuck) 완결을 시킬 수 없는 상황이 발생할 수 없다”는 의미이다.

두가지 개념을 설명하기 위해 우리의 장난감 알고리즘 두개를 고려할 수 있는데, 하나는 보안성은 만족시키지만 생존성을 만족시키지 않고, 다른 하나는 생존성을 만족시키지만 보안성은 만족시키지 않는다.

알고리즘 1: 모든 검증자들은 ["COMMIT", HASH]와 같은 형태의 메시지를 단 한번만 보낼 수 있는 기회가 있다. 만약 2/3 이상의 검증자들이 COMMIT을 같은 해시에 대해 보낸다면 해시는 완결된다.

여기에 이 알고리즘의 보안성을 증명하는 명백한 증명이 있다. 만약 HASH1HASH2이 모두 완결된다면, 각각은 2/3의 참여를 가지고 있고 1/3의 중복이 있으므로 1/3의 검증자들에 대해 삭감이 이루어진다. 하지만 이것은 실질적으로 생존적이지 않다. 만약 1/2는 A에 참여하고 1/2은 B에 참여했다면(우연하게 일어날 수 있는 충분히 합리적인 상황), 1/6의 검증자들은 해시를 완결시키기 위해 자발적으로 삭감을 수행할 것이다.

보안성 증명
하지만 멈출 수 있다

알고리즘 2: 모든 검증자들은 ["COMMIT", HASH, epoch]와 같은 형태의 메시지를 단 한번만 보낼 수 있는 기회가 있다. 만약 2/3의 검증자들이 같은 해시에 대해 같은 epoch 번호를 가지고 COMMIT을 보낸다면 해시는 완결된다. 다른 해시에 대해 다른 epoch 번호를 가지고 두개의 COMMIT을 보내는 것은 삭감 조건을 위반한다.

이 알고리즘은 이전 알고리즘의 문제를 해결하는데, 한번의 epoch에서 50/50 상황이 나온다면 다음 epoch에서 다시 한번 시도하면 되기 때문이다. 하지만 이는 보안성의 허점이 있다. 두개의 다른 해시가 다른 시대에서 완결될 수 있다는 것이다!

더이상 안전하지 않다

두가지를 동시에 확보할 수 있는 것이 밝혀졌는데, 이는 자명하지 않고 4개의 삭감 조건 및 Yoichi가 작성한 1000 줄의 코드가 있으면 실제로 작동한다는 것을 형식적으로 증명할 수 있다.

삭감 조건은 아래와 같다.

[COMMIT_요구_조건] 만약 검증자가 아래와 같은 형식의 메시지를 보냈고

["COMMIT", epoch, HASH]

-1 <= epoch_source < epoch인 특정값 epoch_source에 대해, 다음과 같은 형식의 메시지

["PREPARE", epoch, HASH, epoch_source]

가 서명되어 2/3 이상의 검증자에 의해 전송되지 않는다면, 검증자의 예치금은 삭감된다.

쉬운 말로 얘기하자면, 참여(commit)하기 위해서는 2/3 이상의 준비(prepare)가 있어야 한다.

[PREPARE_요구_조건] 만약 검증자가 아래와 같은 형식의 메시지를 보냈고

["PREPARE", epoch, HASH, epoch_source](단 epoch_source != -1)

-1 < epoch_source_source < epoch_source를 만족하는 특정 값 epoch_source_source에 대해, 다음과 같은 형식의 메시지

["PREPARE", epoch_source, ANCESTOR_HASH, epoch_source_source]

가 서명되어 2/3 이상의 검증자에 의해 전송되지 않는다면, 검증자의 예치금은 삭감된다.

만약 여러분이 어떤 시대에서 준비를 만들어 이전 시대를 가리킨다면, 해당 시대에서 2/3 이상의 준비를 반드시 목격했어야 하고, 그 준비 메시지들은 같은 이전 시대를 가리켜야 한다(예를 들어, 시대 41의 2/3의 준비가 시대 35를 가리키는 것은 괜찮지만, 시대 41의 2/3의 준비 중 반은 시대 35, 나머지 반은 시대 37을 가리키는 것은 괜찮지 않다. 시대 41의 5/6의 준비 중 4/5가 시대 35를 가리키는 것 또한 괜찮은데, 5/6의 4/5는 2/3이기 때문이고 나머지 1/6은 무시해도 된다.).

“n 번째의 조상”이란, 블록체인의 해시 연결 관점에서의 조상을 의미하고, 예를 들어 이더리움 블록 3017225는 블록 3017240의 15 번째 조상이다. 블록은 오직 하나의 부모만 가질 수 있고, 특정 n 값에 대해 하나의 n 번째 조상만이 존재한다.

[PREPARE_COMMIT_일관성] 만약 검증자가 아래와 같은 형식의 메시지와

["COMMIT", epoch1, HASH1]

다음과 같은 형태의 준비 메시지를 서명해서 전송한다면

["PREPARE", epoch2, HASH2, epoch_source](단, epoch_source < epoch1 < epoch2)

HASH1 ?= HASH2를 고려하지 않더라도, 검증자는 삭감된다.

만약 여러분이 어떤 시대에 참여를 한다면 확실히 2/3의 준비를 그 시대에 목격했을 것이고, 추후의 여러분의 준비는 같은 시대 혹은 이후의 시대를 참조하고 있어야 한다.

[중복_PREPARE_불허] 만약 검증자가 아래와 같은 형식의 메시지와

["PREPARE", epoch2, HASH1, epoch_source1]

다음과 같은 형태의 준비 메시지를 서명해서 전송하지만

["PREPARE", epoch2, HASH2, epoch_source2](단, HASH1 != HASH2 이거나 epoch_source1 != epoch_source2)

epoch 값이 두개의 메시지에서 동일하다면, 검증자는 삭감된다.

즉, 하나의 시대에서 두개의 준비를 하지 못한다.

이 네개의 삭감 조건으로, 책임있는 보안성과 실질적인 생존성이 보장이 된다.

위의 규칙들로는, 두개의 다른 해시가 완결되는 것이 가능하다. 만약 두개의 해시가 하나의 기록의 부분이라면 동시에 완결이 가능하고, 사실 끝부분에 더 많은 해시들이 완결되는 영원히 늘어나는 체인이 바로 우리가 원하는 것이다.

왼쪽 : 다른 해시들이 이 규칙들로부터 완결이 되지만 만약 같은 체인의 일부라면 애초에 의도한대로 동작하는 것이다. 오른쪽 : 같은 기록의 일부가 아닌 해시들은 충돌한다. 위의 네가지 삭감 조건을 따랐을 떄, 1/3 이상의 검증자들이 삭감되지 않는다면 두 개의 충돌하는 해시가 완결되지 않는다는 것이 증명되어 있다.

이제 모든 것을 합쳐서 생각해보자. 활성화된 검증자의 풀(누구나 예치금을 제출함으로써 약간의 지연 시간 후에 풀에 무료로 참여가 가능하고, 어떤 참여자들이든 풀을 떠날 수 있는데 이때에는 조금 더 긴 지연 시간 후에 그들의 자금을 돌려받을 수 있다)이 존재하고, 이 검증자들은 아래와 같은 형식의 메시지를 서명해서 보낼 수 있는 권리가 있다.

["PREPARE", epoch, HASH, epoch_source]

["COMMIT", epoch, HASH]

만약 특정 epoch에서 특정 HASH에 대해 충분한 COMMIT 메시지가 존재한다면, 그 HASH는 완결된 것이다. 해시는 서로 연결되어 있고, 각각의 해시는 다른 이전 해시를 참조하며 점점 새로운 해시들이 완결되어 연결되는, 영원히 늘어나는 체인을 예상할 수 있다. 이 때 PREPARECOMMIT 메시지를 전송하는 검증자들에 대한 경제적 보상을 추가해서, 충분한 메시지들이 시간 내에 전송되어 완결이 실제로 일어날 수 있도록 한다.

일반적으로 “동시성 환경에서 생존하고, 비동시성 환경에서 안전한” 속성을 지닌 어떠한 비잔틴 장애 내성 합의 알고리즘을 하나 택하면⁴, 이를 책임있는 보안성과 실질적인 생존성을 만족시키는 일련의 삭감 조건의 집합으로 변환할 수 있다. 위의 조건들은 PBFT(실용적 비잔틴 장애 내성)와 텐더민트의 조합으로부터 영감을 받았지만 다른 결과를 도출하는 다른 시작점이 있을수도 있다.

실질적인 생존성실제 생존성과 다르다는 점에 주목하라. 실질적인 생존성은 우리가 이론적으로 언제든 무언가를 완결시킬 수 있음을 의미하지만, 반복적으로 행운이 따르지 않아서 영원히 완결을 못시키는 경우 또한 포함하고 있다. 이 문제를 해결하기 위해, 우리는 제안 메커니즘(proposal mechanism)을 떠올리게 됐고, 이 제안 메커니즘의 속성으로 인해 우리가 실제 생존성을 확보할 수 있다는 것을 확신할 수 있다.

제안 메커니즘이란 해시를 제안하는 한가지 방법으로써, PREPARECOMMIT 메시지가 완결을 시키기 위해 노력하는 다른 장치들을 포함하고 있다. 이 방법은 때때로 오작동을 할 수도 있다. 설령 제안 메커니즘이 오작동하더라도, 보안상 실패가 발생하는 것을 막아주는 역할을 삭감 조건이 담당하고 있기 때문에, 제안 메커니즘이 오작동을 멈추기만 한다면 프로토콜은 무언가를 확정지을 수 있게 된다.

많은 전통적인 비잔틴 장애 내성 합의 알고리즘에서, 제안 메커니즘과 다른 알고리즘들은 서로 밀접하게 연관되어 있었다. PBFT에서는, 각각의 뷰(시대와 유사한 개념)가 하나의 검증자에게 할당이 되어 있어서 검증자는 무엇이든지 제안을 할 수 있는 자유가 있다. 검증자는 아무것도 제안하지 않거나, 유효하지 않은 해시를 제안하거나, 여러개의 해시를 제안함으로써 잘못된 행동을 할 수도 있지만 PBFT 장치의 다른 부분들이 그러한 행동이 치명적이지 않게끔 만들어서 알고리즘은 결국 다음 시대로 전환을 마치게 된다. 여기서 우리는 실제로 삭감 조건들을 다른 많은 제안 메커니즘과 조합하는데, 몇가지 조건을 만족시키는 한 이는 계속 유지된다.

우선, 제안 메커니즘은 반드시 하나의 시대에 하나의 해시를 제안해야 하고 유효한 해시값이어야 한다(유효성에 대한 조건은 매우 복잡할 수 있다. 이더리움의 경우에는 데이터의 유용성(availability)을 입증하는 것뿐만 아니라, 이더리움 상태 전이 함수의 실행을 검증하는 것까지 포함한다).

두번째로, 해시들은 하나의 체인을 형성해야 한다. 즉, 시대 N에 제출된 어떤 해시는 시대 N-1에 제출된 부모를 가져야 하고 시대 N-2에 제출된 2번째 조상을 가져야 한다.

세번째로, 해시들은 삭감 조건이 검증자들로 하여금 완결짓는 작업을 방해하지 않아야 한다. 이것은 조금 더 구체적이다. 시대 0에서 제안 메커니즘이 해시 HASH0을 제안했고 시대 1에서 제안 메커니즘이 HASH1을 제안했지만 어떤 이유에서인지 이 두가지 모두 참여를 위한 충분한 준비가 이루어지지 않은 상황을 가정해보자. 그 후에, 제안 메커니즘은 (어떤 일시적인 오류 때문에) 다른 해시 HASH0`을 시대 0에 대해 제안하고, 이 해시는 2/3의 준비와 1/2의 참여를 얻었다.

이제 제안 메커니즘은 두 가지 선택을 할 수 있다. 한가지 경우로는 HASH2(HASH1의 직계 자식)를 제안하고, HASH3(HASH2의 직계 자식)을 제안하고, 이렇게 반복할 수 있다. 그런데 삭감 조건은 이 해시들 중 어떤 것이라도 1/6의 검증자들이 삭감되지 않고는 참여될 수 없다는 것을 보장한다. 다른(올바른) 경우에는 메커니즘이 HASH0`(HASH1`의 직계 자식)을 제안하는데 이 해시는 절대 완결되지 않으리라는 예상을 할 수 있다. 왜냐하면 아마도 경쟁자인 HASH1은 벌써 1/3 이상의 준비를 얻어서 HASH1`이 필요한 2/3 이상의 제안을 못 얻을 것이 확실하고, 그 이후에 HASH1`의 직계 자식인 HASH2`을 제안한다. HASH2`은 참여될 수 있고 메커니즘은 이전 해시의 자식에 해당하는 새로운 해시를 제안하는 작업을 계속한다.

누군가는 다음과 같은 질문을 할 수도 있을 것이다. 가장 긴 체인 규칙을 사용하는 전통적인 작업 증명(proof-of-work) 블록체인을 만들어서 제안 메커니즘이 되게끔 할 수 있을까? 매 100개의 블록은 일종의 체크포인트가 될 수 있고 N * 100 번째 블록의 해시는 시대 N의 제안 내용이 될 수 있다. 하지만 그 자체로써 작동한다는 것이 보장되어 있지는 않은데, 왜냐하면 위의 상황에서 제안 메커니즘은 HASH2를 제안하지 HASH1`을 제안하지 않기 때문이다. 결국 어떤 해시도 완결시키지 못하게 될 것이다(이는 “멈추는" 상황과는 조금 다르다. 누군가를 삭감해서 이 상황을 빠져나올 수는 없고, 오직 채굴자들이 미리 공모해서 비록 PoW 관점에서 가장 긴 체인은 HASH1을 포함하고 있음에도 불구하고 HASH0`을 채굴하는 경우에만 빠져나올 수 있기 때문이다). 그런데, 우리는 수정된 포크 선택 규칙을 가진 전통적인 작업 증명 블록체인을 사용하면 된다.

포크 선택 규칙은 일종의 함수로써 클라이언트들에 의해 수행되고, 생성된 블록과 다른 메시지의 집합을 입력, 정규 체인(canonical chain)이 무엇인지를 출력으로 가지며 그 결과값을 다른 클라이언트로 전달한다. “가장 긴 유효한 체인이 승리"는 간단한 포크 선택 규칙으로써 PoW에서 잘 작동한다. Zohar와 Sompolinsky의 GHOST는 더 복잡한 예이다. 우리는 포크 선택 규칙을 정의해서 블록체인이 합의 알고리즘을 위한 제안 메커니즘으로 작동하며 다음과 같은 속성들을 가지도록 허용할 수 있다.

  1. 제네시스 블록을 HEAD로 설정하면서 시작된다.
  2. 2/3의 준비를 갖고 가장 많은 수의 참여를 가지는 HEAD의 유효한 자손을 찾는다.
  3. 새로운 자손을 HEAD로 설정하고 2번 단계로 돌아간다.
  4. 2단계에서 더 이상 2/3의 준비와 어느 정도의 참여를 갖는 자손을 찾지 못한다면, 블록체인의 기저 포크 선택 규칙(가장 긴 체인, GHOST 등등)을 사용해서 찾는다.

위의 예제에서 본 것처럼, 이 과정은 결국 HASH1이 아닌 HASH0'을 더 선호하게 될 것이므로 올바르고 바람직한 행동을 하게 된다. 또한 이미 완결된 체인이 있다면, 다음 완결된 체인이 반드시 선택한다.

위의 삭감 규칙은 특정 종류의 오류를 발생시키는 것이 매우 비싸다는 것을 보장한다(완결성 복귀 포크). 그런데 이 규칙으로 다루지 못하는 다른 유형의 오류도 존재하는데, 특히 유효하지 않은 해시를 완결하는 것과 유용하지 않은 데이터를 포함하고 있는 체인을 대표하는 해시를 완결시키는 것이 있다. 반드시 암호경제적인 보안성을 유지하면서 이를 우회할 수 있는 가장 간단한 방법으로 알려진 것은 현재로써는 풀노드가 되는 것이다. 즉, 전체 블록을 다운로드하고 검증함으로써 간단히 유효하지 않은 해시를 무시할 수 있다. 결국 주어진 해시가 완결되었는지 결정하는 것은 두 가지 단계로 이루어져 있는데 (i) 2/3의 참여를 확인하고 (ii) 그 해시까지의 체인이 유효하다는 것을 확인하는 것이다.

라이트 클라이언트가 완결 작업을 할 수 있게 하려면, 두 가지 접근 방법이 있다. 첫번째는 노드가 보낼 수 있는 다른 종류의 메시지(이를 [“ATTEST”, HASH, epoch]라고 하자)를 추가하는 것인데, 주어진 해시가 그 시대의 실제 해시일 때 이 메시지가 체인에 제출되면 검증자는 작은 보상을 받지만, 그렇지 않다면 큰 벌금을 물게 되는 효과를 지닌다. 따라서, 검증자들은 주어진 해시가 클라이언트가 보고 있는 정규 체인의 일부분이라는 확신이 들 때에만 메시지를 전송할 것이고 이 작업을 영원히 계속할 것이다(검증자가 이것을 하기에 가장 좋은 시간은 그들이 개인적으로 해시까지의 블록체인을 완전히 검증하고 나서 2/3의 참여를 가지고 있는지를 확인한 후일 것이다).

두번째 방법은 라이트 클라이언트에게 다양한 암호경제적 기법들을 제공함으로써 그들이 데이터 유용성과 타당성(validity)을 매우 효율적으로 검증할 수 있게 허용하는 것이다. 이 때 약하고 정당한 소수(minority)의 가정들이 필요하다. 이것은 샤딩(sharding)에 대해 이루어지는 연구와 비슷한 종류로써, 둘 사이에는 밀접한 연관관계가 있다(위에 설명된 첫번째 방법은 검증자들로 하여금 반드시 풀노드이기를 요구하지만 두번째 방법은 그렇지 않고, 샤딩은 궁극적으로 풀 노드가 전혀 존재하지 않는 블록체인을 만드는 것이 목표이다). 추후에 이 블로그에서 관련된 주제로 추가적인 포스팅을 할 것이다.

리뷰를 해준 Yoich Harai, River Keefer와 Ed에게 특별히 감사를 전한다.

노트:

  1. 어떤 사람은 R이 블록 보상이고 k가 복구되는 블록의 개수일 때, 작업 증명 또한 R * k 만큼의 보안 보증금을 가지는 경제적 완결성을 가진다라고 주장할 수도 있지만, 만약 51% 공격을 성공시켜서 블록 보상의 형태로 보상받는 상황에서는 완결성이 보장되지 않는다. 51% 공격을 위해 요구되는 예산은 실제적으로는 대략 R * k이지만 성공했을 때 드는 비용은 0이다.
  2. 1/3의 비율은 비잔틴 장애 내성 이론으로부터 가져온 것이고 전체 장애 내성의 총합을 최대화하기 위해 선택된 값이다. 일반적으로 이 글에 언급된 삭감 조건을 위한 2/3이라는 수치는 t > 1/2인 어떤 값으로 대체될 수도 있다. 그렇다면 생존성 관점에서는 장애 내성 정도를 1-t로 다시 계산할 수 있고(1-t 만큼이 오프라인이면 t에 근접할 수 없기 때문에), 보안성 관점에서는 장애 내성 정도를 2t-1로 계산할 수 있다(만약 t가 A를 완결시키고 t가 B를 완결시키면 합쳐서 2t > 1이기 때문에 최소 2t-1 만큼은 중복되어 있기 때문이다). t = 2/3일 때 두 가지 값을 최소화한다 (1-t = 1/3, 2t–1 = 1/3). 또한 t = 3/5를 대입하거나 (생존성: 2/5 장애 내성, 보안성 : 1/5) t = 3/4를 대입할 수도 있다(생존성: 1/4, 보안성: 1/2). 또한 값 t < 1/2일 때에는 얼마나 많은 노드들이 오프라인이 될 것인지에 대한 보편적인 지식 관점에서 의미가 있지만, 이러한 상황과 광범위한 “주관적 완결성 기준점"과 같은 개념은 심도있고 흥미로운 주제이므로 다른 날에 다루도록 하겠다.
  3. 물론 예치금이 미리 인출되지 않은 상황을 의미한다. 하지만 그 “큰 범위 공격(long range attack)”은 다른 포스트를 위한 주제이고 이번에는 2년 전에 작성한 포스트를 공유하겠다.
  4. 최소한 암호학의 해시와 서명을 사용했을 때의 이야기이다. 만약 기준점 서명을 사용한다면 2/3의 악성 노드들의 연합이 다른 참여자들의 서명을 조작할 수 있으므로 더 어려워진다.

--

--