비트 백서: P2P 현금 시스템

이 기사는 기계로 번역되었습니다
원문 표시

PANews 편집자 주: 사토시 나카모토 비트코인 ​​백서 발표했으며, 오늘로 17주년을 맞이했습니다. 다음은 리 샤오라이가 번역한 백서 로, 모두가 이 고전적인 저작을 다시 읽어보실 수 있도록 번역했습니다.

요약: 순수한 P2P(peer-to-peer) 방식의 전자 화폐는 금융 기관을 거치지 않고도 온라인 결제를 한 당사자에서 다른 당사자에게 직접 전송할 수 있도록 합니다. 디지털 서명은 부분적인 해결책을 제공하지만, 이중 지불을 방지하기 위해 신뢰할 수 있는 제3자가 여전히 필요하다면 전자 결제의 주요 이점이 무효화됩니다. 본 연구에서는 P2P 네트워크를 사용하여 이중 지불 문제를 해결하는 방안을 제안합니다. P2P 네트워크는 각 거래의 해시 데이터를 온체인 기록하여 타임 태그 생성하며, 이 기록은 완전히 다시 작성되지 않는 한 변경할 수 없습니다. 가장 긴 체인은 목격된 이벤트와 그 순서를 증명하는 역할을 하며, 또한 가장 큰 CPU 해시레이트 풀에서 발생했다는 증거이기도 합니다. CPU 해시레이트 의 대부분이 네트워크 공격을 시도하는 노드와 협력하지 않는 노드, 즉 무해한 노드에 의해 제어되는 한, 무해한 노드는 가장 긴 체인을 생성하고 공격자를 앞지릅니다. 네트워크 자체는 최소한의 구조만 요구합니다. 정보는 최선의 노력에 따라 전파되며, 노드는 자유롭게 오고 갈 수 있습니다. 그러나 가입할 때는 자신이 없는 동안 발생한 모든 일에 대한 증거로 가장 긴 작업 증명 체인을 항상 수락해야 합니다.

1. 서론

인터넷 상거래는 전자 결제를 처리하기 위해 거의 전적으로 금융기관을 신뢰할 수 있는 제3자로 의존합니다. 이 시스템은 대부분의 거래에 상당히 잘 작동하지만, 신뢰 기반 모델의 본질적인 결함으로 인해 여전히 어려움을 겪고 있습니다. 금융기관은 분쟁을 중재하지 않을 수 없기 때문에 완전히 되돌릴 수 없는 거래는 사실상 불가능합니다. 중재 비용은 거래 비용을 증가시켜 최소 거래 규모를 제한하고 소액 결제를 사실상 불가능하게 만듭니다. 이 외에도 더 큰 비용이 발생합니다. 시스템은 되돌릴 수 없는 서비스에 대해 되돌릴 수 없는 결제를 제공할 수 없습니다. 가역성의 가능성은 모든 곳에 존재하는 신뢰에 대한 필요성을 야기합니다. 판매자는 고객에게 (신뢰할 수 있다면) 불필요할 수 있는 추가 정보를 제공하도록 요구하며, 이를 경계해야 합니다. 일정 비율의 사기는 불가피한 것으로 간주됩니다. 이러한 비용과 결제 불확실성은 사람들 간에 물리적 화폐로 직접 결제할 경우 피할 수 있지만, 한쪽 당사자를 신뢰할 수 없는 경우 통신 채널을 통해 결제가 이루어지도록 하는 메커니즘이 부족합니다.

우리에게 진정으로 필요한 것은 신뢰가 아닌 암호화 증명에 기반한 전자 결제 시스템입니다. 이 시스템은 두 당사자가 제3자를 신뢰하지 않고도 직접 거래할 수 있도록 합니다. 해시레이트 으로 보장되는 비가역적 거래는 판매자가 사기를 방지하는 데 도움이 되며, 구매자를 보호하는 일상적인 보증 메커니즘도 쉽게 구현할 수 있습니다. 본 논문에서는 P2P 분산 타임스탬핑 서버를 사용하여 해시레이트 기반 증명을 생성하고 각 거래를 시간순으로 기록하는 이중 지불 문제를 해결하는 방안을 제안합니다. 이 시스템은 정직한 노드들이 공모하는 공격자들보다 더 많은 CPU 해시레이트 보유하는 한 안전합니다.

