비트코인: P2P 전자 현금 시스템

나카모토 사토시

satoshin@gmx.com

www.bitcoin.org


초록 . 순수한 P2P 버전의 전자 현금을 사용하면 금융 기관을 거치지 않고 한 당사자에서 다른 당사자로 직접 온라인 지불을 보낼 수 있습니다. 디지털 서명은 솔루션의 일부를 제공하지만 이중 지출을 방지하기 위해 신뢰할 수 있는 제3자가 여전히 필요한 경우 주요 이점이 손실됩니다. 피어 투 피어 네트워크를 사용하여 이중 지출 문제에 대한 솔루션을 제안합니다. 네트워크는 작업 증명을 다시 실행하지 않고는 변경할 수 없는 레코드를 형성하는 진행 중인 해시 기반 작업 증명 체인으로 트랜잭션을 해시하여 트랜잭션을 타임스탬프합니다. 가장 긴 체인은 목격된 일련의 이벤트에 대한 증거 역할을 할 뿐만 아니라 가장 큰 CPU 성능 풀에서 온 것이라는 증거 역할을 합니다. 대부분의 CPU 전력이 네트워크 공격에 협력하지 않는 노드에 의해 제어되는 한 가장 긴 체인을 생성하고 공격자를 능가합니다. 네트워크 자체에는 최소한의 구조가 필요합니다. 메시지는 최선의 방식으로 브로드캐스트되며 노드는 마음대로 네트워크를 떠나고 다시 합류할 수 있으며, 가장 긴 작업 증명 체인을 그들이 없는 동안 발생한 일의 증거로 받아들입니다.

 

1. 소개

인터넷 상거래는 전자 결제를 처리하기 위해 신뢰할 수 있는 제3자 역할을 하는 금융 기관에 거의 전적으로 의존하게 되었습니다. 이 시스템은 대부분의 거래에서 충분히 잘 작동하지만 여전히 신뢰 기반 모델의 고유한 약점으로 인해 어려움을 겪고 있습니다. 금융 기관이 중재 분쟁을 피할 수 없기 때문에 완전히 되돌릴 수 없는 거래는 실제로 불가능합니다. 조정 비용은 거래 비용을 증가시켜 최소한의 실제 거래 규모를 제한하고 소액의 캐주얼 거래 가능성을 차단하며, 비가역 서비스에 대한 비가역 결제 능력 상실에 더 큰 비용이 발생합니다. 반전의 가능성과 함께 신뢰의 필요성이 확산된다. 가맹점은 고객을 경계해야 하며 그렇지 않은 경우 필요한 것보다 더 많은 정보를 얻기 위해 고객을 번거롭게 해야 합니다. 일정 비율의 사기는 불가피한 것으로 받아들입니다. 이러한 비용과 결제 불확실성은 물리적 통화를 사용하여 직접 피할 수 있지만 신뢰할 수 있는 당사자 없이 통신 채널을 통해 결제하는 메커니즘은 존재하지 않습니다.

필요한 것은 신뢰가 아닌 암호화 증명을 기반으로 하는 전자 지불 시스템으로, 의지가 있는 두 당사자가 신뢰할 수 있는 제3자 없이 서로 직접 거래할 수 있도록 합니다. 계산상 역전이 불가능한 거래는 사기로부터 판매자를 보호하고 일상적인 에스크로 메커니즘을 쉽게 구현하여 구매자를 보호할 수 있습니다. 본 논문에서는 트랜잭션의 연대기적 순서에 대한 전산 증명을 생성하기 위해 P2P 분산 타임스탬프 서버를 사용하여 이중 지출 문제에 대한 솔루션을 제안합니다. 정직한 노드가 공동으로 공격자 노드의 협력 그룹보다 더 많은 CPU 성능을 제어하는 한 시스템은 안전합니다.

2. 거래

우리는 전자 화폐를 일련의 디지털 서명으로 정의합니다. 각 소유자는 이전 거래의 해시와 다음 소유자의 공개 키를 디지털 서명하고 이를 코인 끝에 추가하여 코인을 다음 코인으로 전송합니다. 수취인은 소유권 체인을 확인하기 위해 서명을 확인할 수 있습니다.

물론 문제는 수취인이 소유자 중 한 명이 코인을 이중 지출하지 않았는지 확인할 수 없다는 것입니다. 일반적인 해결책은 모든 거래에서 이중 지출을 확인하는 신뢰할 수 있는 중앙 기관 또는 조폐국을 도입하는 것입니다. 매 거래가 끝난 코인은 반드시 조폐국으로 반환되어 새로운 코인을 발행해야 하며, 조폐국에서 직접 발행된 코인만이 이중 사용되지 않도록 신뢰합니다. 이 솔루션의 문제점은 전체 통화 시스템의 운명이 조폐국을 운영하는 회사에 달려 있으며 모든 거래가 마치 은행처럼 그들을 거쳐야 한다는 것입니다.

