Cryptography & Cryptocurrencies
채굴 = 퍼즐 풀기 = hash 함수 계산
* high min-entropy
: 특정 value가 더 많이 선택되는 등 하지않고 통계 분포가 고름.
Hash pointers
: 어디에 정보(data)가 저장되어있는지 가리킴 + cryptographic hash 정보도 같이 저장되어있음.
-> 정보 위치 알아낼 수 있음 + hash pointer가 가리키는 곳의 정보 변경 detect 가능.(integrity)
* Tamper-evident log (조작 가해짐-드러남 저장장소)
: data 조작하면 다음 block의 hash pointer가 incorrect하게되므로 조작을 detect할 수 있음.
Merkle Tree
Digital signature scheme
* sk : private(secret) key. 서명하는 데 사용. 주로 256bits
* pk : public key. 서명 검증하는 데 사용. 주로 512bits
- (sk, pk) := generateKeys( keysize )
- sig := sign( sk, message )
- isValid := verify( pk, message, sig ) boolean(T/F)값 리턴 함.
=> verify ( pk , message , sign ( sk , message )) == true 이면 valid signature!
pk와 sk가 쌍이되고 앞의 message와 뒤의 message가 일치해야 true임.
서명은 위조 불가능! (private key를 알아야 verify 통과 가능)
ECDSA
: Elliptic Curve Digital Signature Algorithm (ECC 서명 검증)
“secp256k1”라는 특정한 타원 곡선 사용.
- Private key: 256 bits
- Public key: 512 bits
- Message to be signed: 256 bits (SHA-256 applied before signing) 즉, h(M)에 대해 서명함.
- Signature: 512 bits
=> public key(에 hash적용한 값)를 identity(주소)로 사용함.
Bitcoin Transactions
- account-based ledger
: 은행 계좌 잔고 체크 방법
- transaction-based ledger
: 비트코인에서 사용하는 방법!
SK로 서명 -> 채굴자가 PK로 검증(invalid한 transaction 포함한 block은 인정되지 않음.)
* bitcoin은 wallet에 있는 게 아니라 block chain의 특정한 address에 있는거임.
어떤 주소로 bitcoin을 보냈다는 transaction이 longest chain상의 block에 포함되어 있음.
wallet은 특정한 address에 접근해서 bitcoin 가져올 수 있는 SK를 가지고 있는거임.
UTXO based model
: Unspent Transaction Output
소비되지않은 transaction output을 claim("이 주소의 이 bitcoin은 내 소유야!") 할 수 있음.
Bitcoin 블록체인 상에는 주소(계좌)의 잔액은 기록되어있지 않음.
네트워크의 transaction을 따라가며 계산해야 함.
Transaction syntax
metadata의 hash가 ID로 사용됨.
input / output은 꼭 1개일 필요는 없음.
input은 이전 트랜잭션의 결과(Unspent Transaction Outputdp 포함되어 있는 bitcoin)를
claim(내가 가져다 쓰겠다)하는 게 목적임.
output은 input으로 가져온 트랜잭션을 어디에 소비할건지 지정함.
(sum of all output values ≤ sum of all input values)
: 차액은 transaction fee
Bitcoin Scripts
<sig>는 ①을 claim해서 사용하려는 주체가 ②에서 만듦.
그 주체는 ①output address를 만들 때 사용한 public key와 쌍이되는 private key를 가지고 있음.
그 private key로 서명을 만듦. (①, ②에 대한 서명)
Bitcoin Blocks
- transaction모아서 chain of block을 만드는 이유?
: block 대비 transaction수가 더 많아서 transaction은 consensus 힘듦.
좀 더 수월하게 합의 이루기 위해 다량의 transaction 모아서 block 만들어서 block by block 합의 함.
Coinbase transaction
- merkle tree에서 left most leaf node
- new coin이 만들어지는 transaction (기존에 없던 거 새로 생김.)
- single input(인풋은 의미 없음. NULL값), single output(채굴자가 block reward받기 원하는 주소)
- input이 이전 output을 clain(redeem)해주는 게 아님. 그냥 null hash pointer임.
- 4년에 한 번씩 보상이 절반으로 줄어듦. 50btc에서 시작해서 지금은 6.25btc (+transaction fee)
- 채굴자는 임의의 값인 coinbase parameter를 넣을 수 있음. (+ 채굴 보상 받을 주소)
비트코인 사용법
- bitcoin wallet
내부에서는 ...
'CS > 3-2 블록체인' 카테고리의 다른 글
[블록체인] 06. Mechanics of Bitcoin - Mining (0) | 2022.10.22 |
---|---|
[블록체인] 05. Mechanics of Bitcoin - Distributed Consensus (0) | 2022.10.22 |
[블록체인] 03. Cryptography for Blockchains (4) | 2022.10.13 |
[블록체인] 02. How does Bitcoin Work? (0) | 2022.10.11 |
[블록체인] 01. Bitcoin and Blockchain - History and Motivation (0) | 2022.10.11 |
댓글