grep

Engineering

블록체인과 비트코인

NHN

2018년 8월 28일

원문에서 보기 ↗

이 글은 2017년 5월 사내에서 발표한 자료 입니다. 지금과는 다른 내용이 포함되어 있을 수 있습니다.

들어가기에 앞서

1.jpg (이미지 출처: https://www.blockchain.com/) 블록 체인 기술이 왜 화제가 되고, 매커니즘은 어떻게 되는지, 어떤 분야에 적용 가능 한지에 대해서 아래의 자료를 보시고 도움이 되었으면 좋겠습니다.

여담으로 최근 가상 화폐의 가치가 하루가 다르게 변하고 있습니다. 왜 올라가고 내려가는지에 대한 답을 드릴순 없지만 본인만의 답을 얻을 수 있는데 도움이 되리라 생각됩니다.

또한, 블록체인 기술은 비트코인 논문에서 최초 언급된 기술이기 때문에 대부분의 설명과 예시는 비트코인 중심입니다. 하지만, 다른 블록체인 기반 기술도 큰 틀에서 보면 블록체인을 베이스로, 사업 목적과 비트코인의 한계(단점)로 인해 수정하여 사용된다고 보시면 됩니다.

https://github.com/bitcoin/bitcoin 에 오픈소스로 비트코인 소스가 공개되어 있습니다.(MIT License)

1장에서는 블록체인의 활용분야를 간단히 설명하고, 2장과 3장에서는 블록 구조와 메커니즘에 대해 기술적인 설명이 되어 있습니다. 4장과 5장에는 한계점과 그 외에 참고 하실 내용들을 정리하였습니다.

일부 미흡하거나 잘못된 부분이 있을 수 있으며, 피드백을 주시면 수정하겠습니다.

감사합니다.

목차

  1. 블록체인의 활용
  2. 블록체인 개요 2-1 . 블록 체인 구조 2-2 . 블록 구조
  3. 블록체인(비트코인) 메커니즘 3-1 . 채굴 과정 3-2 . 거래 과정 3-3 . 검증 과정 3-4 . P2P 아키텍처
  4. 한계점
  5. 그 외 참고사항

요약

1. 블록체인의 활용

1.1 블록체인의 사례(Use case)

2.jpg (이미지 출처: https://www.abe-eba.eu/downloads/knowledge-and-research/EBA_20150511_EBA_Cryptotechnologies_a_major_IT_innovation_v1_0.pdf)

화폐(Currencies)

자산 등록(Asset Registry)

응용 플랫폼(Application Platform)

자산 중심(Assent Centric)

참고) 이더리움

1.2 Public vs Private 블록체인

퍼블릭 블록체인

프라이빗 블록체인

1.3 블록체인의 장,단점

장점

단점

1.4 은행 및 공공 서비스 적용의 어려움

1.5 해킹의 위험

1.6 세부 활용 분야

금융산업 분야

행정서비스 분야

계약 분야

IOT 분야

거래 수수료 및 POW의 활용

국내 현황 뉴스

(뉴스 스크랩, 세부 내용은 없음)

2. 블록체인(Blockchain)?

2.1 블록체인의 유래

2.2 블록체인의 정의

2.3 블록체인의 가치

2.4 블록체인 구조

비트코인의 블록체인 구조

5.jpg (이미지 출처: http://www.smallake.kr/)

2.5 블록의 구조

6.png

블록헤더

트랜잭션

2.6 블록 Rawdata

비트코인의 0번 블록 Rawdata

{   //블록 헤더
    "hash":"000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",                      // 식별값                    
    "ver":1,
    "prev_block":"0000000000000000000000000000000000000000000000000000000000000000",    // 이전 블록, 최상위 블락이기 때문에 0
    "mrkl_root":"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
    "time":1231006505,
    "bits":486604799,
    "fee":0,
    "nonce":2083236893,
    "n_tx":1,                                                               // 트랜잭션 수
    "size":285,                                                            // 블록 크기 0.285KB
    "block_index":14849,
    "main_chain":true,
    "height":0,                                                            // 체인 높이 0(첫 블록)
    "tx":[

{   // 트랜잭션 영역, 첫번째 트랜잭션
   "lock_time":0,
   "ver":1,
   "size":204,
   "inputs":[                                                               // 첫번째 거래는 채굴된 거래를 나타냄. Input의 기원이 없음.
      {                                                                          // 보통 거래는 Input - > Output의 연결고리이며, Input의 주소가 있음.
         "sequence":4294967295,
         "script":"04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73"
      }
   ],
   "time":1231006505,
   "tx_index":14849,
   "vin_sz":1,                                                                      //input 수
   "hash":"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
   "vout_sz":1,                                                                  //output 수
   "relayed_by":"0.0.0.0",
   "out":[
      {
         "addr_tag_link":"https:\/\/en.bitcoin.it\/wiki\/Genesis_block",
         "addr_tag":"Genesis of Bitcoin",
         "spent":false,
         "tx_index":14849,
         "type":0,
         "addr":"1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",           //비트코인 수신자 주소(공개키), 채굴된 비트코인은 채굴자의 주소로 기록됨. (output)
         "value":5,000,000,000,                                                         // 50BTC , 1BTC=100,000,000 Satoshi(1억 사토시)
         "n":0,
         "script":"4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac"
      }
   ]
}]
 }

1번 블록 (일부 생략)

"prev_block":"000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",    // 0번 블록의 Hash값.
"height":1,      // 높이가 +1 증가함.

80,000번 블록 (일부 생략)

"prev_block":"00000000001937917bd2caba204bb1aa530ec1de9d0f6736e5d85d96da9c8bba",  // 79,999블록의 해시
"n_tx":2,          // 두개의 트랜잭션이 포함됨
"height":80000,

{    // 첫번째 거래 (생략)
   
},

{   // 두번째 거래
   "lock_time":0,
   "ver":1,
   "size":158,
   "inputs":[
      {
         "sequence":4294967295,
         "prev_out":{
            "spent":true,
            "tx_index":135639,
            "type":0,
            "addr":"1JBSCVF6VM6QjFZyTnbpLjoCJTQEqVbepG",                        // 해당 주소(계좌)를 가진 사람이 50BTC를 ?로 전달(Output영역 확인)
            "value":5000000000,                                                                           // 50BTC
            "n":0,
            "script":"4104283338ffd784c198147f99aed2cc16709c90b1522e3b3637b312a6f9130e0eda7081e373a96d36be319710cd5c134aaffba81ff08650d7de8af332fe4d8cde20ac"
         },
         "script":"48304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d1090db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501"
      }
   ],
   "time":1284613427,
   "tx_index":135927,
   "vin_sz":1,
   "hash":"5a4ebf66822b0b2d56bd9dc64ece0bc38ee7844a23ff1d7320a88c5fdb2ad3e2",
   "vout_sz":1,
   "relayed_by":"0.0.0.0",
   "out":[
      {
         "spent":true,
         "tx_index":135927,
         "type":0,
         "addr":"16ro3Jptwo4asSevZnsRX6vfRS24TGE6uK",                   // 위의 Input 계좌 ->  Output 계좌로 50BTC가 전달됨
         "value":5000000000,
         "n":0,
         "script":"76a914404371705fa9bd789a2fcd52d2c580b65d35549d88ac"
      }
   ]
}]
 }

