본문 바로가기
비트코인

비트코인 백서

by 티스타 2023. 3. 30.
반응형

개인 대 개인 간 전자화폐 시스템

 

순수한 개인 대 개인 버전 전자 화폐는 금융 기관 없이 직접 온라인 결제를 할 수 있는 것입니다. 이를 위해 전자 서명이 사용됩니다. 하지만 이중지불 문제를 방지하려면 여전히 신뢰할 수 있는 제삼자가 필요합니다. 그러나 우리는 개인 대 개인 네트워크를 사용하여 이중지불 문제를 해결하는 방법을 제안합니다. 이 네트워크는 거래를 해시해서 작업증명을 연결한 사슬로 만듭니다. 작업증명을 재수 행하지 않으면 변경할 수 없는 기록을 만듭니다. 가장 긴 사슬은 목격된 사건의 순서를 증명하고, CPU 파워 풀에서 비롯했다는 것도 증명합니다. 공격자가 아닌 노드들이 공격에 참여하지 않으면 이 네트워크는 가장 긴 사슬을 만들어내며 공격자를 압도할 수 있습니다. 이 네트워크는 최소한의 구조만 요구하며, 메시지는 최선의 노력으로 퍼져나가고 노드는 자신이 빠진 동안 발생한 거래를 확인하여 다시 네트워크에 참여할 수 있습니다.

 

1. 서론

인터넷 기반 상거래에서는 전자 결제를 처리할 수 있는 신뢰할 수 있는 제3자, 즉 금융 기관에 의존합니다. 이 시스템은 대부분의 거래에는 문제가 없지만, 여전히 신뢰 기반 모델의 약점을 가지고 있습니다. 금융 기관은 분쟁 중재를 피할 수 없기 때문에, 완전한 비가역 거래는 실제로 가능하지 않습니다. 이로 인해 거래 비용이 높아지고, 실거래 최소 규모가 제한되어 소액 거래가 어려워집니다. 또한, 상거래자는 사기를 방지하기 위해 많은 정보를 요구해야 합니다. 이에 따라 거래에 대한 신뢰가 필요하게 됩니다. 전자 화폐 시스템은 신뢰를 대신하여 암호학적 증명을 사용하여 거래 의사가 있는 두 당사자가 직접 거래할 수 있게 해 줍니다. 이 시스템은 철회가 불가능한 거래를 보호하고, 일반적인 제삼자 예치 방법은 구매자를 보호하기 위해 사용됩니다. 이 논문에서는 개인 대 개인 간 분산 타임스탬프 서버를 사용하여 거래 시간순으로 전산적 증명을 생성하는 이중지불 문제의 설루션을 제안합니다. 이 시스템은 정직한 노드가 공격자 노드의 협력 그룹보다 총체적으로 더 많은 CPU 파워를 통제하는 경우 보안상 안전합니다.

 

2. 거래

디지털 서명의 사슬로써 전자화폐를 정의하는데, 송금할 때마다 거래 내역 및 다음 소유자 공개키의 해시값에 전자적으로 서명을 하고 이 정보를 화폐 끝에 첨가합니다. 수금자는 그 소유권의 사슬을 검증할 수 있습니다. 하지만, 이 과정에서 수금자가 이중지불 여부를 확인할 수 없습니다. 따라서 중앙통제기관이나 조폐국을 세워서 이중지불 여부를 점검하는 방법을 사용합니다. 하지만 이 방법은 조폐국에 의존해야 하는 단점이 있습니다. 따라서 가장 앞선 거래 하나를 인정하고, 이후 이중지불 시도에는 신경쓰지 않습니다. 그러나 이중지불된 거래가 없음을 확인할 유일한 방법은 모든 거래를 인식하는 것뿐입니다. 따라서 거래는 공개적으로 알려져야 하고, 참가자들은 그걸 받은 순서의 단일한 이력에 합의하는 시스템이 필요합니다. 수금자는 각 거래의 시점에 그게 최초로 받은 거래임을 노드 다수가 동의했다는 증명을 요구합니다.

 

3. 타임스탬프 서버

