Nakamoto Consensus는 Bitcoin이 중앙 심판 없이 유효한 공통 거래 기록을 만들어 가는 방식을 가리킵니다. 검증 프로그램을 실행해 규칙을 직접 검사하는 컴퓨터인 Full Node는 먼저 무효 블록을 거릅니다. 그런 다음 유효한 분기 중 누적 작업량이 가장 큰 것을 선택합니다. 추가 승인은 일정한 보안 전제 아래 결제에 대한 확신을 높이지만, 기록을 즉시 되돌릴 수 없게 만들지는 않습니다.
안나가 페터에게 결제합니다. 같은 돈을 에바에게 쓰는 다른 거래에도 서명할 수 있습니다. 여기서 서명은 비밀 숫자 값인 개인 키로 결제를 승인했다는 검증 가능한 증거를 만드는 작업입니다. 다른 사람은 그 비밀 값을 몰라도 서명을 확인할 수 있습니다. 두 서명이 모두 진짜여도 두 결제가 하나의 유효한 기록에 함께 들어갈 수는 없습니다. 페터와 에바가 메시지를 반대 순서로 받을 수도 있습니다. 따라서 Bitcoin에는 서명 확인 외에도 순서를 합의하고 이중 지출을 막는 방법이 필요합니다. Nakamoto Consensus는 규칙, Proof of Work, 분기 선택, 채굴 보상을 결합합니다. Bitcoin의 구조를 처음 설명한 기술 문서인 사토시의 백서에는 나중에 붙은 이 이름이 나오지 않습니다. [1] [4]
페터의 Full Node는 투표용지가 아닙니다. 블록은 공동 기록에 추가하는 거래 묶음입니다. 거래 출력에는 금액과 나중에 그 금액을 쓰기 위해 충족해야 할 조건이 담깁니다. Full Node 프로그램은 거래와 블록을 스스로 검사합니다. 지출하려는 거래 출력이 아직 미사용 상태인지, 지출 조건을 충족하는지, 새로 만드는 bitcoin이 허용량을 넘지 않는지 등을 확인합니다. 채굴자는 블록을 제안할 수 있지만 검사를 마음대로 건너뛸 수 없습니다. 아무리 많은 작업이 뒤따라도 무효 블록은 무효입니다. 분기 선택은 유효한 후보 사이에서만 이루어집니다. 공통 기록을 가지려면 참여자들의 규칙이 호환되어야 합니다. [2] [3]
연결된 컴퓨터마다 한 표를 준다면 공격자는 독립적으로 보이는 참여자를 대량으로 만들 수 있습니다. 이를 Sybil Attack이라고 합니다. Proof of Work는 이름을 세는 대신 검증 가능한 계산 작업으로 분기의 무게를 정합니다. 채굴자는 데이터의 디지털 지문인 해시를 반복 계산해 정해진 조건을 만족하는 결과를 찾습니다. 시도에는 에너지와 장비가 들지만, 찾은 결과는 쉽게 검증할 수 있습니다. 네트워크 신원을 많이 만드는 것만으로 작업량이 늘지는 않습니다. 신분증 검사도, 모든 노드의 투표도 아닙니다. [1] [4]
채굴자는 후보 블록을 만들고, 블록을 간결하게 요약한 헤더의 데이터를 바꿉니다. 헤더 해시를 숫자로 읽었을 때 유효한 목표값 이하가 되는 결과를 찾는 것입니다. 유용한 방정식을 풀거나 암호화를 깨는 일이 아니라 드문 결과를 찾는 과정입니다. 두 채굴자가 거의 동시에 성공하면 일부 노드는 한 블록을, 다른 노드는 다른 블록을 먼저 봅니다. 잠시 두 유효 분기가 생기지만 그 자체로 장애는 아닙니다. 정상적인 블록 전파 조건에서는 후속 작업을 통해 더 강한 공통 분기로 모일 수 있습니다. [1] [8]
분기의 강도는 chainwork로 측정합니다. 각 블록의 목표값에서 정한 작업량을 합한 값입니다. 전력계도 아니고 실제 시도 횟수의 기록도 아닙니다. 한 채굴자는 곧바로 운이 좋았고 다른 채굴자는 오래 기다렸어도 목표값이 같다면 유효 블록의 무게는 같습니다. Full Node는 확인할 수 있는 유효 분기 중 합계가 가장 큰 것을 선택합니다. 따라서 ‘가장 긴 체인’은 블록 수가 아니라 작업량이 가장 많다는 뜻입니다. 다른 분기로 옮기는 것을 재구성이라고 하며, 버려진 블록의 결제도 여전히 유효하면 다시 포함될 수 있습니다. [1] [2] [3] [7]
안나의 결제가 받아들여진 블록에 들어가면 승인이 하나 생깁니다. 그 위로 블록이 추가될 때마다 하나씩 늘어납니다. 기록을 바꾸려면 경쟁 분기가 그 작업량을 따라잡아야 합니다. 정직한 계산 능력이 과반이고 블록이 충분히 빨리 퍼진다는 전제에서는 깊이가 커질수록 성공적인 기록 변경 위험이 대체로 줄어듭니다. 이것이 확률적 최종성입니다. 확신이 점차 커질 뿐 변경이 수학적으로 불가능해지는 것은 아닙니다. 페터가 몇 번을 기다릴지는 결제 금액과 위험에도 달렸습니다. 모든 상황에서 안전을 보장하는 보편적인 횟수는 없습니다. [1] [4]
더 빠른 장비가 들어와도 조건이 그대로라면 블록은 더 빨리 나옵니다. 그래서 Difficulty Adjustment는 메인넷에서 이전 타임스탬프를 이용해 2016블록마다 목표값을 다시 계산합니다. 한 블록당 평균 십 분, 이 구간 전체로는 대략 두 주를 목표로 합니다. 개별 블록은 훨씬 일찍 또는 늦게 나올 수 있습니다. 조정은 달력 날짜가 아니라 블록 수에 따라 일어납니다. 계산 능력이 갑자기 크게 줄면 다음 조정 지점까지 더 오래 걸릴 수 있습니다. 즉시 반응하는 조절기도 정확한 시계도 아닙니다. [2] [8]
새로 발행되는 bitcoin인 블록 보조금과 거래 수수료는 받아들여진 기록에 남는 블록에 대한 보상입니다. 기록을 연장할 동기가 되지만 보안 전제를 대신하지는 않습니다. 계산 능력의 과반을 확보하면 유효 분기를 재구성하거나 결제를 제외하고 자신의 지출을 되돌리려 할 수 있습니다. 하지만 Full Node에 무효 서명, 초과 발행, 허가 없는 타인의 자금 지출을 받아들이도록 강요하지는 못합니다. 50%도 안전을 켜고 끄는 스위치가 아닙니다. 그 아래에서도 성공 가능성이 있는 공격이 있습니다. 보상만으로 정직함이 만들어지지는 않습니다. [1] [2] [3]
페터의 예로 돌아가 보겠습니다. 공격자가 노드의 모든 연결을 장악하면 불완전한 상황만 보여 줄 수 있습니다. Eclipse Attack은 이런 네트워크 격리를 뜻합니다. 이때의 승인 횟수는 나머지 네트워크와 잘 연결된 상태에서와 같은 의미가 아닐 수 있습니다. 네트워크가 서로 끊긴 부분으로 나뉘어도 합의가 어려워집니다. 보안은 공격자의 계산 능력 비율뿐 아니라 메시지 전파와 정직한 검증에도 달렸습니다. Bitcoin Backbone 연구는 이 조건들을 명시적으로 모델링합니다. 네트워크 전제 없이 계산 능력의 백분율만으로 보안을 설명할 수는 없습니다. [4]
고전적인 BFT (Byzantine Fault Tolerance) 방식은 고장 나거나 악의적인 참여자가 있어도 합의를 이루려 하며, 흔히 구성원이 미리 알려진 집단을 전제로 합니다. OM (Oral Messages)과 PBFT (Practical Byzantine Fault Tolerance) 같은 예에는 각각 조건과 메시지 교환 규칙이 있습니다. Bitcoin은 작업과 기록의 확률적 안정화를 통해 열린 참여를 다룹니다. 기존 방식의 이름만 바꾼 것이 아닙니다. 더 강한 유효 분기를 고르는 행위가 유효성 규칙 자체를 바꾸지도 않습니다. 규칙을 바꾸려면 참여자가 해당 소프트웨어와 호환되는 조건을 채택해야 합니다. 채굴자는 어떤 유효 기록이 계속될지 결정하는 데 기여하지만, 모두가 무엇을 유효하다고 여겨야 하는지 강요하지는 않습니다. [5] [6] [9]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Bitcoin, Proof of Work, Difficulty Adjustment, 합의 규칙, 채굴, Full Node. 다음 항목에서도 이 글을 참조합니다 Bit Gold, Reusable Proofs of Work, Byzantine Generals Problem, Sybil Attack.