수취인이 이전 소유자가 이전 거래에 서명하지 않았음을 알 수 있는 방법이 필요합니다. 우리의 목적상 가장 빠른 거래가 중요한 거래이므로 나중에 이중 지불을 시도하는 것은 신경쓰지 않습니다. 트랜잭션이 없음을 확인하는 유일한 방법은 모든 트랜잭션을 인식하는 것입니다. 민트 기반 모델에서 민트는 모든 트랜잭션을 인식하고 먼저 도착한 것을 결정했습니다. 신뢰할 수 있는 당사자 없이 이를 달성하려면 트랜잭션을 공개적으로 발표해야 하며 [1] 참가자가 받은 주문의 단일 기록에 동의할 수 있는 시스템이 필요합니다. 수취인은 각 거래 시점에 대부분의 노드가 처음 받은 거래라는 데 동의했다는 증거가 필요합니다.

3. 타임스탬프 서버

우리가 제안하는 솔루션은 타임스탬프 서버에서 시작됩니다. 타임스탬프 서버는 타임스탬프를 지정할 항목 블록의 해시를 가져와서 신문이나 유즈넷 게시물과 같이 해시를 널리 게시하는 방식으로 작동합니다[2-5]. 타임스탬프는 분명히 해시에 들어가기 위해 데이터가 당시에 존재했음을 증명합니다. 각 타임스탬프는 해시에 이전 타임스탬프를 포함하여 체인을 형성하며 각 추가 타임스탬프는 이전 타임스탬프를 강화합니다.

4. 작업 증명

P2P 기반으로 분산 타임스탬프 서버를 구현하려면 신문이나 유즈넷 게시물이 아닌 Adam Back의 Hashcash [6]와 유사한 작업 증명 시스템을 사용해야 합니다. 작업 증명에는 SHA-256과 같이 해시될 때 해시가 여러 0비트로 시작하는 값을 스캔하는 작업이 포함됩니다. 필요한 평균 작업은 필요한 0비트 수에서 기하급수적이며 단일 해시를 실행하여 확인할 수 있습니다.

타임스탬프 네트워크의 경우 블록의 해시에 필요한 0비트를 제공하는 값을 찾을 때까지 블록의 nonce를 증가시켜 작업 증명을 구현합니다. 작업 증명을 만족시키기 위해 CPU 노력이 소비되면 작업을 다시 실행하지 않고는 블록을 변경할 수 없습니다. 이후 블록이 이후에 연결되므로 블록을 변경하는 작업에는 이후의 모든 블록을 다시 실행하는 작업이 포함됩니다.

작업 증명은 또한 다수 의사 결정에서 대표성을 결정하는 문제를 해결합니다. 다수가 1IP 주소 1표를 기반으로 한다면 많은 IP를 할당할 수 있는 사람에 의해 전복될 수 있습니다. 작업 증명은 기본적으로 하나의 CPU에 하나의 투표권을 부여합니다. 다수 결정은 가장 긴 작업 증명 노력이 투자된 가장 긴 체인으로 표시됩니다. 대부분의 CPU 전력이 정직한 노드에 의해 제어되는 경우 정직한 체인은 가장 빠르게 성장하고 경쟁 체인을 능가합니다. 과거 블록을 수정하기 위해 공격자는 블록과 그 이후의 모든 블록의 작업 증명을 다시 실행한 다음 정직한 노드의 작업을 따라잡고 능가해야 합니다. 후속 블록이 추가됨에 따라 더 느린 공격자가 따라잡을 확률이 기하급수적으로 감소한다는 것을 나중에 보여줄 것입니다.

시간이 지남에 따라 증가하는 하드웨어 속도와 노드 실행에 대한 다양한 관심을 보상하기 위해 작업 증명 난이도는 시간당 평균 블록 수를 목표로 하는 이동 평균에 의해 결정됩니다. 너무 빨리 생성되면 난이도가 높아집니다.

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. 간소화된 결제 확인

전체 네트워크 노드를 실행하지 않고도 지불을 확인할 수 있습니다. 사용자는 가장 긴 작업 증명 체인의 블록 헤더 사본만 보관하면 됩니다. 이 사본은 자신이 가장 긴 체인을 가지고 있다고 확신할 때까지 네트워크 노드를 쿼리하여 얻을 수 있으며 거래를 블록에 연결하는 Merkle 분기를 얻습니다. 그는 트랜잭션을 직접 확인할 수 없지만 체인의 한 위치에 연결하여 네트워크 노드가 트랜잭션을 수락했음을 알 수 있고 네트워크가 트랜잭션을 수락했음을 추가로 확인한 후 추가된 블록을 볼 수 있습니다.

