BlockChain/Blockchains

비트코인이란? (Bitcoin WhitePaper 정리)

동현 유 2022. 8. 4. 06:53

bitcoin.pdf
0.18MB

첨부된 비트코인 백서(White paper)를 읽고 정리한 내용입니다.


1. Intro

  전통적으로 전자상거래를 사용하기 위해서는 ‘신뢰할 수 있는 제3의 금융기관’이 필수적이었다. 이는 이중지불 문제를 해결하기 위함인데, 자산을 한 번 소비하면 동일한 자산을 다시 다른 곳에 사용할 수 없도록 보장해야하는 문제이다. 즉, ‘제 3의 기관’이 이중지불 문제를 해결함으로써, 전자화폐로서의 기능을 보증한다.

 

  하지만 블록체인은 이중지불 문제를 순수하게 peer-to-peer 네트워크를 통해 해결하는 법을 제시한다. 해시 기반 작업증명 방식을 통해 거대한 체인이 자라난다. 이 거대한 체인은 그 자체로 거래내역 장부의 무결성을 보장하고, 시장 참여자들의 cpu 가 계속 작업하도록 유도함으로써 위변조 공격을 방지한다.

 

  Satoshi Nakamoto가 지적하는 전통적인 전자상거래의 단점은 바로 신뢰가 강요된다는 것이다. 당사자 간의 거래는 믿을 수 없기 때문에, 두 당사자 사이에서 발생할 수 있는 분쟁을 중재하는 제 3 기관이 ‘믿을만하다’는 것을 신뢰해야한다. 그런 믿음 위에서 거래가 이루어진다. 실제로 그 믿음이 어느정도 사실이라고 할지라도, 금융기관이 자신의 신뢰성을 보장하기 위한 사회경제적 비용이 거래 참여자들에게 전가된다.

 

  따라서 Satoshi Nakamoto는 신뢰 기반이 아닌, 암호학적 증명에 의한 전자상거래 시스템을 주장한다. 제 3의 금융기관을 cryptographic proof 가 대신하기 때문에 직접 자산을 주고 받을 수 있고, 완전히 비가역적이다.

2. Transaction

  전자서명의 체인을 전자화폐(coin)라고 정의한다. 수신자의 계좌번호는 공개키와 동일한다. 송금하는 사람은 코인의 [Hash(마지막 트랜젝션, 수신자의 주소(공개키))]에 서명함으로써 송금할 수 있다. 이런 구조를 통해 얻을 수 있는 장점은 다음과 같다. 첫째로 서명으로 송금의 부인방지와 무결성을 보장한다. 둘째로, 이전 트랜젝션을 포함(정확하게는 해시값을 포함)함으로써, 코인 자체가 global한 거래내역 장부가 된다.

 

  이 구조는 마치 PKI(Public Key Infrastructure) 와 비슷한 구조로 되어있어서, 중간 트랜젝션을 위변조하기 위해서는 다른 사람의 서명을 생성할 수 있어야 하고, 이후의 모든 트랜젝션 해시값을 수정할 수 있어야 한다.

3. Timestamp Server

이 트랜젝션 구조만으로는 double-spent 문제를 해결할 수 없는데, 해결 방법은 다음과 같다.
→ 수신자가 트랜잭션을 통해 송금 받았을 때, 해당 토큰에 대해 서명된 트랜젝션이 이미 존재하는 지 확인하면 된다.
→ 그러려면 수신자가 모든 트랜젝션 내역을 알아야한다.
→ 모든 트랜젝션을 공개하고, 참여자들이 유일한 트랜젝션 시퀀스를 합의하도록 하면서 이중지불 문제를 해결한다.

 

  모든 트랜젝션을 공개하기 위한 방법으로는, 일정 시간동안 발생한 트랜젝션에 대해 timestamp를 부여하고 Block 을 공개적으로 생성하는 것이다. 해당 블럭 안에 있던 트랜잭션은 적어도 timestamp 시각에는 존재했다는 것을 보증하게 된다. 또 새롭게 블럭을 생성할 때는 timestamp 값이 포함된 이전 블럭 해시값을 포함하도록 하는 구조로 되어있어, timestamp 기반의 블록 체인을 생성하면서 그 신뢰성을 더욱 높인다.