우리가 제안하는 해결책은 타임스탬프 서버에서 시작됩니다. 타임스탬프 서버는 타임스탬프가 찍힌 항목 블록의 해시를 가져와서 그 해시를 신문이나 유즈넷 게시물과 같은 매체를 통해 널리 배포합니다. 이 타임스탬프는 해당 데이터가 해시에 들어가기 위해 해당 시각부터 존재했음을 증명합니다. 각 타임스탬프는 그 해시 안에 이전 타임스탬프를 포함하고, 그에 앞서 나온 것들을 하나씩 연장하여 타임스탬프가 찍힌 사슬을 생성합니다.

 

4. 작업증명

개인 대 개인으로 분산된 타임스탬프 서버를 구현하기 위해서는, 신문이나 유즈넷 게시물 대신 애덤 백의 해시캐시와 유사한 작업증명 시스템을 사용해야 합니다. 작업증명은 해시 연산을 거친 결과가 0 비트로 시작하는 값을 찾는 작업을 수반합니다. 이 작업은 평균적으로 필요한 연산 작업이 결과값에 필요한 0 비트 개수에 따라 지수적으로 달라집니다. 타임스탬프 네트워크를 위해, 블록 안에 임시값을 증분함으로써 작업증명을 구현합니다. 만약 CPU 동작이 한 번 작업증명을 충족하는 데 동원되면, 그 블록은 해당 작업을 재수 행하지 않고는 변경될 수 없습니다. 작업증명은 다수결의 대표성 문제도 해결합니다. 다수의사는 최다 작업증명 동작이 투입된 가장 긴 사슬로 대표됩니다. 과거 블록을 변경하려면, 공격자는 그 블록과 그 뒤를 잇는 모든 블록의 작업증명을 재수 행해야 합니다. 시간이 지날수록 노드를 구동하는 하드웨어의 속도 증가와 변화하는 관여도를 보상하기 위해, 작업증명 난도는 시간당 평균 블록 수에 따른 평균 목표치를 조정해 결정됩니다.

 

5. 네트워크

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

  • 새로운 거래가 모든 컴퓨터에 전달됩니다.
  • 각 컴퓨터가 새로운 거래를 모아서 블록이라는 단위로 만듭니다.
  • 각 컴퓨터가 블록을 만들기 위해 일종의 작업을 수행합니다.
  • 블록이 만들어지면, 해당 컴퓨터에서 모든 컴퓨터로 블록이 전달됩니다.
  • 블록에 포함된 모든 거래가 유효하고 아직 처리되지 않았다면, 해당 컴퓨터에서 블록이 승인됩니다.
  • 승인된 블록은 다음 블록을 만들기 위해 해시라는 것으로 표현됩니다.

모든 컴퓨터는 가장 긴 블록 사슬을 따르며, 동시에 다른 버전의 블록이 전달되면 가장 긴 블록 사슬을 따르는 컴퓨터가 우선적으로 처리합니다. 블록 전달은 모든 컴퓨터에 도달할 필요는 없으며, 전달이 끝나지 않은 블록은 다음 블록에서 확인하여 요청할 수 있습니다.

6. 인센티브

블록체인에서는 새로운 화폐를 발행하는 방법으로 첫 거래를 특별하게 처리합니다. 이는 화폐를 발행하는 중앙기관 없이 노드가 네트워크를 지원할 인센티브를 더해주는 방법입니다. 이 인센티브는 새 화폐를 발행할 때와 거래 수수료에서 충당할 수 있습니다. 이 인센티브는 노드가 정직하게 행동하도록 유도하는 역할을 합니다. 만약 탐욕스러운 공격자가 블록체인을 공격하면 시스템과 그가 보유한 부의 유효성을 해치는 것보다 더 많은 새 화폐를 베풀어야 하기 때문에 규칙을 따르는 것이 더 이득이 됩니다.

7. 디스크 공간 회수

화폐 안의 마지막 거래가 충분한 블록 안에 있으면, 그 이전 거래는 폐기될 수 있습니다. 이를 촉진하기 위해 거래는 머클트리(Merkle Tree)로 해시됩니다. 그러면, 블록의 해시만 블록 안에 저장되어 오래된 블록은 분기를 제거함으로써 작아질 수 있습니다. 거래가 없는 블록 헤더는 약 80바이트입니다. 블록이 10분마다 만들어진다고 가정하면, 1년에 4.2MB가 됩니다. 그러나, 저장공간은 문제가 되지 않습니다. 왜냐하면 2008년부터 판매되는 컴퓨터 시스템은 보통 2GB RAM을 갖고 있으며, 무어의 법칙에 따르면 저장 공간이 예측대로 증가하기 때문입니다.