2. 거래

전자 코인을 디지털 서명 체인으로 정의합니다. 소유자가 다른 사람에게 코인을 전송할 때, 이 체인의 끝에 이전 거래의 해시값과 새 소유자의 공개 키라는 디지털 서명을 추가합니다. 수신자는 서명을 검증하여 디지털 서명 체인의 소유권을 확인할 수 있습니다.

이 접근 방식의 문제점은 수신자가 이전 소유자 중 누구도 이중 지출을 하지 않았는지 확인할 수 없다는 것입니다. 일반적인 해결책은 신뢰할 수 있는 중앙 기관, 즉 "조폐국(mint)"을 도입하여 모든 거래의 이중 지출 여부를 확인하는 것입니다. 각 거래 후 코인은 조폐국으로 반환되어야 하며, 조폐국은 새 코인을 발행합니다. 따라서 조폐국에서 직접 발행한 코인만이 신뢰할 수 있고 이중 지출이 없는 것으로 간주됩니다. 이 해결책의 문제점은 전체 통화 시스템의 운명이 조폐국을 운영하는 회사(은행과 유사)에 달려 있으며, 모든 거래는 조폐국을 거쳐야 한다는 것입니다.

수신자가 이전 소유자가 이전 거래에 서명하지 않았음을 확인할 수 있는 방법이 필요합니다. 본 연구에서는 가장 오래된 거래만 계산하므로, 이후의 이중 지불 시도는 고려하지 않습니다. 거래의 존재 여부를 확인하는 유일한 방법은 모든 거래를 아는 것입니다. 조폐국 모델에서 조폐국은 이미 모든 거래를 알고 있으며 그 순서를 확인할 수 있습니다. "신뢰할 수 있는 당사자"의 개입 없이 이를 달성하려면 거래 기록을 공개적으로 발표해야 하며, 따라서 참여자들이 수신하는 동일한 고유 거래 내역에 동의할 수 있는 시스템이 필요합니다. 수신자는 각 거래가 발생하는 시점에 대다수의 노드가 해당 거래가 첫 번째로 수신된 거래라는 데 동의한다는 것을 증명해야 합니다.

3. 타임스탬프 서버

이 솔루션은 타임스탬프 서버로 시작합니다. 타임스탬프 서버는 항목 블록의 해시에 타임스탬프를 찍고 이를 브로드캐스팅하는 방식으로 작동합니다. 이는 신문이나 유즈넷 뉴스그룹의 게시물과 매우 유사합니다[2-5]. 타임스탬프는 해당 시점 이전에 데이터가 존재했음을 분명히 증명합니다. 그렇지 않으면 해시를 생성할 수 없습니다. 각 타임스탬프는 해시에 이전 타임스탬프를 포함하고 있어 체인을 형성합니다. 새로운 타임스탬프는 이전 타임스탬프 뒤에 추가됩니다.

4. 작업 증명

P2P 분산 타임스탬프 서버를 구현하려면 신문이나 뉴스그룹 게시물 같은 것이 아니라 Adam Burke의 HashCash와 유사한 작업 증명 시스템이 필요합니다. 작업 증명은 다음 조건을 충족하는 값을 찾는 것을 포함합니다. SHA-256과 같은 해시 함수를 사용하여 값을 클레임 후, 해시는 특정 개수의 0으로 시작해야 합니다. 0이 하나 추가될 때마다 작업량이 기하급수적으로 증가하는 반면, 이 작업량을 검증하는 데는 단 하나의 해시만 계산하면 됩니다.

타임스탬프 네트워크에서 작업 증명을 다음과 같이 구현합니다. 조건을 충족하는 값이 발견될 때까지 각 블록에 난수를 계속 추가합니다. 블록의 해시는 지정된 개수의 0으로 시작합니다. CPU의 해시레이트 작업 증명을 충족하는 결과를 도출하면, 이전 작업을 모두 다시 수행하지 않는 한 블록을 더 이상 수정할 수 없습니다. 새로운 블록이 계속 추가되므로 현재 블록을 수정하려면 이후 모든 블록에 대해 동일한 작업을 다시 수행해야 합니다.