참고) 머클 루트(Merkle Root)와 머클 경로(Merkle Path)

7.png (이미지 출처: http://chimera.labs.oreilly.com/books/1234000001802/ch07.html#merkle_trees)

3. 블록체인 메커니즘

3.1 채굴(Mining) 과정

채굴 방법

(1) 블록헤더를 SHA256()연산, Nonce = 0

(2) SHA256() 결과 값 < 난이도 목표 값을 만족하는 블록헤더의 Nonce를 찾으면 성공.

(3) 채굴자는 인센티브를 받게되며 블록을 만들고 전파함.

(4) 다른 노드가 만든 블록이 입수되면 계산 중단하고 그 다음 블록을 만드는 계산에 착수.

난이도 조정

난이도 조정의 의미

POW(작업증명, Proof Of Work)

HashCash

채굴의 의미 : Nonce찾기 -> Hashcash 과정 -> POW(작업증명, Proof Of Work) -> 노력의 증거 -> 신뢰 -> 노력으로 얻은 화폐

비트코인의 수량의 제한

소모적인 작업이 필요한 이유

3.2 트랜잭션 과정

트랜잭션의 구조

트랜잭션 예시

(1) Transaction C에는 두개의 입력, 과거에 발행된 2개의 수표를 참조하는 링크가 있음.

(2) C는 150BTC를 사용할수 있는데, 이중 101 BTC를 D에게 주겠다는 수표가 Transaction C.

잔금, UXTO(Unspent Transaction Output)

UXTO Rawdata

{
    // 해당 주소의 UXTO를 보여줌
      "unspent_outputs":[
    
        {
            "tx_hash":"db95f3769d95257c353b345e8ee8a1052b6ac2a945ecb2784b88dca1bb3eeaee",
            "tx_hash_big_endian":"eeea3ebba1dc884b78b2ec45a9c26a2b05a1e88e5e343b357c25959d76f395db",
            "tx_index":52726616,
            "tx_output_n": 0,
            "script":"76a9145679a899dc210729cc845643fc998d4b61b4da7288ac",
            "value": 300000,                                                                                            // 모든 output의 합이 잔금이 됨
            "value_hex": "0493e0",
            "confirmations":179540
        },
      
        {
            "tx_hash":"0cd81aad3c67f0361a02b49195f38c707846e39a93771eab360c94c65891ec48",
            "tx_hash_big_endian":"48ec9158c6940c36ab1e77939ae34678708cf39591b4021a36f0673cad1ad80c",
            "tx_index":52734187,
            "tx_output_n": 0,
            "script":"76a9145679a899dc210729cc845643fc998d4b61b4da7288ac",
            "value": 3274715,                                                                                       // 모든 output의 합이 잔금이 됨
            "value_hex": "31f7db",
            "confirmations":179533
        },
      
    ]
}

고아 트랜잭션

코인베이스

3.3 검증 과정

3.3.1 독립된 검증

거래 전파

3.3.2 작업증명을 통한 블록 생성과 트랜잭션 추가

거래의 우선순위

거래 전파 직후 신뢰도

거래 신뢰도와 현실세계

안전한 거래 규모

12.jpg (이미지 출처: https://arxiv.org/pdf/1402.2009.pdf)

3.3.3 - 새 블록 검증

3.3.4 - 블록 선택

동시에 여러 노드가 채굴에 성공하는 경우(=블록 분기)

블록 분기 예시

블록 생성주기가 10분인 이유

블록의 확산 요인과 절차

3.4 P2P 아키텍처

P2P의 장점

P2P 상의 노드의 종류

15.png (이미지 출처: http://chimera.labs.oreilly.com/books/1234000001802/ch06.html#_the_extended_bitcoin_network)

비트코인의 노드가 되기 위한 과정

(1) 최초 노드 검색시 SeedNode를 통해서 이웃노드와 연결(클라이언트에 오랫동안 잘 유지된 SeedNode List존재)

(2) 하나 이상 연결이 성립되면 이웃들에게 노드 주소를 전달하여 모두 연결되게함.

SPV노드의 취약점

SPV에서 머클트리와 블룸필터를 사용하여 거래 검증

참고) 블룸 필터

16.png (이미지 출처: https://ko.wikipedia.org/wiki/블룸_필터)

4. 위협 및 한계

5. 그 외 참고사항

5.1 비트코인 개인키 생성 과정

17.png (이미지 출처: http://chimera.labs.oreilly.com/books/1234000001802/ch04.html#_public_key_cryptography_and_cryptocurrency)

5.2 51% 공격

5.3 채굴과 해싱 경쟁

5.4 난스(카운터) 값의 고갈

비상 경보 방송 시스템

퍼블릭, 프라이빗 블록체인의 운영

관련 사례와 시사점 정리, NIA

그 외 관련 용어

비트코인 지갑

하드 포크 vs 소프트 포크

스크립트