공대생 정리노트

Bitcoin: A Peer-to-Peer Electronic Cash System - Satoshi Nakamoto 요약 본문

블록체인

Bitcoin: A Peer-to-Peer Electronic Cash System - Satoshi Nakamoto 요약

woojinger 2021. 12. 2. 22:42

저의 부족한 영어 실력 & 블록체인 지식으로 읽고 요약한 것입니다.

잘못된 정보가 있을 수 있습니다


Abstract

순수한 P2P 시스템은 금융기관을 거치지 않고 이루어 져야 한다.

이를 위해서 디지털 서명이 도입되었었으나 double-spending을 막기 위해서는 여전히 third party의 개입이 필요했다.

이 논문은 거래의 타임스탬프를 해시 체인으로 엮은 네트워크를 만들고, 엄청난 CPU Power가 필요한 proof를 base로 하는 시스템을 제안한다.

 

Transaction

Bitcoin: A Peer-to-Peer Electronic Cash System

디지털 서명을 체인으로 하는 전자 코인을 하나 정의해보자. 각 주인은 코인을 옮길 때 이전 트랜잭션과 다음 주인의 퍼블릭 키의 해시를 사인하고(자신의 프라이빗 키로) 이를 코인의 끝에 추가한다. 받는 사람은 이전 주인의 퍼블릭키를 이용해 체인의 ownership을 인증할 수 있다

 

(참고) 밑에 접은 글은 위 세 줄을 조금 더 풀어서 설명한 사이트이다. 한번 보는 것을 추천한다.

더보기

위 그림의 원리가 잘 이해가 안되서 구글링을 하다가 좋은 사이트를 찾았다

https://learnmeabitcoin.com/technical/public-key-hash

 

Public Key Hash

It’s the version of your public key that you give to other people so that they can send you bitcoins. It’s shorter than the original public key, and it may provide an extra layer of security for your bitcoins compared to giving out your public key dire

learnmeabitcoin.com

비트코인에서는 퍼블릭키에서 두 개의 해시함수(SHA256, RIPEMD160)을 거친 키를 주소로 사용하는 것을 다들 알고 있을 것이다.

비트코인 수신자는 송신자에게 자신의 주소(수신자의 주소)를 보낸다. 송신자는 이를 이용해 scriptPubKey를 만든다.

https://learnmeabitcoin.com/technical/scriptPubKey

이 scriptPubKey를 트랜잭션의 끝에 붙이는데, 이를 P2PKH를 할 수 있다.

P2PKH는 Pay To Pubkey Hash의 줄임말이다. scriptPubKey로 비트코인을 잠가놓으면, 풀기 위해서 scriptSig가 필요하다. scriptSig는 현재 주인(수신자)의 퍼블릭키와 서명으로 구성되어 있다.

홈페이지의 그림이 너무 설명이 잘 되어있어서 이를 바탕으로 설명하겠다.

https://learnmeabitcoin.com/technical/p2pkh

1. scriptSig의 퍼블릭키가 dup되고, 그 중 하나를 HASH160을 거쳐 주소로 만든다.

2. scriptPubKey에 있는 주소와 해당 주소가 같은지 비교한다.

3. 일치한다면 CHECKSIG가 퍼블릭키를 통해 서명을 검사한다.

즉 이러한 과정을 통해서 비트코인의 주인이 누구인지 알 수 있고, 쉽게 전송을 할 수 있다.

그러나 이것만으로는 double spend problem을 해결할 수 없다.

모든 트랜잭션을 검사하는 중앙 기관을 두는 방법이 제일 쉽지만, 이를 이는 결국 third party를 끼는 것과 같다. 이를 해결하기 위해서 모든 트랜잭션을 공개하고, 히스토리를 저장하는 시스템을 제안하였다.

Timestamp Server

Bitcoin: A Peer-to-Peer Electronic Cash System

타임스탬프는 데이터가 해당 시간에 있었다는 것을 증명하고, 이를 Hash로 연결함으로써 트랜잭션간 순서를 만들 수 있게 되었다.

Proof-of-Work

Bitcoin: A Peer-to-Peer Electronic Cash System

P2P 베이스의 분산된 타임스탬프 서버를 운영하기 위해 proof-of-work 시스템이 필요하다.