작업 증명(PoL)은 의사 결정에서 누가 다수를 대표하는지 결정하는 문제도 해결합니다. 소위 "다수"가 "IP 주소 1개, 투표 1개" 시스템에 의해 결정된다면, 많은 IP 주소를 제어할 수 있는 사람은 누구나 "다수"에 속한다고 볼 수 있습니다. PoL은 본질적으로 "CPU 1개, 투표 1개"입니다. 소위 "다수 결정"은 가장 긴 체인으로 표현되는데, 이는 가장 많은 작업이 투자된 체인이기 때문입니다. 대부분의 CPU 해시레이트 정직한 노드에 의해 제어된다면, 정직한 체인은 다른 경쟁 체인보다 훨씬 빠르게 성장합니다. 이미 생성된 블록을 변경하려면 공격자는 해당 블록과 그 이후의 모든 블록에 대한 PoL을 다시 완료해야 하며, 그런 다음 정직한 노드가 수행한 작업을 따라잡거나 능가해야 합니다. 다음 섹션에서는 지연된 공격자가 따라잡을 확률이 블록 수에 따라 기하급수적으로 감소하는 이유를 설명합니다.

전반적인 하드웨어 해시레이트 의 지속적인 증가와 시간 경과에 따른 참여 노드 수의 잠재적 변화에 대응하기 위해, 작업 증명 난이도는 시간당 생성되는 평균 블록 수를 기반으로 하는 이동 평균으로 결정됩니다. 블록이 너무 빨리 생성되면 난이도가 증가합니다.

5. 네트워크

네트워크를 실행하는 단계는 다음과 같습니다.

  1. 모든 새로운 거래는 모든 노드에 브로드캐스트됩니다.
  2. 각 노드는 새로운 거래를 블록으로 묶습니다.
  3. 각 노드는 이 블록에 대한 까다로운 작업 증명을 찾는 것으로 시작합니다.
  4. 블록이 작업 증명을 찾으면 해당 블록을 모든 노드에 브로드캐스트해야 합니다.
  5. 다른 많은 노드는 다음 조건이 모두 충족되는 경우에만 블록을 수락합니다. 블록의 모든 거래가 유효하고 이중 지출이 발생하지 않았습니다.
  6. 수많은 노드가 네트워크에 블록을 수락한다는 것을 나타내는 방법은 다음 블록을 생성할 때 수락된 블록의 해시를 이전 블록의 해시로 사용하는 것입니다.

노드는 가장 긴 체인을 항상 올바른 것으로 인식하고 지속적으로 새로운 데이터를 추가합니다. 두 노드가 동시에 두 가지 다른 버전의 "다음 블록"을 브로드캐스트하는 경우, 일부 노드는 하나를 먼저 수신하고 다른 노드는 다른 하나를 수신합니다. 이 경우, 노드는 먼저 수신한 블록에 대한 작업을 계속 진행하지만, 다른 브랜치가 가장 긴 체인이 될 경우를 대비하여 다른 브랜치도 저장합니다. 다음 작업 증명이 발견되고 브랜치 중 하나가 더 긴 체인이 되면, 이러한 일시적인 분기는 해결되고 다른 브랜치에서 작업하는 노드는 더 긴 온체인 으로 전환합니다.

새로운 거래는 반드시 모든 노드에 브로드캐스트될 필요는 없습니다. 충분한 노드에 도달하면 곧 블록으로 패키징됩니다. 블록 브로드캐스트는 일부 메시지를 삭제할 수 있도록 허용합니다. 노드가 블록을 수신하지 못하면 다음 블록을 수신할 때 이전 블록을 놓쳤음을 깨닫고, 누락된 블록을 다시 제출하라는 요청을 보냅니다.

6. 인센티브

