본문 바로가기
Archive/비트코인 & 블록체인

[비트코인/블록체인] 비트코인 기본 개념 정리

by 우창욱 2024. 5. 19.

용어

이중지불 (Double-Spending)

- 온라인 상에서는 이메일을 한 사람에게 여러번 보낼 수 있다. 일반적인 상황에서는 크게 문제가 없지만, 온라인 상에서 p2p 거래를 할 때 문제가 된다.

- 내가 돈을 보냈다고 알려주어도, 이것이 실제로 돈을 보냈다는 것을 보증할 수 없다.

- 현재 온라인 거래 시스템은 제3자가 보증해주는 에스크로 형태로 구현되어 있다. 즉, 은행과 같은 중앙집중화 된 데이터베이스에서 사용자들 간의 거래를 인증하는 식으로 온라인 거래를 구현하였다.

- p2p(peer to peer)를 통해 탈중앙화된 거래 방식을 꿈꾸며 비트코인을 개발한 일군의 개발자들은, 이를 네트워크 상에 분산되어있는 노드들을 사용해서 거래를 증명하는 식으로 구현하였다.

- 노드(node)들은 비트코인 거래 내역들에 대한 기록들인 블록(Block)이 연결되어있는 블록체인(BlockChain) 정보들을 가지고 있는 컴퓨터를 의미함. 처음 비트코인이 채굴되어 트랜잭션(Transaction)이 생성된 제네시스 블록으로부터 현재까지의 거래를 가지고 있는 노드를 풀노드(full-node)라고 함.

- 비트코인은 작업증명(Proof Of Work, POW)을 사용하여 트랜잭션(거래내역)을 기록할 수 있는 컴퓨터(채굴자)를 선정함. 기록된 트랜잭션은 모든 노드들에 전파되며 이 트랜잭션들이 모여 하나의 블록을 이룸. 모든 분산된 노드들은 같은 블록체인 히스토리를 가짐.

- 이 방식을 사용해서 블록체인 p2p 거래의 이중지불 문제를 해결할 수 있음. 네트워크의 모든 노드들이 각 트랜잭션을 검증하고, 하나의 블록체인 히스토리를 공유함으로써 같은 돈을 두 번 사용하는 것을 방지함.

 

가장 긴 체인 (The Longest-chain)

- 트랜잭션이 발생하면 이를 블록체인 장부에 기록할 수 있는 채굴자에게 보상이 주어지기 때문에, 채굴자들 간에 먼저 거래를 기록하려는 경쟁이 발생함.

- 채굴자들은 가장 긴 체인을 가지고 있는 노드의 기록을 따라가게 됨. 여기서 '가장 긴 체인'은 가장 많은 작업증명이 이루어진 체인을 의미함.

- 그러나 가장 긴 체인이 하나의 노드에만 있지 않으므로 채굴자들은 각 노드들의 기록으로 분산되어 경쟁을 이어가게 됨. 이를 포크(fork)라고 함.

- 포크는 블록체인이 일시적으로 두 개 이상의 갈래로 나뉘는 현상을 말함.

- 최종적으로 가장 긴 체인이 거래의 최신 정보이므로 분산되어 경쟁을 이어가던 채굴자들은 가장 긴 체인으로 옮겨가게 되고 다음 트랜잭션의 채굴 보상을 위해 경쟁을 이어가게 됨.

- 이는 블록체인 네트워크가 일관된 상태를 유지하도록 하는 메커니즘임.

 

공개키, 공개주소, 개인키

- 비트코인 개인키 주소체계는 256비트 숫자로 이루어짐. 이는 2^256로, 우주의 원소의 개수(약, 10^80개)와 비슷한 숫자임.

- 즉 임의로 생성된 개인키 주소를 찾는것은 불가능하다고 할 수 있음.

- 비트코인 공개키는 타원곡선 디지털 서명 알고리즘인, ECDSA(Elliptic Curve Digital Signature Algorithm) 알고리즘을 사용해서 계산됨. 

- 비트코인은 ECDSA 중에서 secp256k1라는 타원곡선 알고리즘을 사용함. 식은 다음과 같음

- y^2 = x^3 + x +7

- 공개키는 아래 공식을 사용해서 계산됨

- P(공개키) = d(비밀키) * G(기저점)

- 비트코인 타원곡선 알고리즘의 기저점은 공개되어 있음. 

- Gx = 79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798

- Gy = 483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8

- 비트코인 개인키가 유일하기 때문에, 공개키도 유일함

 

- 일반적으로, 공개키는 SHA-256 해시 함수와 RIPEMD-160 해시 함수를 사용하여 공개주소를 계산함.

- 이 해싱된 결과를 Base58Check 인코딩하여 P2PKH 주소를 생성함.

- P2PKH는 Pay-to-PubKey-Hash의 약자로, 공개키 해시로 지불하는 주소 형식을 의미함.

- P2SH는 Pay-to-Script-Hash의 약자로, 스크립트 해시로 지불하는 주소 형식을 의미함.

- Bech32는 SegWit (Segregated Witness) 주소 형식으로, 보다 향상된 에러 검출 능력을 가진 새로운 주소 형식.

- 공개키를 해싱알고리즘(P2PKH, P2SH, Bech32)을 사용해서 계산한 것이 공개주소임.

 

UTXO (Unspent Transaction Outputs)

- 비트코인의 트랜잭션은 Input과 Output으로 구성된다. Input은 이전 트랜잭션의 Output을 참조한다.

- Output 중에서 다른 트랜잭션의 Input으로 사용되지 않은 비트코인을 UTXO라고 한다. 

- 정확한 설명은 아니지만 이해하기 쉽게 표현하면 UTXO는 정지해있는 비트코인이다. 

- 정지 상태: 현재 거래에 사용되지 않고 특정 주소에 남아있는 상태를 의미한다.

- 다음 거래에 입력으로 사용될 수 있는 상태이다.

- 비트코인의 잔액은 특정 주소가 가지고 있는 모든 UTXO의 합이다.

 

UTXO 예제 1) 현재 10BTC가 들어있는 개인지갑이 있다. 이 때 이 개인지갑으로 0.0001BTC를 송금하면, 어떤 일이 발생하는가?

 

UTXO 예제 2) 현재 개인지갑 C에는 두 개의 UTXO가 있습니다:

  • UTXO1: 5 BTC
  • UTXO2: 3 BTC

이 때, 다른 개인지갑으로 6 BTC를 송금하려고 합니다. 그리고 트랜잭션 수수료는 0.0005 BTC입니다. 어떤일이 발생하는가?