15. BlockchainDecentralizestheworld
전 세계에 퍼져 있는 수많은 노드에
동일한 거래 내역이 복제
일부에서 장애가 나거나
공격을 당하더라도
전체는 살아있다.
블록체인은
거대한 공개 복제 장부다
출처: http://www.indiabitcoin.com/ibm-blockchain/
15
34. BlockchainDecentralizestheworld
Block #2 (00006c3ed…)
작업 증명(Proof of Work)
거래 정보
…
블록 헤더
Version:
PreviousHash: 0x0000a28d7
MerkleHash:
Time:
Bits:
Nonce: ?
기타 정보
34
블록 해쉬가 특정 값(ex: 000098acee…)보다
작은 값이 나오면 작업 증명 성공
000098acee…라는 값은 난이도에 의해 정해진다.
비트코인은 평균 21,600분을 주기로 난이도 조정
36. BlockchainDecentralizestheworld
Block #2 (00006c3ed…)
작업 증명(Proof of Work)
블록 해쉬는 블록 헤더를 해쉬 함수로 계산한 값
거래 정보
…
블록 헤더
Version: 이미 정해짐
PreviousHash: 0x0000a28d7
MerkleHash: 이미 정해짐
Time: 이미 정해짐
Bits: 이미 정해짐
Nonce: ?
기타 정보
36
블록 헤더 정보 중에서
Nonce 외의 값은
이미 정해져 있다.
37. BlockchainDecentralizestheworld
Block #2 (00006c3ed…)
작업 증명(Proof of Work)
블록 해쉬는 블록 헤더를 해쉬 함수로 계산한 값
거래 정보
…
블록 헤더
Version: 이미 정해짐
PreviousHash: 0x0000a28d7
MerkleHash: 이미 정해짐
Time: 이미 정해짐
Bits: 이미 정해짐
Nonce: ?
기타 정보
37
어떤 조건을 충족하는
블록 해쉬 값을 찾으려면
38. BlockchainDecentralizestheworld
Block #2 (00006c3ed…)
작업 증명(Proof of Work)
블록 해쉬는 블록 헤더를 해쉬 함수로 계산한 값
거래 정보
…
블록 헤더
Version: 이미 정해짐
PreviousHash: 0x0000a28d7
MerkleHash: 이미 정해짐
Time: 이미 정해짐
Bits: 이미 정해짐
Nonce: ?
기타 정보
38
Nonce값을 바꿔가면서
블록 해쉬 계산을
반복하는 수 밖에 없다.
39. BlockchainDecentralizestheworld
Block #2 (00006c3ed…)
작업 증명(Proof of Work)
블록 해쉬는 블록 헤더를 해쉬 함수로 계산한 값
거래 정보
…
블록 헤더
Version: 이미 정해짐
PreviousHash: 0x0000a28d7
MerkleHash: 이미 정해짐
Time: 이미 정해짐
Bits: 이미 정해짐
Nonce: ?
기타 정보
39
왜?
해쉬 브라운에서
감자를 구할 수는 없으니까
43. BlockchainDecentralizestheworld
작업 증명(Proof of Work)
블록 헤더
소프트웨어
버전
앞 블록의
블록 해쉬
머클해쉬
블록 생성
시각
채굴 난이도
Nonce
0
블록 해쉬
Fa8cba3ee…
932d16e2f…
03a33f7dd…
1
2
SHA256
SHA256
SHA256
43
> 000098acee…
44. BlockchainDecentralizestheworld
작업 증명(Proof of Work)
블록 헤더
소프트웨어
버전
앞 블록의
블록 해쉬
머클해쉬
블록 생성
시각
채굴 난이도
Nonce
0
블록 해쉬
Fa8cba3ee…
932d16e2f…
03a33f7dd…
00006c3ed…
1
2
4,028,453,123
…
SHA256
SHA256
SHA256
SHA256 심봤다!!
…
44
< 000098acee…
45. BlockchainDecentralizestheworld
Block #2 (00006c3ed…)
거래 정보
…
블록 헤더
Version:
PreviousHash: 0x0000a28d7
MerkleHash:
Time:
Bits:
Nonce: 4,028,453,123
기타 정보
이렇게 0부터 1씩 더해가며 힘들게 구한
Nonce값이
4,028,453,123
그 때의 블록 해쉬 값이
00006c3ed…
작업 증명(Proof of Work)
45
47. BlockchainDecentralizestheworld
Block #2 (00006c3ed…)
작업 증명(Proof of Work)
거래 정보
…
블록 헤더
Version:
PreviousHash: 0x0000a28d7
MerkleHash:
Time:
Bits:
Nonce: ?
기타 정보
47
블록 해쉬가 특정 값(ex: 000098acee…)보다
작은 값이 나오면 작업 증명 성공
블록 해쉬가 특정 값(ex: 000098acee…)보다
작은 값이 나오게 하는
Nonce 값을 찾으면 작업 증명 성공
48. BlockchainDecentralizestheworld
Block #2 (00006c3ed…)
작업 증명(Proof of Work)
거래 정보
…
블록 헤더
Version:
PreviousHash: 0x0000a28d7
MerkleHash:
Time:
Bits:
Nonce: ?
기타 정보
48
블록 해쉬가 특정 값(ex: 000098acee…)보다
작은 값이 나오게 하는
Nonce 값을 찾으면 작업 증명 성공
조건을 충족하는 Nonce 값이
하나만 존재하는 것은 아님
49. BlockchainDecentralizestheworld
Block #2 (00006c3ed…)
작업 증명(Proof of Work)
거래 정보
…
블록 헤더
Version:
PreviousHash: 0x0000a28d7
MerkleHash:
Time:
Bits:
Nonce: ?
기타 정보
49
예를 들어,
Nonce가 3일때 블록 해쉬가 000037dcf이면
000098acee…보다 작으므로 성공
Nonce가 328,427일때 블록 해쉬가 00001a8bb이면
000098acee…보다 작으므로 성공
50. BlockchainDecentralizestheworld
Block #2 (00006c3ed…)
거래 정보
…
블록 헤더
Version:
PreviousHash: 0x0000a28d7
MerkleHash:
Time:
Bits:
Nonce: 4,028,453,123
기타 정보
작업 증명이 완료되면
블록에 포함된 모든 거래가
유효한 거래로 확정되며
마침내 하나의 블록이 완성
작업 증명(Proof of Work)
50
53. BlockchainDecentralizestheworld
Block #2 (00006c3ed…)
거래 정보
…
블록 헤더
Version:
PreviousHash: 0x0000a28d7
MerkleHash:
Time:
Bits:
Nonce: 4,028,453,123
기타 정보
위/변조 방지에 큰 역할
블록의 유효성 판단에 효율적
Nonce를 구할 때는 많은 계산이 필요하지만,
구해진 Nonce로 해당 블록의 블록 해쉬가
정말로 특정 값 이하인지 검증하는 것은 금방
작업 증명(Proof of Work)
53
55. BlockchainDecentralizestheworld
Block #2 (00006c3ed…)
거래 정보
…
블록 헤더
Version:
PreviousHash: 0x0000a28d7
MerkleHash:
Time:
Bits:
Nonce: 4,028,453,123
기타 정보
자신의 노력을 투입해서
곡괭이질(작업 증명)로 블록을 채굴(생성)하고
블록에 포함된 거래를
유효한 거래로 확정해준 대가와
거래의 수수료를 받는 일
채굴(Mining)
55
58. BlockchainDecentralizestheworld
블록체인(BlockChain)
블록 해쉬 값을 기준으로 블록이 체인처럼
연쇄적으로 이어진 것
Block #0 (000035bf1)
블록 헤더
Version:
PreviousHash: 0
MerkleHash:
Time:
Bits:
Nonce: 2,273,652,568
거래 정보
0-0 채굴자에게 50 BTC 전송
기타 정보
Block #1 (0000a28d7)
블록 헤더
Version:
PreviousHash: 000035bf1
MerkleHash:
Time:
Bits:
Nonce: 378,915
거래 정보
1-0 채굴자에게 50 BTC 전송
1-1 A가 E에게 0.5 BTC 전송
1-2 D가 B에게 2.2 BTC 전송
…
기타 정보
Block #2 (00006c3ed)
블록 헤더
Version:
PreviousHash: 0000a28d7
MerkleHash:
Time:
Bits:
Nonce: 4,028,453,123
거래 정보
2-0 채굴자에게 50 BTC 전송
2-1 F가 C에게 1.8 BTC 전송
2-2 H가 C에게 0.2 BTC 전송
…
기타 정보
…
58
60. BlockchainDecentralizestheworld
블록체인 충돌
그림 출처: Mastering Bitcoin
- http://orm-chimera-prod.s3.amazonaws.com/1234000001802/images/msbt_0804.png
캐나다(빨간색)와 호주(초록색)에서
동시에 블록 생성 성공 후
각각 파란색 블록 다음에 추가한 후 전파
60
61. BlockchainDecentralizestheworld
블록체인 충돌
그림 출처: Mastering Bitcoin
- http://orm-chimera-prod.s3.amazonaws.com/1234000001802/images/msbt_0805.png
러시아가 블록(분홍색) 생성 후
호주 생성 블록(초록색) 뒤에 추가 후 전파
61
62. BlockchainDecentralizestheworld
블록체인 충돌
그림 출처: Mastering Bitcoin
- http://orm-chimera-prod.s3.amazonaws.com/1234000001802/images/msbt_0805.png
파란 블록 뒤에 빨간색 블록만 있던 캐나다에
초록색, 분홍색이 추가된 블록 전달되며 충돌
62
63. BlockchainDecentralizestheworld
블록체인 충돌 해소
그림 출처: Mastering Bitcoin
- http://orm-chimera-prod.s3.amazonaws.com/1234000001802/images/msbt_0805.png
더 많은 작업 증명이 수행된 쪽
즉 길이가 더 긴 체인이 우선 채택
63
70. BlockchainDecentralizestheworld
이중 지불 실행
그림 출처: Mastering Bitcoin
- http://orm-chimera-prod.s3.amazonaws.com/1234000001802/images/msbt_0804.png
캐나다에서 아버지께 5만원 드리고
동시에 호주에서 어머니께 5만원 드리고
70
72. BlockchainDecentralizestheworld
이중 지불 해소
그림 출처: Mastering Bitcoin
- http://orm-chimera-prod.s3.amazonaws.com/1234000001802/images/msbt_0804.png
둘 중 조금이라도 늦게 도착한 거래는
잔액이 없는 상태에서의 지불이 되므로
무효 처리
72
74. BlockchainDecentralizestheworld
블록(Block)
머클 해쉬: 거래 정보를 해쉬 함수로 계산한 값
Block #1 (0000a28d7)
블록 헤더
Version:
PreviousHash: 000035bf1
MerkleHash: 8ed13f62a
Time:
Bits:
Nonce: 378,915
거래 정보
1-0 채굴자에게 50 BTC 전송
1-1 A가 E에게 0.5 BTC 전송
1-2 D가 B에게 2.2 BTC 전송
…
기타 정보
SHA256(거래 정보)
= 8ed13f62a
74
75. BlockchainDecentralizestheworld
Block #1 (0000a28d7)
블록 헤더
Version:
PreviousHash: 000035bf1
MerkleHash: 8ed13f62a
Time:
Bits:
Nonce: 378,915
거래 정보
1-0 채굴자에게 50 BTC 전송
1-1 A가 E에게 0.5 BTC 전송
1-2 D가 B에게 2.2 BTC 전송
…
기타 정보
변조
거래 정보 변경
Block #1 (0000a28d7)
블록 헤더
Version:
PreviousHash: 000035bf1
MerkleHash: 8ed13f62a
Time:
Bits:
Nonce: 378,915
거래 정보
1-0 채굴자에게 50 BTC 전송
1-1 A가 E에게 1.5 BTC 전송
1-2 D가 B에게 2.2 BTC 전송
…
기타 정보
75
76. BlockchainDecentralizestheworld
변조
거래 정보 변경 머클 해쉬 변경
Block #1 (0000a28d7)
블록 헤더
Version:
PreviousHash: 000035bf1
MerkleHash: 8ed13f62a
Time:
Bits:
Nonce: 378,915
거래 정보
1-0 채굴자에게 50 BTC 전송
1-1 A가 E에게 0.5 BTC 전송
1-2 D가 B에게 2.2 BTC 전송
…
기타 정보
Block #1 (0000a28d7)
블록 헤더
Version:
PreviousHash: 000035bf1
MerkleHash: 37dfca1e2
Time:
Bits:
Nonce: 378,915
거래 정보
1-0 채굴자에게 50 BTC 전송
1-1 A가 E에게 1.5 BTC 전송
1-2 D가 B에게 2.2 BTC 전송
…
기타 정보
76
77. BlockchainDecentralizestheworld
변조
거래 정보 변경 머클 해쉬 변경 블록 해쉬 변경
Block #1 (0000a28d7)
블록 헤더
Version:
PreviousHash: 000035bf1
MerkleHash: 8ed13f62a
Time:
Bits:
Nonce: 378,915
거래 정보
1-0 채굴자에게 50 BTC 전송
1-1 A가 E에게 0.5 BTC 전송
1-2 D가 B에게 2.2 BTC 전송
…
기타 정보
Block #1 (00009afa2)
블록 헤더
Version:
PreviousHash: 000035bf1
MerkleHash: 37dfca1e2
Time:
Bits:
Nonce: 3,738,025,294
거래 정보
1-0 채굴자에게 50 BTC 전송
1-1 A가 E에게 1.5 BTC 전송
1-2 D가 B에게 2.2 BTC 전송
…
기타 정보
77
78. BlockchainDecentralizestheworld
Block #1 (0000a28d7)
블록 헤더
Version:
PreviousHash: 000035bf1
MerkleHash: 8ed13f62a
Time:
Bits:
Nonce: 378,915
거래 정보
1-0 채굴자에게 50 BTC 전송
1-1 A가 E에게 0.5 BTC 전송
1-2 D가 B에게 2.2 BTC 전송
…
기타 정보
Block #1 (00009afa2)
블록 헤더
Version:
PreviousHash: 000035bf1
MerkleHash: 37dfca1e2
Time:
Bits:
Nonce: 3,738,025,294
거래 정보
1-0 채굴자에게 50 BTC 전송
1-1 A가 E에게 1.5 BTC 전송
1-2 D가 B에게 2.2 BTC 전송
…
기타 정보
변조
거래 정보를 변경하면
작업 증명을 다시 해야 된다.
작업 증명에는 시간이 걸린다.
78
79. BlockchainDecentralizestheworld
변조 전 블록체인
블록 해쉬 값을 기준으로 블록이 체인처럼
연쇄적으로 이어진 것
…
Block #0 (000035bf1)
블록 헤더
Version:
PreviousHash: 0
MerkleHash: f174d2ee5
Time:
Bits:
Nonce: 2,273,652,568
거래 정보
0-0 채굴자에게 50 BTC 전송
기타 정보
Block #1 (0000a28d7)
블록 헤더
Version:
PreviousHash: 000035bf1
MerkleHash: 8ed13f62a
Time:
Bits:
Nonce: 378,915
거래 정보
1-0 채굴자에게 50 BTC 전송
1-1 A가 E에게 0.5 BTC 전송
1-2 D가 B에게 2.2 BTC 전송
…
기타 정보
Block #2 (00006c3ed)
블록 헤더
Version:
PreviousHash: 0000a28d7
MerkleHash: cd73b3fa4
Time:
Bits:
Nonce: 4,028,453,123
거래 정보
2-0 채굴자에게 50 BTC 전송
2-1 F가 C에게 1.8 BTC 전송
2-2 H가 C에게 0.2 BTC 전송
…
기타 정보
79
80. BlockchainDecentralizestheworld
…
Block #0 (000035bf1)
블록 헤더
Version:
PreviousHash: 0
MerkleHash: f174d2ee5
Time:
Bits:
Nonce: 2,273,652,568
거래 정보
0-0 채굴자에게 50 BTC 전송
기타 정보
Block #2 (00006c3ed)
블록 헤더
Version:
PreviousHash: 0000a28d7
MerkleHash: cd73b3fa4
Time:
Bits:
Nonce: 4,028,453,123
거래 정보
2-0 채굴자에게 50 BTC 전송
2-1 F가 C에게 1.8 BTC 전송
2-2 H가 C에게 0.2 BTC 전송
…
기타 정보
블록체인의 변조
Block #1 (00009afa2)
블록 헤더
Version:
PreviousHash: 000035bf1
MerkleHash: 37dfca1e2
Time:
Bits:
Nonce: 3,738,025,294
거래 정보
1-0 채굴자에게 50 BTC 전송
1-1 A가 E에게 1.5 BTC 전송
1-2 D가 B에게 2.2 BTC 전송
…
기타 정보
Block #1의 블록 해쉬 값 ≠
Block #2에 저장된 Block #1의 블록 해쉬 값
80
81. BlockchainDecentralizestheworld
…
Block #0 (000035bf1)
블록 헤더
Version:
PreviousHash: 0
MerkleHash: f174d2ee5
Time:
Bits:
Nonce: 2,273,652,568
거래 정보
0-0 채굴자에게 50 BTC 전송
기타 정보
Block #2 (00006c3ed)
블록 헤더
Version:
PreviousHash: 0000a28d7
MerkleHash: cd73b3fa4
Time:
Bits:
Nonce: 4,028,453,123
거래 정보
2-0 채굴자에게 50 BTC 전송
2-1 F가 C에게 1.8 BTC 전송
2-2 H가 C에게 0.2 BTC 전송
…
기타 정보
Block #1 (00009afa2)
블록 헤더
Version:
PreviousHash: 000035bf1
MerkleHash: 37dfca1e2
Time:
Bits:
Nonce: 3,738,025,294
거래 정보
1-0 채굴자에게 50 BTC 전송
1-1 A가 E에게 1.5 BTC 전송
1-2 D가 B에게 2.2 BTC 전송
…
기타 정보
블록체인의 변조
Block #1의 블록 해쉬 값 ≠
Block #2에 저장된 Block #1의 블록 해쉬 값
그럼 Block #2의 작업 증명도 다시 하고,
그럼 Block #3의 작업 증명도 다시 하고,
…
81
82. BlockchainDecentralizestheworld
…
Block #0 (000035bf1)
블록 헤더
Version:
PreviousHash: 0
MerkleHash: f174d2ee5
Time:
Bits:
Nonce: 2,273,652,568
거래 정보
0-0 채굴자에게 50 BTC 전송
기타 정보
Block #2 (00006c3ed)
블록 헤더
Version:
PreviousHash: 0000a28d7
MerkleHash: cd73b3fa4
Time:
Bits:
Nonce: 4,028,453,123
거래 정보
2-0 채굴자에게 50 BTC 전송
2-1 F가 C에게 1.8 BTC 전송
2-2 H가 C에게 0.2 BTC 전송
…
기타 정보
Block #1 (00009afa2)
블록 헤더
Version:
PreviousHash: 000035bf1
MerkleHash: 37dfca1e2
Time:
Bits:
Nonce: 3,738,025,294
거래 정보
1-0 채굴자에게 50 BTC 전송
1-1 A가 E에게 1.5 BTC 전송
1-2 D가 B에게 2.2 BTC 전송
…
기타 정보
블록체인의 변조
그럼 Block #2의 작업 증명도 다시 하고,
그럼 Block #3의 작업 증명도 다시 하고,
…
그 동안 변조되지 않은 원래 블록체인에는
멈추지 않고 블록이 계속 이어지므로,
변조된 블록체인의 길이보다 길어진다.
82
83. BlockchainDecentralizestheworld
…
Block #0 (000035bf1)
블록 헤더
Version:
PreviousHash: 0
MerkleHash: f174d2ee5
Time:
Bits:
Nonce: 2,273,652,568
거래 정보
0-0 채굴자에게 50 BTC 전송
기타 정보
Block #2 (00006c3ed)
블록 헤더
Version:
PreviousHash: 0000a28d7
MerkleHash: cd73b3fa4
Time:
Bits:
Nonce: 4,028,453,123
거래 정보
2-0 채굴자에게 50 BTC 전송
2-1 F가 C에게 1.8 BTC 전송
2-2 H가 C에게 0.2 BTC 전송
…
기타 정보
Block #1 (00009afa2)
블록 헤더
Version:
PreviousHash: 000035bf1
MerkleHash: 37dfca1e2
Time:
Bits:
Nonce: 3,738,025,294
거래 정보
1-0 채굴자에게 50 BTC 전송
1-1 A가 E에게 1.5 BTC 전송
1-2 D가 B에게 2.2 BTC 전송
…
기타 정보
블록체인의 변조
그 동안 변조되지 않은 원래 블록체인에는
멈추지 않고 블록이 계속 이어지므로,
변조된 블록체인의 길이보다 길어진다.
변조된 블록체인을 블록체인 네트워크에 퍼뜨려봤자
원래 블록체인보다 길이가 짧으므로
변조된 블록체인은 채택되지 않고 버려진다.
83
84. BlockchainDecentralizestheworld
…
Block #0 (000035bf1)
블록 헤더
Version:
PreviousHash: 0
MerkleHash: f174d2ee5
Time:
Bits:
Nonce: 2,273,652,568
거래 정보
0-0 채굴자에게 50 BTC 전송
기타 정보
Block #2 (00006c3ed)
블록 헤더
Version:
PreviousHash: 0000a28d7
MerkleHash: cd73b3fa4
Time:
Bits:
Nonce: 4,028,453,123
거래 정보
2-0 채굴자에게 50 BTC 전송
2-1 F가 C에게 1.8 BTC 전송
2-2 H가 C에게 0.2 BTC 전송
…
기타 정보
블록체인의 변조
Block #1 (00009afa2)
블록 헤더
Version:
PreviousHash: 000035bf1
MerkleHash: 37a5dd196
Time:
Bits:
Nonce: 3,738,025,294
거래 정보
1-0 채굴자에게 50 BTC 전송
1-1 A가 E에게 1.5 BTC 전송
1-2 D가 B에게 2.2 BTC 전송
…
기타 정보
변조하는 쪽이 해쉬 계산 능력이 더 좋아서
원래 블록체인보다 더 빨리 블록을 추가하고
결국 원래 블록체인보다 길이가 더 길어진다면?
☞ 51% Attack
84
85. BlockchainDecentralizestheworld
…
Block #0 (000035bf1)
블록 헤더
Version:
PreviousHash: 0
MerkleHash: f174d2ee5
Time:
Bits:
Nonce: 2,273,652,568
거래 정보
0-0 채굴자에게 50 BTC 전송
기타 정보
Block #2 (00006c3ed)
블록 헤더
Version:
PreviousHash: 0000a28d7
MerkleHash: cd73b3fa4
Time:
Bits:
Nonce: 4,028,453,123
거래 정보
2-0 채굴자에게 50 BTC 전송
2-1 F가 C에게 1.8 BTC 전송
2-2 H가 C에게 0.2 BTC 전송
…
기타 정보
블록체인의 변조
Block #1 (00009afa2)
블록 헤더
Version:
PreviousHash: 000035bf1
MerkleHash: 37a5dd196
Time:
Bits:
Nonce: 3,738,025,294
거래 정보
1-0 채굴자에게 50 BTC 전송
1-1 A가 E에게 1.5 BTC 전송
1-2 D가 B에게 2.2 BTC 전송
…
기타 정보
경제적인 관점에서 보면 실행될 가능성이 사실 상 없다.
변조로 블록체인의 신뢰가 붕괴되면,
채굴에 따른 보상 가치가 폭락한다.
채굴로 얻을 수 있는 기대수익이 소멸되므로
변조를 시도한 쪽(해쉬 계산 능력이 큰 쪽)이
가장 많은 피해를 본다.
85
88. BlockchainDecentralizestheworld
생각해 볼 거리
88
현재 비트코인 채굴에 사용되는 전기량은
슬로바키아 1년 전기 사용량과 비슷
세계 전기 사용량의 0.13% 차지
연간 채굴에 사용되는 비용: $1,423,794,674
출처: https://digiconomist.net/bitcoin-energy-consumption
89. BlockchainDecentralizestheworld
다른 분산 원장 기술
89
다른 알고리듬
- Proof of Stake: 이더리움(캐스퍼)
- Delegated PoS: EOS
- Byzantine Fault Tolerance: BOScoin
다른 자료구조
- Directed Acyclic Graph: IOTA, HashGraph