이와 같이 검증은 정직한 노드가 네트워크를 제어하는 한 신뢰할 수 있지만 네트워크가 공격자에 의해 압도되면 더 취약합니다. 네트워크 노드는 스스로 트랜잭션을 검증할 수 있지만 공격자가 계속해서 네트워크를 압도할 수 있는 한 공격자가 조작한 트랜잭션에 의해 단순화된 방법을 속일 수 있습니다. 이를 방지하기 위한 한 가지 전략은 네트워크 노드가 유효하지 않은 블록을 감지하면 사용자의 소프트웨어가 전체 블록을 다운로드하도록 프롬프트하고 불일치를 확인하기 위해 트랜잭션에 경고를 보내는 네트워크 노드의 경고를 수락하는 것입니다. 지불을 자주 받는 기업은 더 독립적인 보안과 더 빠른 검증을 위해 여전히 자체 노드를 실행하기를 원할 것입니다.

9. 가치의 결합과 분할

코인을 개별적으로 처리하는 것은 가능하지만 전송 시 모든 센트에 대해 별도의 트랜잭션을 수행하는 것은 다루기 어렵습니다. 가치를 분할하고 결합할 수 있도록 트랜잭션에는 여러 입력 및 출력이 포함됩니다. 일반적으로 더 큰 이전 트랜잭션의 단일 입력 또는 더 작은 금액을 결합한 여러 입력이 있으며 최대 두 개의 출력이 있습니다.

트랜잭션이 여러 트랜잭션에 의존하고 해당 트랜잭션이 더 많은 트랜잭션에 의존하는 팬아웃은 여기서 문제가 되지 않습니다. 거래 내역의 완전한 독립 실행형 사본을 추출할 필요가 없습니다.

10. 프라이버시

전통적인 뱅킹 모델은 관련된 당사자와 신뢰할 수 있는 제3자에 대한 정보 액세스를 제한하여 프라이버시 수준을 달성합니다. 모든 거래를 공개적으로 발표해야 할 필요성 때문에 이 방법은 배제되지만 공개 키를 익명으로 유지하여 다른 곳에서 정보의 흐름을 끊음으로써 여전히 프라이버시를 유지할 수 있습니다. 대중은 누군가가 다른 사람에게 금액을 보내는 것을 볼 수 있지만 거래를 누구와도 연결하는 정보는 없습니다. 이는 증권거래소가 개별 거래의 시간과 규모, 즉 '테이프'를 공개하지만 당사자가 누구인지는 밝히지 않는 정보 수준과 비슷하다.

추가 방화벽으로 각 거래마다 새로운 키 쌍을 사용하여 공통 소유자와 연결되지 않도록 해야 합니다. 입력이 동일한 소유자가 소유했음을 반드시 드러내는 다중 입력 트랜잭션에서는 여전히 일부 연결을 피할 수 없습니다. 위험은 키의 소유자가 공개되면 연결로 인해 동일한 소유자에게 속한 다른 트랜잭션이 공개될 수 있다는 것입니다.

11. 계산

공격자가 정직한 체인보다 빠르게 대체 체인을 생성하려는 시나리오를 고려합니다. 이것이 달성되더라도 허공에서 가치를 창출하거나 공격자의 소유가 아닌 돈을 가져가는 것과 같은 임의의 변경에 시스템을 개방하지 않습니다. 노드는 유효하지 않은 거래를 지불로 받아들이지 않을 것이며 정직한 노드는 이를 포함하는 블록을 절대 받아들이지 않을 것입니다. 공격자는 자신이 최근에 지출한 돈을 되찾기 위해 자신의 거래 중 하나만 변경하려고 시도할 수 있습니다.

정직한 체인과 공격자 체인 간의 경쟁은 이항 랜덤 워크로 특징지을 수 있습니다. 성공 이벤트는 정직한 체인이 한 블록 확장되어 리드가 +1 증가하는 것이고 실패 이벤트는 공격자의 체인이 한 블록 확장되어 간격이 -1 감소하는 것입니다.

공격자가 주어진 적자를 따라잡을 확률은 도박꾼의 파멸 문제와 유사합니다. 무제한 신용을 가진 도박꾼이 적자에서 시작하여 손익분기점에 도달하기 위해 잠재적으로 무한한 시도를 한다고 가정합니다.

