비트코인 프로토콜이 어떻게 작동하는지

저자:작은 꿈, 2017-01-19 18:04:02, 업데이트: 2017-01-19 18:11:24

비트코인 프로토콜이 어떻게 작동하는지

지난 해에 비트코인에 대한 5가지 생각을 여기에 올렸는데, 이것은 비트코인에 대한 제1의 글인 것 같습니다.

이 글은 번역가 마이클 닐슨의 비트코인 프로토콜에 대한 글입니다. 이 글은 번역자가 쓴 것 중 가장 명확한 내용입니다. 마이클 닐슨은 양자 계산을 연구하는 선구적인 과학자, 작가, 프로그래머입니다. 자세한 내용은 자신의 소개를 참조하십시오. 번역이 된 이유는 번역자가 비트코인에 대한 글과 토론에 대해 많은 것을, 많은 것을 지지하는 많은 반대를 생각하기 때문입니다. 그러나 대부분의 사람들은 개념, 가격 및 주관적인 생각에서 머물렀고, 나는 비트코인의 현존하는 가격과 표면 현상을 버리고 싶었습니다. 이 글을 통해, 모든 사람들에게 비트코인의 프로토콜이 작동하는 원리를 자세히 소개합니다. 마이클 닐슨은 양자 계산을 연구하는 선구적인 과학자, 작가 및 프로그래머입니다.