proof-of-work는 SHA-256과 같은 해시 함수를 통해 나온 값이 앞에 몇 개의 0이 있는지를 알아내는 작업을 포함한다.

(한 문장으로 정리하기 어려운데, 관련 내용은 검색하시면 금방 나올 겁니다)

이를 만족하는 nounce를 찾기 위해서는 엄청난 CPU 계산이 필요한데, 기존의 블록을 바꾸려면 이를 다시 해야한다.

만약 그 블록 뒤에 다른 블록들이 더 연결되어 있다면, 각 블록마다 이를 다시 해줘야 한다.

하드웨어의 발전으로 인해서 nonce가 쉽게 찾아지는 걸 막기 위해 proof-of-work의 난이도는 조정되게 셋팅한다.

Network

1. 새로운 트랜잭션은 모든 노드에게 알려진다

2. 각 노드는 블록에 새로운 트랜잭션을 넣는다.

3. 각 노드가 proof-of-work를 수행한다

4. 노드가 proof-of-work를 성공하면 다른 노드들에게 해당 블락을 알린다

5. 노드들은 해당 블록의 모든 트랜잭션이 유효하면 accept한다.

6. 노드들은 해당 블록을 받아들였다는 것을 받아들인 블록의 해시를 이용해 다음 블록을 만드는 것으로 표현한다.

 

노드들은 항상 제일 긴 체인이 올바른 것으로 간주하고 작업을 이어나간다. 만약 다음 블록이 두 개의 버전이 등장하면, 각 노드는 먼저 받은 블락에서 일하게 된다. 그러다 한 브랜치가 길어지면 노드들은 긴 브랜치에서 일하게 된다.

 

이 시스템 하에서는 새로운 트랜잭션이 모든 노드에 닿을 필요가 없고, 어떠한 노드가 블락을 받지 못하더라도 그 노드가 다음 블락을 받게 되면 자신이 받지 못한걸 알게 되 요청할 수 있다.

Incentive

블록의 첫번째 트랜잭션은 해당 블록의 생성자가 가지는 첫 코인을 시작하는 트랜잭션이다. 

인센티브는 트랜잭션 비용으로도 제공될 수 있다. 트랜잭션의 아웃풋이 인풋보다 작다면, 그 차이가 해당 트랜잭션이 들어있는 블록에 트랜잭션 비용으로 제공된 것이다. 

인센티브는 노드가 잘못된 방식으로 사용되지 않게 막아주기도 한다. 공격자가 만약 정직한 노드들보다 더 많은 CPU 파워를 모을 수 있다면 그 공격자는 사람들의 payment를 훔쳐 디폴트 시켜버리거나 코인을 생성할 수 있다. CPU 파워로 코인을 만드는 것이 더 이득이므로 공격자는 굳이 payment를 훔칠 이유를 찾지 못하게 된다.

 

Reclaiming Disk Space

머클 트리를 이용해 오래된 블록들은 트리의 브랜치를 잘라내 압축을 할 수 있다.

블록 헤더는 트랜잭션이 없고 80byte이다. 블락이 10분마다 생성된다고 가정하면 1년에 생산되는 블록 헤더는 4.2MB에 불과하다.

SImplified Payment Verification

full network node를 running하지 않아도 payment를 검증할 수 있다.

사용자는 가장 긴 proof-of-work 체인의 블록 헤더들만 있으면 된다. 스스로 트랜잭션 겁증은 불가하나 체인에 링킹이 된것을 따라가다 보면 네트워크 노드가 accept한 것을 확인할 수 있다.

Bitcoin: A Peer-to-Peer Electronic Cash System

그러나 위의 검증법은 overpower를 가진 공격자가 위조된 트랜잭션들을 길게 만들면 뚫릴 수가 있다. 이를 방지하기 위한 정책 중 하나는 검증되지 않은 블락을 네트워크 노드로부터 경고를 받으면 사용자의 소프트웨어에 full block을 다운받게 하는 것이다.

 

Conclusion

디지털 서명은 ownership을 나누어 주지만 double spending을 막지 못했다.

막기 위해 proof of work를 도입해 history를 기록하고 이를 공격자가 조작하는 것을 어렵게 하였다

Comments