4. Proof-of-Work

  P2P 기반의 distributed timestamp server(=다수의 합의 방식)를 구현하기 위해 Adam Back’s Hashcash 와 비슷한 PoW 시스템을 고안했다.

 

  해시 알고리즘을 이용하여 도출된 해시의 bits sequence를 보면 0bits와 1bits가 거의 동일한 비율로 들어있게 된다. 해시 알고리즘의 요구사항 중 하나로서 랜덤하게 보이는 bits sequence를 생산하도록 설계되었기 때문이다. PoW 방식은 블럭 해시값 상위 0 bits의 개수가 k개 이상이 되도록 하는 Nonce 값을 가장 빨리 찾는 방식이다. 결과적으로 가장 긴 체인이 항상 선택되도록 한다.

 

  블럭생성 작업은 해시의 비가역성과 난수성 때문에 brute-force 방식으로 특정 확률로만 성공 가능하다. 0bits의 개수인 k를 조절함으로써 난이도(성공확률)를 조절할 수 있는데, 이를 통해 블럭생성의 속도를 조절하게 된다. (시간당 생성되는 블럭 개수의 이동 평균으로 난이도가 결정된다.)

 

  one-CPU-one-vote 방식의 합의 알고리즘인데, 블럭을 조작하기 위해서는 시장 참여자들보다 더 빠르게 블럭을 생성할 수 있을만큼의 압도적인 컴퓨팅 파워가 필요하다. 어쩌다 중간에 있는 블럭을 조작했다고 하더라도 그 뒤에 있는 모든 블럭을 다 조작하고, 가장 긴 체인이 되도록 추가 블럭을 생성해야만 한다. 

 

5. Network

  1. 새로운 트랙잭션들이 생성될 때마다 모든 노드에 broadcast 된다.
  2. 각 노드들은 새로운 트랜잭션들을 블럭 단위로 모은다.
  3. 각 노드는 블럭을 생성하기 위한 Nonce 값을 찾는다.
  4. 한 노드가 성공적으로 블럭을 생성하면, 모든 노드에게 전파한다.
  5. 노드들은 해당 블럭 내의 트랜잭션 유효성을 검증하고 한다.
  6. 검증되면, 노드들은 해당 블럭을 체인으로 받아들인다.또 블럭의 전파과정에서, 해당 블럭의 생성 소식을 듣지 못한 노드가 발생할 수 있다. 이 경우에는 나중에 다른 블럭을 받았을 때, 블럭의 누락을 발견하고 네트워크에 블럭 정보를 요청한다.
  7. 순간적으로 동시에 서로 다른 블럭이 네트워크 내에서 생성될 수 있는데, 한 노드가 길이가 같은 두 버전의 체인을 받으면, 하나는 따로 보관해두고 다른 하나로 PoW를 수행한다. 도중에 둘 중 하나가 다른 하나보다 더 길어지는 순간이 되면 그것을 채택한다.

 

6. Incentive

  블럭을 처음 생성할 때, 맨 처음 트랜젝션은 특수한 트랜잭션인 coinbase transaction 이 포함되는데, 블록체인 네트워크에 의해 PoW 보상으로 주어지는 것이다. 다른 트랜잭션에는 송신자와 수신자의 정보가 모두 포함되지만 coinbase transaction 에는 송신자 정보가 없다. 따라서 블록 생성 인센티브로 주어지는 토큰의 최초 소유자는 블럭 생성자가 된다.

또 트랙잭션 수수료를 통해 보상이 주어질 수 있고 보통 마이너들은 수수료가 높은 트랜잭션을 우선으로 처리한다.

 

  인센티브는 네트워크 참여자들이 적극적으로 블럭을 생성하도록 유도하여 거래가 활발히 이뤄지도록 만드는 한편, 악의적인 공격자들이 공격하지 못하도록 방어하는 역할도 수행한다. 정상적인 블록 생성이 활발해지는 것 자체가 보안강화요소이기도 하지만,블록을 조작할 수 있을만큼의 컴퓨팅파워를 가진 참여자가 거래내역을 조작하면서 얻을 이득과 인센티브를 통해 얻는 이득을 비교해야만 하기 때문이다.

7. Saving Disk Space (Merkle Tree)