합의된 대로, 각 블록의 첫 번째 거래는 블록 생성자가 소유하는 새로운 코인을 생성하는 특별한 거래입니다. 이는 네트워크를 지원하는 노드에 보상을 제공하고 코인을 유통시킬 수 있는 방법을 제공합니다. 이 시스템에는 코인을 발행하는 중앙화된 기관이 없습니다. 유통되는 새로운 코인의 수가 꾸준히 증가하는 것은 금광 채굴자들이 시스템에 금을 추가하기 위해 끊임없이 자원을 소모하는 것과 유사합니다. 저희 시스템에서 소모되는 자원은 CPU 시간과 전기입니다.

보상은 거래 수수료에서도 발생할 수 있습니다. 거래의 출력 값이 입력 값보다 작으면 그 차이가 거래 수수료가 됩니다. 이 수수료는 해당 거래를 블록에 포함하는 노드에 대한 보상으로 사용됩니다. 정해진 수량의 코인이 유통되면 보상은 전적으로 거래 수수료를 통해 분배되며, 인플레이션은 전혀 발생하지 않습니다.

보상 메커니즘은 노드들이 정직하게 행동하도록 유도할 수도 있습니다. 탐욕스러운 공격자가 모든 정직한 노드를 합친 것보다 더 많은 CPU 해시레이트 획득하게 된다면, 그는 선택해야 합니다. 그 해시레이트 사용하여 자신이 쓴 돈을 훔쳐 다른 사람들을 속일 것인가, 아니면 새로운 코인을 생성하는 데 사용할 해시레이트? 그는 규칙을 따르는 것이 더 유리하다는 것을 알아야 합니다. 현재 규칙은 그가 다른 모든 노드를 합친 것보다 더 많은 코인을 획득할 수 있도록 허용하며, 이는 비밀리에 시스템을 파괴하고 자신의 재산을 잃는 것보다 분명히 더 수익성이 높습니다.

7. 디스크 공간 확보

코인의 가장 최근 거래가 충분한 블록 수 전에 발생했다면, 해당 코인과 관련된 모든 이전 거래는 삭제될 수 있습니다. 이는 디스크 공간을 절약하기 위한 것입니다. 블록 해시를 손상시키지 않고 이를 달성하기 위해, 거래 해시를 머클 트리[7, 2, 5]에 통합하고, 트리의 루트만 블록 해시에 포함합니다. 가지를 잘라냄으로써 이전 블록을 압축할 수 있습니다. 내부 해시는 보존할 필요가 없습니다.

거래 내역이 없는 블록 헤더는 약 80바이트입니다. 블록이 10분마다 생성된다고 가정하면, 80바이트에 6, 24, 365를 곱하면 연간 4.2MB가 됩니다. 2008년 당시 시중에 나와 있는 대부분의 컴퓨터는 2GB RAM을 탑재하고 있었는데, 무어의 법칙에 따르면 매년 1.2GB씩 증가하므로, 블록 헤더를 메모리에 저장해야 한다고 해도 문제가 되지 않습니다.

8. 간소화된 결제 확인

전체 네트워크 노드를 실행하지 않고도 결제 확인이 가능합니다. 사용자는 작업 증명이 적용된 가장 긴 체인의 블록 헤더 사본만 있으면 됩니다. 사용자는 온라인 노드를 확인하여 가장 긴 체인에서 온 것임을 확인할 수 있습니다. 그런 다음, 블록 타임스탬프가 기록된 시점의 거래에 연결된 머클 트리의 분기 노드를 얻습니다. 사용자는 직접 거래를 확인할 수는 없지만, 온체인 어딘가에 연결함으로써 네트워크 노드가 거래를 승인했음을 확인할 수 있으며, 이후 블록은 네트워크가 해당 거래를 승인했음을 추가로 확인합니다.