8. 간소화 한 결제검증

결제 검증은 전체 네트워크 노드를 돌리지 않고도 가능합니다. 사용자는 가장 긴 블록 사슬을 가지고 있다고 확신할 때까지 네트워크 노드를 확인하면서, 거래를 블록에 연결한 머클 분기를 얻으면 됩니다. 사용자는 자신의 거래를 직접 검증할 수 없지만, 네트워크 노드가 그 거래를 받아들인 것을 확인하고 추가된 블록을 볼 수 있습니다. 이 방법은 네트워크를 제어하는 노드가 정직하다면 신뢰할 수 있지만, 네트워크가 공격자에게 과점당하면 더 취약해집니다. 네트워크 노드는 거래를 검증할 수 있지만, 간단한 방법은 공격자가 조작한 거래를 네트워크가 계속 받아들일 수 있다는 것입니다. 이를 방지하기 위한 전략 중 하나는 네트워크 노드가 유효하지 않은 블록을 탐지하면, 사용자의 소프트웨어가 그 블록을 내려받아 경고된 거래를 확인하게 하는 것입니다. 더 많은 보안과 검증이 필요한 비즈니스는 자체 노드를 구동할 수 있습니다.

9. 가치 합치기와 나누기

화폐를 독립적으로 다루는 것은 가능하지만, 송금에 모든 돈을 따로 거래로 만드는 것은 어렵습니다. 따라서 거래는 여러 입금과 출금을 포함하게 됩니다. 일반적으로 입금은 더 큰 거래의 단일 입금 또는 더 작은 입금들의 조합으로 이루어지며, 출금은 지불 용도의 출금과 송금인에게 돌려줄 거스름돈 출금으로 이루어집니다. 이러한 거래는 많아봐야 두 개 정도이며, 거래가 다른 거래에 의존하고 다른 거래가 또 다른 거래에 의존하는 것은 문제가 되지 않습니다. 그리고 거래 내역 사본을 따로 추출할 필요는 전혀 없습니다.

10. 프라이버시

기존 은행 모델은 관련자와 믿을 만한 제 3자에게만 정보에 접근할 수 있도록 제한해 개인정보를 보호한다. 이 방법은 모든 거래를 공개하지 않고도 개인정보를 보호할 수 있도록 하지만, 공개키 익명성을 유지하면서 다른 곳에서 정보 흐름을 막을 수 있다. 공개된 정보를 통해 누군가가 다른 사람에게 돈을 보내는 걸 볼 수 있지만, 그 거래와 관련된 사람은 볼 수 없다. 이는 주식 거래소에서 공개되는 정보 수준과 비슷하다. 거래 일시와 규모를 알 수는 있지만, 거래 당사자를 알 수는 없다. 또한, 각 거래마다 새로운 키 쌍이 사용되어 그것이 누구에게 연결되는지 계속해서 피할 수 있다. 그러나 동일한 소유자의 다중입금 거래에서는 일부 연결을 피할 수 없다. 그 거래의 키 소유자가 노출되면, 다른 거래와의 연결도 노출될 수 있다.

11. 계산

공격자가 정직한 블록체인을 대체하려는 시나리오를 생각해보면, 그가 성공해도 시스템이 무단으로 변경되는 것을 허용하지 않습니다. 유효하지 않은 거래는 거래가 이루어지지 않으며, 정직한 노드는 유효하지 않은 거래를 포함하는 블록을 받아들이지 않습니다. 공격자는 자신의 거래에서 최근에 지출한 돈만 바꿀 수 있으며, 정직한 블록체인과 공격자의 블록체인 간 경쟁은 이항확률보행으로 특징지을 수 있습니다. 공격자가 정직한 블록체인을 따라잡을 확률은 도박꾼의 파산 문제와 비슷합니다. 도박꾼이 무제한의 신용으로 열세에서 시작하고 손익분기에 도달하려는 시도를 무한히 반복한다고 가정하면, 공격자가 정직한 블록체인을 따라잡을 확률은 다음과 같이 계산됩니다:

  • p: 정직한 노드가 다음 블록을 발견할 확률
  • q: 공격자가 다음 블록을 발견할 확률
  • qz: 공격자가 z 블록 뒤에서부터 따라잡을 확률