블록헤더에는 이전블록 해시값, 난스, 머클루트 가 포함되어 있다. 오래된 블럭에 포함된 모든 트랜잭션 내역을 보관하지 않기 위한 방법으로 머클트리가 사용된다.

  모든 블럭의 정보를 갖는 노드를 full-node 라고 하고, 블록헤더만 갖는 노드를 light-node 라고 한다. 실시간의 빠른 처리가 필요하지 않거나 저장 용량이 많지 않은 노트는 블록헤더만 갖고 있으면서 필요한 데이터가 있으면 full-node 에게 질의하여 정보를 받아온다.

8. Payment Verification

  리프노드인 트랜잭션을 제외한 모든 내부노드들은 SHA256 해시 결과인 32bytes 의 해시값을 갖는다. 이 모든 해시값을 저장할 필요 없이 머클루트만 저장함으로써 특정 트랜잭션에 대한 검증을 용이하게 한다.

 

  즉 블록에 포함된 모든 트랜젝션을 검증하지 않아도, 해시함수의 Avalanche Effect로 인해 블록 헤더에 적혀있는 32bytes 만 비교해도 블럭에 포함된 트랜잭션의 유효성을 판단할 수 있다.

또 변조된 트랜잭션을 특정하는 데에도 logN 시간밖에 걸리지 않기 때문에 매우 효과적인 방식이라고 할 수 있다.

9. Combining & Splitting Value

  블록체인 네트워크에서는 잔고와 같은 정보가 저장되지 않고 오로지 거래내역(transaction) 만 저장되기 때문에, 토큰을 화폐 최소 단위로 사용하기 위해서는 트랜잭션을 여러개의 입력과 출력으로 나누어야한다.

 

  입력은 토큰을 받는 것, 출력은 송금하는 것을 의미한다. 입력은 여러 곳에서부터 들어올 수 있는 반면, 출력은 최대 2개로 정의된다. 하나는 실제 값을 지불하는 것이고, 나머지는 트랜잭션의 남은 금액을 거스름돈으로 자신에게 다시 보내는 것이다.

10. Privacy

  전통적인 거래 시스템에서는 거래내역에 대한 접근제어를 통해서 privacy를 제공했다면, 블록체인 네트워크는 모든 수신자와 발신자가 공개키로만 나타내진다는 점으로 privacy를 제공한다. 네트워크 참여자에 대한 정보를 저장하지 않으면서, 지갑 주소만 드러나기 때문이다.

11. Calculations

 공격자와 정상 참여자 간의 블럭 생성 양상은 다음과 같이 Binomial Random Walk 의 형태로 표현될 수 있다.

  • q = 악의적인 참여자가 블럭을 찾을 확률
  • p = 정상 참여자가 블럭을 찾을 확률
  • q_z = 공격자가 z 블럭 차이를 따라잡을 확률q와 z 값에 따른 포아송 누적 분포를 이용하면, 다음과 같은 값을 얻을 수 있다.
  • 공격자가 한 블럭을 조작하고 난 뒤에, 정상 참여자들이 z 개의 블럭을 만들어 낸 상황이라면 공격자는 z+1 개의 블럭을 생성해야만 공격에 성공한다. (적어도 z개 블럭을 따라잡아야한다). 포아송 분포를 이용한 공격자의 블럭생성 기대값은 E[X] = λ = z * (q/p) 로 나타낼 수 있다. (단, p+q = 1)

(P = z 개를 따라잡는 확률 )

  공격자가 45%의 컴퓨팅파워를 소유하고 있을 때 340개 이전의 블럭에 대해서는 0.1 % 이하의 공격성공확률을 갖게된다는 것을 의미한다.

12. Conclusion

  블록체인 네트워크는 전통적인 전자결제 시스템의 제 3 기관을, 전자서명 기반의 암호 시스템으로 대체한 것이다. 이중지불 문제를 해결하기 위해 P2P 네트워크 상에서의 PoW 합의 알고리즘을 제시하였다. 이 알고리즘과 보상기반의 네트워크 운영으로인해, 과반 이상의 컴퓨팅 파워가 정상적으로 작동한다면 공격에 대체로 안전하다. 또 거래내역만 global 하게 공개되므로 시장참여자들의 신원을 식별할 필요가 없고, 항상 네트워크에 참여하지 않아도 된다는 장점이 있다.