비트코인의 등장배경!
2007 ~ 2008년 세계 금융위기때 기존 금융 체계에 대한 불신이 확대 되며 비트코인이 나오게 되었다.
기존 금융 시스템의 문제는 다음과 같다.
- 물리적인 화폐는 물리적인 위치를 이동시킴으로써 소유권을 이전할 수 있다
- 디지털 자산은 물리적인 화폐와 달리 위치의 이동으로 소유권 이동시킬 수 없다
- 왜냐하면 디지털 데이터는 복사를 통해 전달되는데, 이 때 원래 저장소에서 삭제를 강제할 수 없기 때문이다
- 따라서 전자 상거래를 위해서는 디지털 자산의 이동을 보장하는 신뢰할 수 있는 주체가 필요하다.
신뢰 주체로 인해 발생하는 문제점에는 개인 정보 및 보안 문제, 계좌 개설, 복잡한 절차, 점검 시간, 해외 송금, 지급 준비율 등의 문제점이발생하게 된다.
신뢰할 수 있는 주체란? 제 3세계 국가, 독재 국가를 의미 한다.
그러면 그냥 P2P로 거래를 하면 되는거 아닐까?
- P2P로 거래를 하면 이중 지불의 문제가 생기게 된다.
P2P 전자 상거래의 문제점 (이중 지불의 문제)
- 소유권의 증명은 '전자 서명' 방식을 통해 증명할 수 있다.
- 그러나 한 사람이 여러 개의 서로 양립할 수 없는 거래를 발생시키는 것은 막지 못한다.
- 하나의 코인으로 서로 다른 사람들에게 동시에 전송하는 경우
- 이러한 문제를 이중 지불이라 한다.
비트코인의 역사
Satoshi Nakamoto가 비트코인 논문을 공개했다.
2009.01.03 비트코인의 첫 번째 블록이 생성된다. (역사의 시작)
- 재무장관, 은행에 두 번째 구제금융 임박 이라는 문구가 새겨져 있음
최초의 결재(2010.05.22)
- 1만 비트코인으로 피자 두판을 교환한 사건
- 이러한 일로 05.22는 Bitcoin pizza Day가 되었다
비트코인의 기술적인 이해에 앞서 P2P 네트워크와 분산 원장에 대해 알아보자.
P2P 네트워크 (Peer to Peer)
- 1대1 로 네트워크 자원을 공유하는 네트워크
분산 원장
- 신뢰 주체 대신에 P2P 네트워크를 구축하고 모든 참여자들이 원장을 저장 및 공유
- 블록체인에선 각 참여자는 거래들을 블록이라는 단위로 묶어서 처리하고 보관
- 네트워크 참여자가 같은 원장을 공유하고 과반수가 정직하다면 원장은 조작될 수 없다
- 따라서 분산 원장 블록체인이 안전하다
- 분산 원장을 할때 이 블록들이 사슬(체인)형태로 연결되어 있다고 표현을 해서 블록체인이 나오게 되었다.
합의 알고리즘(Consensus Algorithm)
- 분산된 노드들끼리 올바른 하나의 원장을 이끌어내는 규칙에 대한 알고리즘
- 이중 지불 문제가 발생하면 어떤 거래가 맞는걸까?
- 체인이 두 개 이상으로 나눠진다면 어떤 체인이 맞는걸까?
비트코인의 합의 알고리즘은 나카모토 컨센서스(Nakamoto Consensus)
작업 증명
- 네트워크 참여자는 유효성을 검증한 거래들을 모아 블록을 만든다
- 네트워크 참여자는 체인에 다음 블록을 연결하기 위해 복잡한 컴퓨팅 문제를 풀어야한다.(채굴)
- 해당 문제의 검증은 매우 간단.
- 작업 증명을 완료하여 새로운 블록을 연결한 노드는 다른 노드들에게 해당 블록을 전파한다.
- 전파받은 노드는 상대의 체인을 검증한 후, 자신의 체인과 비교하여 체인 선택 규칙에 따라 원장을 업데이트한다.
체인 선택 규칙
- 블록 및 거래는 전파되는데 시간이 걸린다
- 우연히 두 개 이상의 노드들에 의해 멀리 떨어진 곳에서 블록을 생성되어 전파된다면 각 노드들이 받은 블록들이 서로 달라져서 일관성(consistency)이 깨지게 된다.
- 비트코인과 이더리움은 가장 긴 체인을 선택한다.
채굴 난이도
- 전체 네트워크의 컴퓨팅 파워를 투자하였을 때 약 10분이 걸리는 난이도로 조정된다.
- 네트워크 참여자가 많아질수록 채굴의 난이도는 증가하므로, 원장의 안정성이 증가한다.
확률의 완결성
- 비트코인의 경우 6블록이 지나면 확률적으로 완결성을 지닌다
- 이전 원장을 수정하려면, 전체 네트워크를 상대로 체인을 역전해야한다.
- 6블록이 지나면 확률적으로 수정이 불가능하다.
보상
- 블록 채굴에 성공한 참여자는 '비트코인'이라는 블록체인 상 화폐를 보상으로 지급 받는다.
- 해당 보상은 채굴 유인이 되어 네트워크 안정성을 높이는 촉매가 된다.
비트코인의 거래
공개 키 암호화 방식을 사용하면 전자 서명을 만들 수 있다.
- 해시 함수를 이용해서 트랜잭션의 해시 값을 구한다.
- 사용자는 서로 암호학적으로 짝지어진 공개키와 비밀키를 가지고 있다.
- 해시 값을 비밀 키로 암호화하여 서명(signature)을 만들고 트랜잭션과 함께 전송한다.
- 트랜잭션을 받은 주체는 같은 해시 함수를 사용해서 트랜잭션의 해시 값을 구하고, 전자 서명을 공개 키로 복호화한다.
- 두 값을 비교하여 일치하는지 확인하면 자산 소유자의 신원을 확인할 수 있다.
비트 코인의 거래는 사용되지 않은 이전 거래(UTXO)들의 조합이다.
- 이전 자신의 공개키로 서명되어 전달된 거래의 소유권을 증명할 수 있다
- 이를 통해 새로운 거래를 생성한다
- 거래를 블록에 담아 채굴자가 블록체인에 기록하며, 차익은 수수료로 채굴자에게 지급된다
즉, 사람들이 거래를 하면 채굴자가 블록체인에 거래 내용을 기록하며 차익은 채굴자에게 지급되게 된다.
블록(block)과 트랜잭션(Transaction)
- 블록체인은 블록 단위로 기록되고 다른 노드들과 동기화되는 상태(state)와 상태의 전이(transition)를 일으키는 트랜잭션(transaction)으로 구성된다.
- 블록체인은 디지털 자산을 다루는 시스템이므로 주로 상태는 잔고(balance)정보를 의미하고 트랜잭션은 자산(asset)소유권의 이동을 표현한다.
- 블록은 참여자들이 트랜잭션에 의해 변화한 상태를 서로 공유하는 단위
- 두 개의 블록이 공존하는 상태를 포크(fork)라고 하며, 이러한 상태가 발생하지 않도록 해야 한다.
- 블록 상태는 이전까지 블록에담겼던 모든 트랜잭션들의 수행 결과이다
'기타_ > 알쓸신잡' 카테고리의 다른 글
[알쓸신잡] 이더리움? Ethereum! (0) | 2020.06.30 |
---|---|
[알쓸신잡] 긴급재난문자는 어떻게 오는걸까? (0) | 2020.06.29 |
[Tistory] 단축키 지정 (0) | 2020.06.28 |
[알쓸신잡] Agile..? (애자일) (0) | 2020.06.20 |
[알쓸신잡] 소프트웨어 개발 방법론 (0) | 2020.06.20 |
댓글