[2/N] 비트코인 백서 뿌수기 (Personal Study)
안녕하세요, 서박입니다. 개인적인 리서치 용으로 비트코인 백서를 부수고 분석해보려고 합니다.
비트코인 백서는 위의 링크를 통해 한국어 버전을 다운 받으실 수 있습니다.
혹시 몰라 pdf 파일도 올려 놓으니, 보실 분들은 다운 받아 보시면 좋겠습니다.
백서 하나 다 뜯어보는데 얼마나 걸릴지는 모르겠지만, 조금은 꼼꼼하게 정리해보려고 합니다.
그럼 가볍게 시작하는 백서 리서치, 시작해보겠습니다!
1. 서론 : 비트코인의 태생
서론에서는 비트코인이 탄생하게 된 배경이 간단하게 소개된다. 여기서 눈여겨볼만한 단어들은 아래와 같다.
1) 신뢰할 수 있는 제 3자
2) 신뢰 기반 모델 / 신뢰 수준
3) 직접 만나 사용하는 물리적 화폐
4) 신뢰 가능 제 3자 없이 온라인 상 지불 매커니즘
신뢰할 수 있는자와 신뢰 기반 모델이란?
1) 신뢰할 수 있는 제 3자와 2) 신뢰 기반 모델은 무엇일까?
현재 사회는 신뢰를 기반으로 쌓아 올린 사회라고 해도 과언이 아니다.
예를 들어, 사회적 합의로부터 도출된 가치인 화폐와, 그 화폐의 가치를 조절하고 발행하는 은행과 정부 등이 있다.
우리는 그 화폐를 사용하면서, 거래를 하기 위해서는 그 화폐의 가치를 보증하고
1) 신뢰하게 만들어주는 제 3자 역할을 하는 중재자가 필요했다.
신뢰 기반의 모델이기 때문에, 거래 과정에서 거래를 취소시킬 수도 있고,
신뢰가 보증되지 않은 사람은 더 큰 개인정보를 요구하여 신용 등급을 충족시키게 하기도 한다.
-> 이는 화폐가 신뢰성을 가지게 되는 방법 중 하나이기도 하지만, 중앙집권적 성격의 어떤 조직에 의해 좌지우지 될 수 있다는 것을 의미하기도 한다.
또한 2) 신뢰 기반의 거래이기 때문에, 면대면으로 마주하여 하는 거래가 아닌 이상,
일정 수준의 사기(fraud)는 불가피한 것으로 암묵적으로 묵인한다고 서론에서는 설명하고 있다.
이를 해결하기 위해서는, 3) 직접 만나 사용하는 물리적 화폐를 가지고 거래하는 것만이 방법이었으며,
이 외에 관리자 성격의 1) 신뢰할만한 제 3자가 없이 온라인 상에서 직접 지불하게 하는 4) 메커니즘이 존재하지 않았기 때문에,
그것의 필요성을 느끼고 만들었다고 해도 크게 논점에서 벗어나지 않을 것 같다.
그렇다면 그 메커니즘이 가능하게 되려면 무엇이 필요할까? 다음을 읽어보자
서론의 아래서는 그걸 이루기 위해 필요한 내용이 나온다. 간단히 중요 단어만 뽑아본다면,
1) 암호학적 증명 기반 전자지불 시스템
2) 두 사람이 직접 거래 (P2P)
3) 취소가 불가능한 거래 (Computationally)
4) 에스크로 메커니즘 (Escrow)
5) 컴퓨팅 파워의 합
사토시 나카모토는 비트코인을 통해 현대 사회의 거래 시스템에서 무엇을 제하고 무엇을 더하고 싶었는지를 간략하게 제시한다.
이는 신뢰 대신 1) 암호학적 증명 기반 전자지불 시스템 을 구현하고 싶었던 것이며, 이를 보증하는 것은 신뢰가 아닌 암호학적 증명이었던 것이다.
암호학적 증명은 전 글에서 다뤘던 해시(Hash)라고 보아도 무방할 듯 하다.
비트코인은 거래에 있어서 비용들과 지불의 불확실성을 제하고 싶었는데,
이는 2) 두 사람이 직접 거래 하는 시스템 (P2P)를 통해 4) 에스크로 메커니즘 을 이루고 싶었으며,
통상적인 4) 에스크로 메커니즘에서 신뢰할 수 있는 제 3자 역할을 하는 조직을
암호학적 증명을 통한 신뢰성으로 대체하려 하였다고 말할 수 있다.
비트코인을 통해 중앙 집권적 성격의 제 3자 없이 신뢰 대신 암호학적 증명이
보증하는 개인간 거래를 할 수 있는 시스템을 만들었다.
그러면서 이 시스템의 취약점도 같이 이야기를 했는데, 이는 정직한 노드의 컴퓨팅 파워의 합이 공격자 그룹 노드의 것들보다 항상 커야한다는 것이다.
이는 뒤에서 다뤄보도록 하겠다.
에스크로(escrow)는 상거래 시에, 판매자와 구매자의 사이에 신뢰할 수 있는 중립적인 제삼자가 중개하여
금전 또는 물품을 거래를 하도록 하는 것, 또는 그러한 서비스를 말한다.
거래의 안전성을 확보하기 위해 이용된다.
위키백과
2. 거래 (Transaction)
비트코인에서 거래라고도 하는 트랜잭션(Transaction) 은 쉽게 생각해서 은행 거래 전표와도 동일하다
우리가 은행에서 어떤 사람에게 돈을 송금하고 싶은 경우 어떻게 하는가?
은행에 방문하여 받을사람의 계좌번호, 금액 등의 정보를 전표에 작성하고 은행직원에 전달한다.
은행직원은 전산상에 해당 거래내역을 등록함으로써 거래가 정상적으로 이루어지게된다.
비트코인에서도 거래를 하기 위해서는 보내는 주소, 받는 사람의 주소, 금액, 수수료 등에 정보를 작성해야한다.
이렇게 작성된 문자열이 바로 트랜잭션(Transaction)이다.
트랜잭션이 이루어지면 TXID라는 Transaction ID가 생성된다. 이 정보로 해당 거래 내역의 식별자 역할을 수행한다.
TXID는 내가 전송한 비트코인 잘 전송되었는지 확인하기 위한 용도로 사용될 수 있으며,
블록의 거래정보가 유효한지에 대한 유효성을 검사하기 위한 용도로도 사용된다.
아래는 거래가 이루어질 때 일어나게 되는 일들이다.
비트코인에서는 공개키 암호 방식을 사용한다.
바이낸스 수수료 20% 할인 가입 링크
간단히 어려운 말들만 뜯어보자면, 아래와 같다.
1) 공개키와 개인키
2) 서명
3) 검증
위키에 기록된 공개키 암호화 방식은 이렇게 설명하고 있다.
공개키 알고리즘은 두가지로, 1) 공개 키, 2) 개인 키(비밀키)로 구성된다.
1)공개 키는 누구나 알고 있어도 무방하지만 2) 개인 키(비밀 키)는 반드시 소유자만 알고 있어야 한다.
또한 1) 공개 키를 토대로 2) 비밀 키를 유추할 수 없다.
암호 방식의 한 종류로 비밀 키 암호 방식과 달리 암호화와 복호화에 이용하는 키가 다른 방식을 말한다.
공개 키 암호를 구성하는 알고리즘은 대칭 키 암호 방식과 비교하여 비대칭 암호(非對稱暗號)라고 부르기도 한다.
위키백과
공개키에서 알아야 할 핵심은 이와 같다
1. 공개키로 암호화된 메시지는 오직 개인키로만 복호화 할 수 있다. (공개키 -> 개인키)
2. 개인키로 암호화된 메시지는 오직 공개키로만 복호화 할 수 있다. (개인키 -> 공개키)
쉽게 쉽게 생각하세요! 공개키로 잠궜으면 반대로 개인키로 열어야 하고,
개인키로 잠궜으면 공개키로 열어야합니다.
이렇게 비대칭 방식으로 암호화 및 복호화를 하기 때문에
공개키 암호화 알고리즘이 비대칭 암호 방식이라고 표현하는겁니다!
공개키 암호화 방법도 아는게 중요하긴 하지만, 결국 핵심은 이러한 암호학적 증명을 통해
신뢰할 수 있는 제 3자 없이 가능한 전자지불 시스템을 만들었다는 것을 이해하는 것이 중요하다.
중요한 내용은, 이와 같다.
1. A의 ‘개인키’로 암호화 된 문서는 오직 개인키를 알고 있는 ‘A’만 만들 수 있기 때문에 ‘2) 전자서명’으로 사용될 수 있다.
2. A가 B의 공개키로 메시지를 암호화 했을 경우 B의 개인키로만 메시지를 복호화 할 수 있기때문에 정보의 기밀성을 보장하면서 메시지를 전달 할 수 있게된다.
거래에 사용되는 암호화 방법에 대해서 간단히 알아보았다. 그럼 이걸로 무엇을 할 수 있는가?
신뢰할 수 있는 제 3자 없이 이중지불 문제를 해결하기 위해서는, 모든 거래를 다 확인하여, 어떤 거래가 먼저인지를 판단해야한다.
(거래를 확인하고 합의하여 동의하기 위해)
그리고 이를 제 3자 없이 달성하기 위해서는 모든 거래 내역이 공개적으로 알려져야한다(네트워크 참여자들이 확인하고 동의하기 위함).
그리고 그 거래 순서에 대한 남은 기록이 참이라는 것을 동의할 수 있는 시스템이 필요하다는 것이다.
그렇기 위해서 과반수 이상의 노드들이 동의하는 증명이 되어야 거래가 성립되게 된다.
쉽게 설명하자면, 트랜잭션이 일어났을 때, 암호화된 거래 내역이 바뀌지 않았는지 무결성 검사를 진행하고,
이 거래가 ‘진짜’ 거래로 확인이 되었을 경우 블록체인에 이 거래 정보를 업데이트 하고 노드들에게 전달하게 되는 것이다.
이 내용은 조금 어렵기에 나중에 다시 한번 다뤄보도록 하겠다.
3. 정리
화폐가 가치를 가지기 위해서는 여러 조건이 필요하다고 한다.
화폐가 신뢰성이 있을 것,
사람들에 의해서 충분히 통용이 될 것
그리고 화폐의 가치가 사용자들에 의해 인정이 될 것.
-> 신뢰할 수 있는 제 3자 없이 신뢰성을 가지기 위해서 비트코인은 신뢰 대신 암호학적 증명을 통해 증명할 수 있는 방법을 선택했다.
-> 암호학적 증명이란 공개키 알고리즘을 통해 일어나는 공개키 개인키 서명이며, 이를 통해 본인이 거래에 참여했다는 것을 증명할 수 있다.
-> 이를 확인 하기 위해 거래는 반드시 공개적으로 알려지며, 무결성을 판단해 통과가 됐을 경우에 다른 노드들에게도 전파가 된다.