나키모토는 다른 사람들을 설득하려고 한 적이 없으며, 다른 사람들이 스스로 판단하도록 글을 온라인에 게시했습니다. 그는 자신의 말을 말했습니다. It would help to condense the article and make it less promotional sounding as soon as possible. Just letting people know what it is, where it fits into the electronic money space, not trying to convince them that its good.

  • 이 글은

    수천 개의 기사가 비트코인, 온라인, 피어-투-피어 (Peer-to-Peer) 화폐를 설명하려고 시도했다. 대부분의 기사는 그 밑바닥의 프로토콜에 대해 많은 세부사항을 빼놓았다. 심지어는 깊이있는 기사는 중요한 부분에서 교착되어 있었다. 이 기사의 목적은 비트코인 프로토콜의 요인을 가능한 한 명확하고 이해하기 쉬운 방법으로 설명하는 것이었다. 우리는 첫 번째 원칙에서 시작하여 비트코인 프로토콜을 이론적으로 이해하는 광범위한 개념을 구축하고, 그 다음 세부 트랜잭션에 깊이 들어가서 비트코인의 데이터를 검사했다.

    이 프로토콜을 깊이 이해하는 것은 어렵기 때문입니다. 왜냐하면 비트코인을 당연한 것으로 받아들이고, 그것을 어떻게 활용할 것인가에 대해 추측하고, 그것이 거품인지 아닌지, 비트코인이 세금의 종말을 의미하는지 여부를 궁금해하는 것이 쉽기 때문입니다. 이런 생각들은 재미있지만, 이러한 생각들은 당신의 이해를 심각하게 제한합니다. 그리고 비트코인 프로토콜을 이해하는 것 자체는 다른 관점으로 접근할 수 없는 관점을 열어줄 것입니다. 예를 들어 이 프로토콜은 비트코인의 내장된 스크립트 언어의 기초이며, 이 스크립트 언어는 비트코인을 통해 스마트 계약과 같은 새로운 금융 도구를 만들 수 있습니다. 새로운 금융 도구는 새로운 시장과 새로운 사람과 사람 사이의 협력을 만들어 낼 수 있습니다.

    나는 나중에 비트코인 스크립트와 스마트 계약에 대해 설명할 것이다. 이 글에서는 비트코인 프로토콜에 대한 구체적인 세부 사항에 집중할 것이다. 이 글을 이해하기 위해서는 공중 키 암호와 관련된 디지털 서명을 알고 있어야 한다. 두 가지 개념을 알고 있어야 한다. 또한 Hash 함수 (任意의 길이의 입력값을 고정된 길이의 출력값으로 변환하는 함수) 를 알고 있어야 한다.

    비트코인의 기초는 암호학으로, 이것은 당신을 놀라게 할 수 있습니다. 비트코인은 화폐가 아닌가요? 그것은 비밀 메시지를 보내는 방법입니까? 실제로 비트코인이 해결하고자 하는 문제는 거래의 보호에 관한 것이 대부분입니다. 사람들이 다른 사람의 물건을 훔치거나 다른 사람을 모방하지 못하도록 보장하는 것입니다. 원자로 구성된 물리적 세계에서 우리는 잠금, 서명, 은행 보험 등으로 보안을 보장합니다. 정보 세계에서 우리는 암호학으로 보안을 보장합니다. 이것이 비트코인의 핵심 암호학 프로토콜이 된 이유입니다.

    이 글의 전략은 비트코인을 층별로 만드는 것입니다. 우리는 아주 간단한 디지털 화폐를 시작하게 될 것입니다. 우리는 그것을 인포코인 (Infocoin ) 이라고 한동안 부르며 비트코인과 구별합니다. 물론 우리의 첫 번째 버전 인포코인은 많은 단점을 가지고 있기 때문에 우리는 몇 번의 반복을 거치게 될 것입니다. 그리고 몇 번의 반복을 거치면 우리는 하나 또는 두 가지 새로운 개념을 소개합니다.

    이 방법은 비트코인을 직접 설명하는 것보다 조금 더 느립니다. 하지만 비트코인의 원리를 한 번 이해하더라도 비트코인이 왜 이렇게 설계되었는지 이해하기가 어렵습니다. 느린 단계의 반복적인 설명의 장점은 비트코인의 모든 요소를 더 명확하게 이해할 수 있다는 것입니다.

    마지막으로 제가 비트코인 세계에 비교적 새로운 사람이라는 것을 말해야 합니다. 저는 2011년에 대략적인 관심을 가지고 있었지만 2013년 초에 세부사항을 진지하게 조사했습니다.

  • 첫 번째 단계: 서명 의의서

    • 어떻게 돈을 디자인할 수 있을까요?

      겉으로 보기에는 디지털 화폐는 불가능해 보인다. 예를 들어, 앨리스라는 이름을 가진 사람이 돈을 벌려고 하는 디지털 화폐를 가지고 있다고 가정하자. 앨리스는 문자열을 돈으로 사용할 수 있다면, 같은 문자열을 반복적으로 사용하는 것을 어떻게 막을 수 있을까요? 이 문제를 해결할 수 있다면, 다른 사람들이 문자열을 위조하여 앨리스를 훔치는 것을 어떻게 막을 수 있을까요?

      이것은 정보로 화폐로 해결해야 할 많은 문제들 중 두 가지에 불과하다. 첫 번째 인포코인에서는 앨리스를 위해 문자열을 돈으로 제공하도록 하고 위조되지 않도록 보호하는 방법을 생각해 보았습니다. 앨리스는 다른 사람에게 인포코인을 줄 것이라고 가정합니다. 앨리스는 다음과 같은 메시지를 작성해야했습니다. "나, 앨리스는 밥에게 인포코인 인포코인을 줄 것입니다". 그녀는 디지털 서명 방법을 사용하여 이 메시지를 개인 키 (이 개인 키는 무작위로 생성된 64 개의 숫자) 와 함께 서명하여 결과를 생성했습니다. 그리고이 서명 된 이름의 결과 캐릭터를 전 세계에 공개했습니다.

      이 방법은 그다지 유명하지는 않지만 몇 가지 장점이 있습니다. 세계 어느 누구도 앨리스의 공개 키를 사용하여 앨리스가 실제로 서명 한 사람이라는 것을 확인할 수 있습니다. 다른 누구도 그 서명 결과를 생성할 수 없습니다. (이 서명은 앨리스가 소유한 개인 키에서 생성 될 수 있습니다. 원칙은 앞서 언급한 디지털 서명 참조하십시오.) 그래서 앨리스는 반성 할 수 없습니다. 아, 나는 밥에게 인포코인을 제공하지 않았습니다. 따라서 이 프로토콜은 앨리스가 실제로 밥에게 인포코인을 제공하려는 것을 증명합니다. 또한 다른 누구도 그러한 서명 된 메시지를 생성할 수 없습니다. 따라서 다른 사람들이 앨리스의 메시지를 위조하는 것을 방지합니다. 물론, 앨리스가 메시지를 게시 한 후 다른 사람들이 메시지를 복제 할 수 있지만 게시하기 전에 위조를 입증 할 수 없습니다. 따라서 의도와 게시하기 전에 위조를 방지하는 기능은 두 가지 매우 주목할만한 특징입니다.

      이 프로토콜에 있는 돈이 정확히 무엇인지를 아직 말하지 않았습니다. 명확하게 말씀드리자면, 돈은 실제로 메시지 자체입니다. 즉, 그 일련의 서명자는 알리스는 밥에게 인포코인을 주려고 하는 문자를 나타냅니다. 후속 프로토콜은 이 점에서 비슷할 것입니다. 즉, 모든 디지털 화폐는 점점 더 상세한 메시지 문자를 나타냅니다.

  • 일련 번호를 사용하여 화폐에 고유한 아이디를 부여합니다.

    우리의 첫 번째 인포코인의 문제는 앨리스가 밥에게 같은 서명된 메시지를 반복적으로 보낼 수 있다는 것입니다. 만약 밥이 10개의 메시지를 받았다고 가정해 봅시다. "나, 앨리스는, 밥에게 인포코인을 주고 싶다".

    우리가 원하는 것은 인포코인이 고유한 아이디를 갖는 것입니다. 그것은 태그 또는 일련 번호가 필요합니다. 앨리스는 메시지에 8740348이라는 일련 번호를 가진 인포코인 키에 서명할 수 있습니다. 그리고 앨리스는 다른 메시지에 서명하면, 앨리스는 두 개의 다른 인포코인 키를 알고 싶어합니다.

    이 프로그램을 실행하기 위해서는 신뢰할 수 있는 일련 번호의 소스가 필요합니다. 일련 번호를 생성하는 방법 중 하나는 은행과 같은 기관을 설립하는 것입니다. 이 은행은 인포코인의 일련 번호를 생성하여 누가 어떤 인포코인을 보유하고 있는지 기록하고 거래의 진실성을 확인합니다.

    좀 더 자세히 말하자면, 앨리스는 은행에 가서, "이봐, 내 계좌에서 인포코인을 가져가겠다".라고 말합니다. 이 은행은 그녀의 계좌에서 인포코인을 빼고, 새, 사용되지 않은 일련 번호를 주고, 1234567라고 가정합니다. 그리고, 앨리스는 밥에게 인포코인을 보내려고 할 때, 그녀는 이 새로운 메시지에 서명합니다. 앨리스는 밥에게 인포코인 인포코인을 1234567으로 보내려고 합니다. 하지만 밥은 인포코인을 받아들이는 것뿐만 아니라 은행에 연락하여 두 가지를 확인합니다. 첫째, 1234567이라는 일련 번호가 실제로 앨리스의 인포코인이었습니다. 둘째, 앨리스는 인포코인을 사용하지 않았습니다.

  • 모든 사람들이 은행이 되도록

    위의 해결책은 잠재력이 있는 것처럼 보이지만, 우리는 더 야심찬 일을 할 수 있습니다. 우리는 이 협약에서 은행을 제거 할 수 있습니다. 이것은 이 통화 자체의 특성을 크게 변화시킵니다. 이것은 이 통화에 대해 책임있는 단 하나의 조직이 없을 것이라는 것을 의미합니다. 중앙 은행이 얼마나 많은 권한을 가지고 있는지 생각할 때 (화폐 발행을 통제하는 것) 음, 이것은 큰 변화를 의미합니다.

    이 방법은 모든 사람들이 협력하여 은행이 되는 것입니다. 특히, 우리는 인포코인을 사용하는 모든 사람이 어떤 인포코인이 누구의 인포코인이라는 기록과 함께 완전한 기록을 유지한다고 가정합니다. 당신은 그것을 공유된 공개 책자로 생각할 수 있습니다. 이 책서는 모든 인포코인의 거래 기록을 기록합니다. 우리는 그것을 인포 블록체인 블록체인 인포코인이라고 부릅니다.

    이제, 앨리스는 밥에게 인포코인을 주겠다고 가정합니다. 그녀는 메시지 에 앨리스는 밥에게 인포코인 에 서명을 하고, 그 번호는 1234567입니다. 그리고 서명된 메시지는 밥에게 출력됩니다. 밥은 자신의 블록 체인을 통해 확인할 수 있습니다.

    우리는 여전히 의 일련 번호가 어디서 왔는지에 대한 문제가 남아 있지만, 이 문제는 실제로 쉽게 해결될 수 있습니다. 그래서 나중에 설명할 것입니다. 더 어려운 문제는 이 프로토콜이 앨리스를 반복적으로 그녀의 인포코인을 사용하도록 허용한다는 것입니다. 그녀는 서명된 메시지를 발표할 수 있습니다. 앨리스는 밥에게 1234567의 일련 번호의 인포코인을 주고, 동시에 그녀는 서명된 메시지를 발표할 수 있습니다. 앨리스는 찰리에게 1234567의 일련 번호의 인포코인을 주고. 밥과 찰리는 모두 자신의 블록체인을 사용하여 인포코인이 실제로 앨리스가 보낸 것이라는 것을 확인합니다.

    우리는 이 문제를 의 이중 지출 이라고 부릅니다 (후기 의 이중 지출 ) 이 처음엔 성공하기 어렵다고 보일 수 있습니다. 결국, 앨리스는 먼저 밥에게 메시지를 보내고 밥은 다른 모든 사람에게 메시지를 보내고 찰리도 포함해서 다른 사람들은 그들의 블록 체인을 업데이트합니다. 이 때, 찰리는 앨리스를 속이지 않습니다. 따라서 이중 지출은 짧은 시간 동안만 가능하다고 보입니다. 그러나 이 시간이 짧다고 하더라도 이 문제는 바람직하지 않습니다. 더 나쁜 것은 앨리스는 이 시간을 연장하도록하는 몇 가지 기술을 사용할 수 있습니다. 예를 들어, 그녀는 웹 분석 소프트웨어를 사용하여 밥과 찰리 사이의 대화를 매우 늦출 때 찾을 수 있습니다. 또는 의도적으로 연결을 방해하는 무언가를 지연시킬 수 있습니다.

    이 문제를 해결하는 가장 쉬운 방법은 앨리스가 밥에게 인포코인을 보내는 동안 밥이 혼자서 거래를 확인하지 않는 것입니다. 대신 그는 대기 중인 거래를 인포코인 네트워크 전체에 공개하고 다른 사람들이 거래가 타당하다고 판단하도록 해야 합니다. 만약 그들이 공동으로 결정한다면 밥은 인포코인을 받아서 모든 사람들이 그들의 블록체인을 업데이트 할 수 있습니다. 이 유형의 프로토콜은 이중화물을 방지할 수 있습니다. 왜냐하면 앨리스는 동시에 밥과 찰리에 동일한 인포코인을 보내고 싶다면 네트워크에 있는 다른 사람들이 그것을 알아차리고 이 거래에 문제가 있다고 말한다면 거래가 통과되지 않습니다.

    더 구체적으로 말하자면, 앨리스는 밥에게 인포코인을 주고 싶다고 가정하자. 이전과 마찬가지로, 그녀는 메시지를 서명하고, 앨리스는 밥에게 인포코인 인포코인을 주고, 인포코인이 1234567이라는 일련의 번호가 있고, 좋은 이름을 가진 메시지를 밥에게 서명한다. 또한 이전과 마찬가지로, 밥은 자신의 블록체인을 사용하여 확인을 하고, 이 코인은 실제로 앨리스에 속한다. 그러나 프로토콜은 다릅니다. 밥은 이것을 직접 받아들이지 않고, 네트워크 전체에 앨리스의 메시지를 공개합니다. 다른 멤버들은 앨리스가 인포코인을 가지고 있는지 확인하고, 만약 그렇다면, 그들은 알리스가 인포코인을 가지고 있는지, 알리스는 인포코인 1234567을 가지고 있다고 발표하고, 이제 그것을 밥에게 전송할 수 있습니다.

    이 프로토콜에는 현재 많은 불확실성 요소가 있습니다. 예를 들어, 충분한 사람들이 이 소식을 공개 한 후에, 얼마나 많은 사람들이 충분한가? 전체 인포코인 네트워크는 불가능합니다. 왜냐하면 우리는 미리 누가 인포코인 네트워크에 있는지 알지 못하기 때문입니다. 또한, 고정된 일부 사용자는 불가능합니다. 우리는 지금 이러한 문제를 해결하기 위해 서두르지 않습니다. 여기서 이 거래의 심각한 문제를 지적하고 문제를 해결하는 것은 위의 문제를 해결하는 데 도움이 될 것입니다.

  • 취업 증명서

    앨리스는 위의 프로토콜에서 이중화폐를 원한다고 가정하자면, 그는 전체 인포코인 네트워크에 대한 통제를 필요로 한다. 그녀가 자동 시스템으로 인포코인 네트워크에 많은 다른 신분을 가진 계정을 만들기를 가정하자면, 10억 개라고 가정하자. 이전과 마찬가지로, 그녀는 이중화폐를 시도하고 같은 인포코인을 밥과 찰리에게 주려고 노력했지만, 밥과 찰리가 인포코인 네트워크에 이 거래를 검증하기 위해 요청했을 때, 앨리스의 마마들은 전체 네트워크를 침수하고, 밥과 찰리에 이 거래를 통해 갈 수 있다고 말했고, 아마도 그들 중 한 명 또는 둘 다 이 거래를 받아 들일 수 있다고 속였을 것이다.

    현명한 방법은 의 작업 증명 방법인 Proof-of-work 의 방법이다. 이 방법은 직관적이지 않으며, 두 가지 개념을 결합해야 한다. 1) 트랜잭션을 검증하는 과정에 더 많은 계산 비용이 들어가는 것을 인공적으로 만드는 것; 2) 트랜잭션을 검증하는 데 도움을 주는 사람들을 보상하는 방법.

    이것이 취업 증명서의 핵심입니다. 하지만 취업 증명서를 제대로 이해하기 위해서는 좀 더 구체적으로 들어가야 합니다.

    앨리스는 네트워크 전체에 메시지를 전합니다. 앨리스는 Bob에게 1234567이라는 일련 번호의 인포코인 인포코인을 주려고 합니다. 네트워크의 다른 사람들이 이 메시지를 듣고 나서, 모든 사람들이 그것을 네트워크 전체에 의해 통과되지 않은 대기 거래 목록에 추가합니다. 예를 들어 네트워크의 데이비드라는 사람이 다음과 같은 대기 거래를 가질 수 있습니다.

    img

    데이비드는 자신의 블록 체인을 검사하고 위의 거래가 타당하다는 것을 보았습니다. 그는 이 확인 메시지를 네트워크 전체에 보급하는 데 도움이 될 것입니다. 그러나, 그 전에, 체크 트랜잭션 프로토콜은 데이비드가 계산의 난제인 작업 증명을 해결해야 합니다. 만약 그가 문제를 해결하지 못한다면, 네트워크의 다른 구성원들은 그의 검증을 받아들이지 않을 것입니다.

    그렇다면 데이비드는 어떤 문제를 해결하고 있을까요? 이것을 설명하기 위해 우리는 네트워크 상의 모든 사람이 알고 있는 고정된 해시 함수인 해시 함수를 프로토콜 자체에 포함합니다. 비트코인은 잘 알려진 SHA-256 해시 함수를 사용합니다. 그러나 모든 암호학적 해시 함수는 여기에 사용할 수 있습니다. 우리는 데이비드에게 주어진 대기 거래 그룹에 표시를 주며, L를 참조하기 위해 나중에 참조할 수 있습니다.

    img

    데이비드가 풀고 있는 문제 (실용 증명) 는 무작위 x를 찾는 것입니다. 우리는 이 x를 L 뒤에 더하고 hash의 조합을 할 때, 몇 개의 0의 시작으로 시작되는 결과를 얻을 수 있습니다. 이 문제의 난이도는 시작되는 0의 개수를 조정하여 조정할 수 있습니다. 간단한 hash의 작업 증명에서 hash은 3 또는 4개의 0의 시작으로 시작되는 hash만을 필요로하고, 어려운 hash의 작업 증명에서 hash는 더 많은 0의 시작을 필요로 할 수 있습니다. 예를 들어 15개의 연속적인 0을요. 위의 경우, x=0에 도달하는 hash은 0이 아닌 결과로 시작되기 때문에 성공하지 않습니다.

    x가 1이 될 때에도

    img

    x가 2이고, x가 3이고, 4이고, 5입니다.

    img

    이 무작위 x는 우리에게 4개의 0을 시작하는 해쉬의 결과를 준다. 이것은 간단한 해쉬 공인 해쉬 문제를 해결하기에 충분하다.

    이 문제를 어렵게 만드는 것은 암호 해시 함수의 결과가 항상 무작위이기 때문에 입력값에 작은 변화를 주면 전체 해시 함수의 출력이 완전히 다른 것으로 예측하기가 어렵습니다. 그래서 우리가 출력이 10개의 0에서 시작되어야 하는 결과를 필요로 한다면, 데이비드는 평균적으로 1610∼1012개의 다른 x를 필요로 할 것입니다.

    분명히, 우리는 얼마나 많은 0이 필요한지 규정함으로써 작업 증명의 난이도를 제어할 수 있다. 사실, 비트코인 프로토콜은 위의 작업 증명에 약간의 개정을 통해 작업 증명의 난이도를 더 잘 제어할 수 있다. 더 이상 시작되는 0의 수를 규정하는 것이 아니라 블록의 해시 출력이 목표값보다 작거나 같도록 규정하는 것이 아니라, 이 목표값은 자동으로 조정되어 비트코인의 각 블록 (블록) 이 평균적으로 10분이 걸리는 것을 보장하기 위해 사용된다.

    좋아요, 데이비드가 운이 좋아서 적절한 x를 찾았다고 가정해보죠. 축하합니다. (이번 해답을 찾는 것에 대한 보상이 주어질 것입니다.) 그는 이 블록에 있는 거래가 타당하다는 것을 증명했다는 것을 발표하고 동시에 그녀가 발견한 x값을 발표합니다. 다른 인포코인 참가자들은 그 x의 증명이 유효하다는 것을 증명할 수 있습니다. 그리고 그들은 데이비드가 발표한 거래를 포함하도록 자신의 블록체인을 업데이트합니다.

    이 프로그램이 작동하는 것을 증명하기 위해 네트워크의 참가자들은 거래를 확인하는 데 도움이 되는 인센티브 메커니즘을 필요로 해야 한다. 인센티브 메커니즘이 없다면 아무도 자신의 컴퓨터 연산력을 거래 검사를 돕기 위해 쓰려고 하지 않을 것이다. 네트워크의 참가자들이 연산력을 쓰려고 하지 않으면 전체 시스템이 작동하지 않을 것이다. 따라서 우리는 거래에 성공한 인센티브 메커니즘을 가진 모든 사람들에게 몇 가지 인포코인을 제공함으로써 보상을 할 수 있다. 만약 그들에게 충분한 인포코인 보상을 제공한다면, 그들은 인센티브에 참여할 수 있다.

    비트코인의 프로토콜에서, 이 검증 과정은 마인링 (mining) 이라고 불린다. 그 때, 각 거래 블록의 검증 성공자는 비트코인을 보상으로 받게 된다. 처음에는, 50개의 비트코인 보상이다. 그러나 21만 개의 검증된 블록 (약 4년 정도) 당, 보상은 절반으로 줄어들 것이다. 지금까지는 한 번만 발생했다. 즉, 현재 검증된 블록의 보상은 25개의 비트코인이다. 이 반감 과정은 2140년경까지 계속될 것이다. 그 때, 광산의 보상은 10-8개의 비트코인으로 줄어들 것이다. 그리고 10-8개의 비트코인이 가장 작은 단위인 Satos이라고 불릴 것이다. 따라서, 2140년까지, 전체 인센티브는 증가할 것이다.

    당신은 작업 증명 (proof-of-work) 을 경쟁 검증 거래의 과정으로 볼 수 있다. 각 참가자는 컴퓨터 계산력의 일부를 소비한다. 한 채굴자의 승리의 확률은 그들이 통제하는 컴퓨팅 힘의 크기와 전체 네트워크의 계산력의 비율에 거의 같습니다. 예를 들어, 한 채굴자가 전체 네트워크의 계산 힘의 1 퍼센트를 제어하면 그의 승리의 확률은 거의 1 퍼센트가 됩니다. 따라서 많은 컴퓨팅 능력을 제공하는 것이 경쟁력을 뒷받침하는 요소이며, 부정직한 채굴자는 엄청난 컴퓨터 자원을 소비하지 않는 한 검증 프로세스를 파괴 할 수있는 기회가 거의 없습니다.

    물론, 부정직한 채굴자가 전체 블록체인을 파괴할 확률이 극히 낮더라도, 우리는 그것을 통화로 사용할 수 있는 충분한 신뢰를 가지고 있지 않습니다. 특히, 우리는 아직 쌍화 문제를 최종적으로 해결하지 못했습니다.

    나는 바로 이중화 문제들을 분석할 것이지만, 그 전에, 인포코인 개념에 중요한 세부사항을 추가하고 싶습니다. 이상적으로는, 우리는 인포코인 네트워크가 거래가 일어나는 순서를 통일할 수 있기를 바랍니다. 만약 우리가 통일된 순서가 없다면, 누가 어느 특정 시점에 어떤 인포코인을 가지고 있는지 명확하게 알 수 없습니다. 이를 해결하는 데 도움을 주기 위해, 우리는 새로운 블록을 요구합니다. 이 블록은 하나의 블록의 상향 지점을 포함해야 합니다. 이 지점은 실제로 블록의 해시 결과이기도 합니다. 따라서, 기본적으로, 블록 체인 자체는 거래 정보를 포함하는 블록의 선형적인 연속입니다. 한 블록이 한 블록에 이어, 각각의 블록은 하나의 상향 지점을 포함합니다.

    img

    우연한 경우에, 하나의 블록체인에는 분포가 발생한다. 이것은 두 명의 채굴자가 거의 동시에 하나의 블록의 거래를 검증하기 때문에 일어난다. 그들은 동시에 네트워크에 공개되고, 어떤 사람들은 한 방법으로 그들의 블록체인을 업데이트하고, 다른 사람들은 다른 방법으로 그들의 블록체인을 업데이트한다.

    img

    이것은 우리가 피하고자 하는 상황을 만들어 냅니다. 이런 상황에서는 거래 순서가 명확하지 않고 누가 어떤 인포코인을 가지고 있는지도 명확하지 않습니다. 다행히도, 브랜치를 이동하는 데 사용할 수있는 간단한 방법이 있습니다. 규칙은 다음과 같습니다. 만약 브랜치 상황이 발생하면 네트워크에 있는 사람들은 두 개의 브랜치를 계속 유지하며, 어떤 경우에도 채굴자는 가장 긴 블록 체인에만 일합니다.

    만약 우리가 한 지점을 가지고 있고, 어떤 채굴자가 A 블록을 먼저 받았고, 다른 채굴자가 B 블록을 먼저 받았다고 가정하자. A 블록을 받은 채굴자는 자신의 지점을 따라 채굴을 계속할 것이고, 다른 사람들은 B 블록의 지점을 따라 채굴할 것입니다.

    img

    이 메시지를 받은 후에, A 브랜치에 있는 사람들은 B 브랜치가 가장 길다는 것을 알아차리고, B 브랜치로 전환합니다. A 브랜치에 있는 작업은 빠르게 멈춰서 모든 사람들이 같은 순서로 블록 체인에 작업하게 됩니다. 그리고 A 블록은 무시됩니다. 물론 A 블록에 있는 모든 대기 거래는 대기 상태로 유지되고, B 브랜치에 있는 모든 거래는 새로운 블록에 배치됩니다. 결국 모든 거래는 검증됩니다.

    마찬가지로, A 지점에서 작업하는 채굴자가 다음 블록을 먼저 채굴하면, B 지점에서 작업하는 사람이 멈추고 A 지점으로 이동합니다.

    어떤 결과든, 이 과정은 블록체인이 통일된 순서를 갖는 것을 보장한다. 비트코인에서는 거래가 1) 가장 긴 브랜치 블록에 존재하는 것, 2) 최소 5개의 검증된 블록이 그 뒤에 검증되기 전까지 확인되지 않는다. 이 경우, 우리는 거래가 6개의 확인된 블록을 가지고 있다고 말합니다. 이것은 전체 네트워크에 블록의 통일된 순서를 부여하는 시간을 제공합니다. 우리는 인포코인에서도 같은 방법을 사용합니다.

    이제 우리는 시간 순서를 이해하게 되었으니, 만약 불공정한 사람이 두 번 지출을 원한다면 어떻게 되는지 생각해 봅시다. 예를 들어, 앨리스는 밥과 찰리에게 동시에 같은 거래를 해야 한다고 가정해보죠. 한 가지 가능성은 그녀가 동시에 두 번 거래된 블록을 검증하도록 하는 것입니다. 만약 그녀가 계산 능력의 100%를 가지고 있다고 가정해보면, 그녀는 이 블록을 검증하는 데 더 운이 좋을 가능성이 있습니다. 불행히도, 이 두 번 지출은 다른 사람들이 발견하고 거부할 것입니다. 비록 그녀가 작업 증명의 어려운 문제를 해결했음에도 불구하고. 그래서 우리는 걱정할 필요가 없습니다.

    그러나 다른 가능성은 그녀가 두 거래를 각각 공개하려고 시도한다는 것입니다. 그녀는 한 거래에 한 채굴자에게 다른 거래에 다른 채굴자에게 다른 거래를 공개하고 두 거래가 모두 검증되기를 바랍니다. 다행히도, 우리가 방금 말한 것처럼, 이 경우 네트워크는 결국 하나의 거래를 확인합니다. 그래서, 이것은 문제가 아닙니다.

    또 다른 가능성은, 앨리스 = 밥, 즉 앨리스는 찰리에게 동전을 전달하려고 시도하고, 그녀는 또한 그 동전을 자신에게 전달합니다. 왜냐하면 그녀는 스스로 여러 계정을 가질 수 있기 때문입니다. 이 경우, 앨리스의 전략은 찰리가 이 인포코인을 수신할 때까지 기다립니다. 즉, 거래가 가장 긴 블록체인에서 약 6번 확인된 후에. 그녀는 또 다른 블록의 지점을 해결하려고 시도합니다.

    img

    불행히도, 이 때 앨리스는 가장 긴 블록 체인보다 6단계 늦었다. 그녀는 가장 긴 가지에 따라잡기 힘들었다. 다른 채굴자들은 그녀에게 도움이 되지 않을 것이다. 왜냐하면 그들은 모두 가장 긴 가지에서 일해야 하기 때문에 보상을 받을 것이다. 앨리스는 다른 사람들보다 더 빨리 연결될 수 밖에 없다. (즉, 그녀는 아마도 전체 네트워크의 50% 이상의 계산 능력을 가지고 있다.) 물론, 그녀는 우연히 운이 좋아서 백분의 1의 계산 능력으로 블록을 해결할 수 있을 것이다. 그러나 6개의 꽃을 동시에 잡는 것은 1/1006 = 10-12에 해당한다.

    물론 이것은 아주 엄격한 말은 아닙니다. 앨리스는 확실히 두 번을 사용할 수 없습니다. 이것은 단지 합리적인 추론입니다. 비트코인의 화이트 페이퍼는 엄격한 보안 분석을 하지 않고, 단지 제와 비슷한 비공식적인 추론입니다. 보안 그룹은 비트코인의 안전성과 잠재적인 결함을 분석하는 데 무관심합니다.

    번역자, 이것이 첫 번째 부분이며, 후반의 저자 마이클은 인포코인 개념을 버리고 비트코인 거래의 시각으로 비트코인의 프로토콜을 더 자세히 설명합니다.

    또한, 도움이 된다면, 이 글의 저자인 Michael Nielsen에게 팁을 드리겠습니다. 그의 주소는 17ukkKt1bNLAqdJ1QQv8v9Askr6vy3MzTZ입니다.

이 책에서 인용된 기사


더 많은