p > q라고 가정하면 공격자가 따라잡아야 하는 블록 수가 증가함에 따라 확률은 기하급수적으로 떨어집니다. 그에게 불리한 가능성이 있는 상황에서 그가 일찍 행운의 돌진을 하지 않으면 그가 더 뒤처짐에 따라 그의 기회는 사라질 정도로 작아집니다.

우리는 이제 보낸 사람이 거래를 변경할 수 없다는 것을 충분히 확신하기 전에 새 거래의 받는 사람이 기다려야 하는 시간을 고려합니다. 우리는 보낸 사람이 받는 사람이 한동안 돈을 지불했다고 믿게 만든 다음 일정 시간이 지나면 자신에게 갚도록 전환하려는 공격자라고 가정합니다. 그런 일이 발생하면 수신자는 알림을 받지만 발신자는 너무 늦기를 바랍니다.

수신자는 새 키 쌍을 생성하고 서명 직전에 발신자에게 공개 키를 제공합니다. 이것은 보낸 사람이 충분히 앞서 나갈 수 있을 만큼 운이 좋을 때까지 지속적으로 작업하고 그 순간 트랜잭션을 실행함으로써 미리 블록 체인을 준비하는 것을 방지합니다. 트랜잭션이 전송되면 부정직한 발신자는 트랜잭션의 대체 버전을 포함하는 병렬 체인에서 비밀리에 작업을 시작합니다.

수신자는 트랜잭션이 블록에 추가되고 z 블록이 연결될 때까지 기다립니다. 그는 공격자가 진행한 정확한 양을 알지 못하지만 정직한 블록이 블록당 평균 예상 시간을 가졌다고 가정하면 공격자의 잠재적인 진행률은 포아송 분포가 될 것입니다.

12. 결론

신뢰에 의존하지 않고 전자거래를 할 수 있는 시스템을 제안하였습니다. 우리는 소유권에 대한 강력한 제어를 제공하지만 이중 지출을 방지할 방법이 없으면 불완전한 디지털 서명으로 만든 코인의 일반적인 프레임워크로 시작했습니다. 이 문제를 해결하기 위해 정직한 노드가 대부분의 CPU 성능을 제어하는 경우 공격자가 변경할 수 있는 계산상 비실용적인 트랜잭션의 공개 기록을 기록하기 위해 작업 증명을 사용하는 P2P 네트워크를 제안했습니다. 네트워크는 구조화되지 않은 단순성으로 견고합니다. 노드는 약간의 조정으로 한 번에 모두 작동합니다. 메시지는 특정 위치로 라우팅되지 않고 최선을 다해 전달되기만 하면 되므로 식별할 필요가 없습니다. 노드는 마음대로 네트워크를 떠났다가 다시 합류할 수 있으며, 작업 증명 체인을 노드가 없는 동안 발생한 일의 증거로 받아들입니다. 그들은 CPU 파워로 투표하며, 확장 작업을 통해 유효한 블록을 수락하고 작업을 거부하여 유효하지 않은 블록을 거부합니다. 이 합의 메커니즘을 통해 필요한 모든 규칙과 인센티브를 시행할 수 있습니다.

 

참고문헌[1]         W. Dai, "b-money," http://www.weidai.com/bmoney.txt, 1998.[2]H. Massias , XS Avila 및 J.-J. Quisquater , "최소한의 신뢰 요구 사항으로 안전한 타임스탬프 서비스 설계", 1999년 5월 베네룩스에서 열린 정보 이론에 관한 20차 심포지엄에서.[3]   S. Haber, WS Stornetta , "디지털 문서에 타임 스탬프를 찍는 방법", Journal of Cryptology, vol 3, no 2, 페이지 99-111, 1991.[4] D. Bayer, S. Haber, WS Stornetta , "디지털 타임스탬프의 효율성 및 신뢰성 향상," In Sequences II: Methods in Communication, Security and Computer Science, 페이지 329-334, 1993.[5]    S. Haber, WS Stornetta , "Secure names for bit-strings," In Proceedings of the 4th ACM Conference on Computer and Communications Security, 페이지 28-35, 1997년 4월.[6]     A. 백, " Hashcash - 서비스 거부 대책," http://www.hashcash.org/papers/hashcash.pdf, 2002.[7]    RC Merkle, "공개 키 암호 시스템을 위한 프로토콜", In Proc. 보안 및 프라이버시에 관한 1980년 심포지엄, IEEE Computer Society, 122-133페이지, 1980년 4월.[8]W. Feller, "확률 이론 및 그 응용 소개", 1957년.

비트코인 구매

여기에서 비트코인을 구입할 수 있습니다 .