정직한 노드가 네트워크를 제어하는 ​​한, 검증은 신뢰할 수 있습니다. 그러나 공격자가 네트워크를 제어하는 ​​경우 검증의 신뢰성이 떨어집니다. 네트워크 노드는 거래 기록을 직접 검증할 수 있지만, 공격자가 네트워크를 제어하는 ​​경우 위조된 거래 기록에 의해 간소화된 검증 방법이 속아 넘어갈 수 있습니다. 한 가지 대책은 클라이언트 소프트웨어가 네트워크 노드로부터 경고를 수신하도록 하는 것입니다. 네트워크 노드가 유효하지 않은 블록을 발견하면 경고를 발행하고, 사용자 소프트웨어에 알림을 표시하고, 사용자에게 전체 블록을 다운로드하도록 지시하고, 거래 일관성을 확인하도록 경고합니다. 거래 빈도가 높은 판매자는 더 강력한 독립적인 보안과 더 빠른 거래 확인을 위해 자체 전체 노드를 운영하는 것을 선호해야 합니다.

9. 가치의 결합 및 분할

동전을 하나씩 처리하는 것은 가능하지만, 각 페니에 대한 별도의 기록을 유지하는 것은 번거롭습니다. 가치의 분할 및 병합을 위해 거래 기록에는 여러 개의 입력과 출력이 포함됩니다. 일반적으로 비교적 큰 규모의 이전 거래에서 단일 입력이 발생하거나, 소액 거래에서 여러 개의 입력이 결합된 형태입니다. 반면, 출력은 최대 두 개입니다. 하나는 (수취인에게) 지불하는 금액이고, 다른 하나는 필요한 경우 (송금인에게) 거스름돈입니다.

여기서 중요한 것은 "팬아웃"이 아니라는 점입니다. "팬아웃"은 여러 거래에 의존하는 거래를 의미하며, 이 거래는 다시 더 많은 거래에 의존합니다. 단일 거래에 대한 완전하고 독립적인 과거 사본을 클레임 할 필요는 전혀 없습니다.

10. 개인정보보호

전통적인 은행 모델은 거래자 와 신뢰할 수 있는 제3자에 대한 정보 접근을 제한함으로써 일정 수준의 프라이버시를 확보합니다. 이러한 접근 방식은 모든 거래 기록을 공개해야 한다는 필요성 때문에 거부됩니다. 그러나 프라이버시를 유지하려면 정보의 흐름을 차단해야 합니다. 즉, 공개 키 익명성을 통해 가능합니다. 대중은 누군가가 다른 사람에게 일정 금액을 이체했다는 사실은 알 수 있지만, 특정 개인을 가리키는 정보는 없습니다. 이러한 수준의 정보 공개는 주식 시장 거래와 유사합니다. 각 거래의 시간과 금액만 공개되고 거래 당사자가 누구인지는 아무도 알 수 없습니다.

11. 계산

공격자가 정직한 체인보다 빠른 대체 체인을 생성하려고 시도한다고 상상해 보세요. 설령 성공하더라도 현재 시스템은 모호한 상황에 빠지지 않습니다. 그는 허공에서 가치를 창출할 수 없고, 본래 자신에게 속하지 않았던 돈을 획득할 수도 없습니다. 네트워크 노드는 유효하지 않은 거래를 결제로 받아들이지 않으며, 정직한 노드는 그러한 결제가 포함된 블록을 절대 받아들이지 않습니다. 기껏해야 공격자는 자신의 거래를 수정하여 이미 지출한 돈을 회수하려고 시도할 뿐입니다.

정직한 체인과 공격자 간의 경쟁은 이항 랜덤 워크(binomial random walk)를 사용하여 설명할 수 있습니다. 성공 이벤트는 정직한 체인에 새 블록이 추가되어 정직한 체인의 이점이 1 증가하는 경우이고, 실패 이벤트는 공격자 체인에 새 블록이 추가되어 정직한 체인의 이점이 1 감소하는 경우입니다.

공격자가 불리한 상황에서 따라잡을 확률은 도박꾼의 파산 문제와 유사합니다. 무제한 코인 가진 도박꾼이 적자 상태에서 시작하여 기존 적자를 만회하기 위해 무제한으로 도박을 할 수 있다고 가정해 보겠습니다. 공격자가 결국 적자를 만회할 확률, 즉 공격자가 정직 사슬[8]을 따라잡을 확률을 다음과 같이 계산할 수 있습니다.