만약 p > q 라고 가정하면, 공격자가 따라잡아야 하는 블록 수가 많아질수록 그를 따라잡을 확률이 매우 낮아진다는 것입니다. 만약 공격자가 초기에 블록을 채굴하지 못하면 그의 기회는 점점 줄어들 것입니다. 송금자가 거래를 변경할 수 없다고 확신하기 전까지, 수취인은 얼마나 오래 기다려야 하는지 고려해야 합니다. 만약 송금자가 수취인에게 지불을 했다고 생각하고, 일정 시간이 지나면서 그 돈을 다시 되찾고자 하는 공격자가 있다면, 수신자는 경고를 받겠지만 송금자는 그게 늦어질수록 좋을 것입니다. 수신자는 거래를 하기 전에 새로운 키 쌍을 생성하고, 그 공개키를 송금자에게 알려줍니다. 이는 송금자가 블록을 채굴하지 못하도록 방지하고, 거래가 실제로 일어날 때까지 기다리는 것입니다. 그러나 송금자가 거래를 발신한 후에는 부정직하게 블록을 처리하고 거래를 대신할 수 있습니다. 수신자는 거래가 블록에 추가되고 그 뒤에 z 블록이 연결될 때까지 기다립니다. 그는 공격자의 진척 정도를 알지 못하지만, 정직한 블록이 예상되는 블록당 시간 평균치를 따른다고 가정하면, 공격자의 잠재적 진척도는 푸아송 분포를 따를 것입니다:

현재 공격자가 여전히 따라잡을 수 있는 확률을 얻기 위해, 그가 해당 시점부터 따라잡을 수 있는 확률로 만들 어낼 각 진척 규모별 푸아송 밀도를 곱합니다:

분포의 무한꼬리 합산을 피하도록 정리합니다:

C 코드로 바꾸면 다음과 같습니다:

#include double

AttackerSuccessProbability(double q, int z)

{

double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++)

{

double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k));

}

return sum;

}

결과를 실행하면, z 에 따라 지수적으로 감소하는 확률을 볼 수 있습니다:

q=0.1

z=0 P=1.0000000

z=1 P=0.2045873

z=2 P=0.0509779

z=3 P=0.0131722

z=4 P=0.0034552

z=5 P=0.0009137

z=6 P=0.0002428

z=7 P=0.0000647

z=8 P=0.0000173

z=9 P=0.0000046

z=10 P=0.0000012

 

q=0.3

z=0 P=1.0000000

z=5 P=0.1773523

z=10 P=0.0416605

z=15 P=0.0101008

z=20 P=0.0024804

z=25 P=0.0006132

z=30 P=0.0001522

z=35 P=0.0000379

z=40 P=0.0000095

z=45 P=0.0000024

z=50 P=0.0000006

 

0.1% 미만의 P 를 풀면:

P < 0.001

q=0.10 z=5

q=0.15 z=8

q=0.20 z=11

q=0.25 z=15

q=0.30 z=24

q=0.35 z=41

q=0.40 z=89

q=0.45 z=340

12. 결론

저희는 신뢰를 기반으로 하지 않는 전자거래용 시스템을 제안했습니다. 이 시스템은 강력한 소유권 통제를 제공하는 디지털 서명으로 만든 화폐를 사용합니다. 하지만 이 시스템은 이중지불 방지수단 없이는 불완전합니다. 이를 해결하기 위해, 우리는 CPU 파워를 통제하는 정직한 노드들이 작업증명을 사용하여 공중 거래 이력을 기록하는 개인 대 개인 네트워크를 제안했습니다. 이 네트워크는 견고함과 통일성 없는 단순함을 가지고 있습니다. 노드들은 거의 조정 없이 모두 동작하며, 메시지가 경로를 지정받아 어떤 특정 위치로 가는 것이 아니라 최선의 노력으로 전달되면 됩니다. 노드들은 네트워크를 떠나다가 재합류할 수 있으며, CPU 파워를 사용한 투표로 유효한 블록을 연장하고 유효하지 않은 블록에 대한 작업을 거부함으로써 그걸 승인하거나 기각합니다. 이 합의 작용을 통해 어떤 필요 규칙과 유인이든 집행될 수 있습니다.

반응형

댓글