공격자가 따라잡아야 할 블록 수가 증가한다고 이미 가정했기 때문에, 공격자의 성공 확률은 기하급수적으로 감소합니다. 공격자가 처음에 운 좋게 전진하지 못하면, 뒤처질수록 승리 가능성은 사라집니다.

이제 새로운 거래의 수신자가 송신자가 거래를 변경할 수 없다는 것을 완전히 확신하기까지 얼마나 기다려야 하는지 생각해 보겠습니다. 송신자가 수신자가 대금을 지불했다고 믿게 한 후, 그 돈을 자신에게 다시 송금하려는 공격자라고 가정해 보겠습니다. 이 경우 수신자는 당연히 경고를 받게 되지만, 송신자는 그때까지 피해가 발생하기를 바랄 것입니다.

수신자는 새로운 공개-개인 키 쌍을 생성한 후 서명 직전에 발신자에게 공개 키를 알립니다. 이렇게 하면 발신자가 연속적인 계산을 통해 온체인 블록을 미리 준비하다가, 운이 좋으면 거래가 실행되기 전에 블록을 미리 생성하는 상황을 방지할 수 있습니다. 자금이 송금되면, 부정직한 발신자는 온체인 비밀리에 작업을 시작하여 거래의 역방향 버전을 삽입하려고 시도합니다.

수신자는 거래가 블록으로 패키징될 때까지 기다린 후, 이후 다른 블록이 추가됩니다. 공격자의 진행 상황은 알 수 없지만, 각 블록 생성 과정에서 정직한 블록이 생성되는 데 걸리는 평균 시간을 추정할 수 있습니다. 공격자의 잠재적 진행 상황은 다음과 같은 기대값을 갖는 푸아송 분포를 따릅니다.

공격자가 따라잡을 수 있는 확률을 계산하려면 각 공격자의 현재 진행 상황에 대한 Passon 밀도에 해당 지점에서 따라잡을 수 있는 확률을 곱합니다.

밀도 분포의 무한 급수를 합한 후 데이터를 재정렬하는 것을 피하려면…

C 언어 프로그램으로 변환합니다...

부분적인 결과에서 Z가 증가함에 따라 확률이 기하급수적으로 감소하는 것을 볼 수 있습니다.

P가 0.1% 미만이면...

12. 결론

신뢰에 의존하지 않는 전자 거래 시스템을 제안합니다. 디지털 서명을 사용하는 간단한 코인 프레임 기반으로, 강력한 소유권 제어 기능을 제공하지만 이중 지출을 방지할 수는 없습니다. 이 문제를 해결하기 위해, 공개 거래 내역을 기록하는 작업 증명 메커니즘을 사용하는 P2P 네트워크를 제안합니다. 정직한 노드가 CPU 해시레이트 의 대부분을 제어하는 ​​한, 공격자는 해시레이트 만으로 시스템을 성공적으로 조작할 수 없습니다. 이 네트워크의 견고성은 비정형적 단순성에 있습니다. 노드는 최소한의 조정만으로 즉시 동시에 작업할 수 있습니다. 메시지 경로가 특정 목적지에 의존하지 않으므로 노드를 식별할 필요도 없습니다. 메시지는 최선 노력 의도(best-effort intent)로만 전파하면 됩니다. 노드는 자유롭게 가입하고 탈퇴할 수 있으며, 다시 가입할 때는 오프라인 상태였던 동안 발생한 모든 것에 대한 증거로 작업 증명 체인을 수락합니다. 해시레이트 사용하여 투표를 진행하며, 체인에 새로운 유효 블록을 지속적으로 추가하고 유효하지 않은 블록을 거부하여 유효한 거래를 수락함을 나타냅니다. 이러한 합의 메커니즘을 통해 필요한 규칙과 보상을 강제할 수 있습니다.

출처
면책조항: 상기 내용은 작자의 개인적인 의견입니다. 따라서 이는 Followin의 입장과 무관하며 Followin과 관련된 어떠한 투자 제안도 구성하지 않습니다.
라이크
즐겨찾기에 추가
코멘트