블록체인

비트코인: 개인간 전자화폐 시스템

 

아직까지도 많은 지식이 부족한 내가 책도, 그 무엇도 아니고 논문을 읽고 리뷰, 그러니까 독후감을 적는다는 것이 이상한 일이긴 하지만, 내가 이해하기 어느정도 괜찮은 정도의 논문들은 적어보는 것도 괜찮다는 생각이 들었다. 게다가, 블록체인 업계에 발 들이려는 입장에서 《비트코인: 개인간 전자화폐 시스템》 은 상당한 의미를 가지고 있기에 시작으로 하기에는 좋은 것같아서 이 논문을 가져와 보았다.

 

본래 이 논문은 영어판으로 먼저 나왔지만, 나의 어중간한 영어실력으로는 해석에 문제가 있을 듯해서 번역판을 들고왔다. 해당 논문은 블록체인 업계에서는 유명하기 때문에 한글판이 나와있는 상태다.

 

영문 (Satoshi Nakamoto)

https://bitcoin.org/bitcoin.pdf

 

한글 (Satoshi Nakamoto, feat. Mincheol Im)

https://encodent.com/bitcoin

 

비트코인 논문 한국어 번역판 (ver1.2)

(190810 추가) 사토시 나카모토의 비트코인 논문 한국어 번역판 1.2 버전이다. 올초 1.1 버전을 선보인지 7개월만에 내용을 갱신했다. 마침내 오류를 발견해 수정한 버전이다. 고수준 영어 구사자로

encodent.com

서론

현재 여러 코인들, 이를테면 이더리움, 이오스, 트론, 클레이튼과 같은 것들은 비트코인이 없었다면 존재할 수 없었을 것이다. 비트코인최초의 블록체인이기 때문이다. 비트코인이 가지는 의미는 디지털상에서 한 번 지불한 화폐를 재사용하는, 이른바 이불지불 문제를 작업증명이라는 합의 알고리즘을 통해 해결한 것이다.

 

여기서 기술적으로 빠뜨릴 수 없는 대목은 거래, 블록, 해싱, 공개키기반구조(PKI)를 사용한 것이라는 점이며 더욱이 블록체인이 해결하는 것은 기존의 제3자에 의해 통제되었던 것들을 탈중앙화를 통해 탈중개화를 실현한다는 점이다.

 

네트워크를 통해 개인 대 개인의 거래를 구현하기 때문에 은행과 같은 신뢰할 수 있는 기관의 개입이 전혀 필요하지 않다는 점이 논문의 주요 포인트다. 중개인의 존재론적 이유에대해 기존과는 다른 시각을 제시한 것이 바로 비트코인이다. 에 대해서는 논문에 다음과 같이 언급이 되어 있다.

중재 비용은 거래 비용을 높여, 실거래 최소 규모를 제한하고 소액의 일상적 거래 가능성을 가로막으며, 비가역 서비스에 맞는 비가역 결제기능의 상실로 더 큰 비용이 발생한다. 가역성때문에 신뢰 결핍이 퍼진다.

즉, 다시 말하면 조작이 가능할 수도 있다는 점이다. 가역적이라 함은 다시 되돌아가는 성질이므로 조작이 되어 거래가 취소된다거나 임의적으로 조작을 가해 문제상황을 야기한다면 우리는 제3 중개기관을 신뢰할 수 없는 상태에 빠진다. 그러나, 이러한 현 상황의 문제를 블록체인은 P2P 네트워크를 통해 해결한다는 것이다.

거래

거래는 트랜잭션이라고도 한다. 블록체인은 여러 사슬 중에 기준에 따라 체인을 선택하여 단일 상태를 유지하는데, 여기서는 가장 긴 체인을 기준으로 삼는다. 헌데 트랜잭션은 이러한 상태를 변경시키기 위한 변경을 요청하는 것이라고 볼 수 있다. 누군가에게 비트코인을 전송하거나 하는 일은 모두 트랜잭션이다.

 

논문에서는 언급되지 않았으나, 여기서는 공개키기반구조(PKI)를 사용해 트랜잭션에 서명하고 이를 검증한다. PKI 는 우리나라에서 대표적으로 공인인증서에 사용되는 기술로써, 공개키-개인키의 쌍으로 구성되는데, 여기서 공개키는 개인키에서 파생되므로 개인키를 알면 공개키를 알 수 있다. 허나, 암호학적 원리에 의해 공개키에서 개인키를 알아낼 수는 없다. 따라서 공개키는 외부에 공개해도 안전하기 때문에, 탈중앙화 신원증명(DID)같은 곳에서도 이러한 공개키를 적극 활용한다.

 

트랜잭션에는 서명이 필요하다. 이는 유효하지 않은 트랜잭션, 그러니까 중간에 조작된 흔적이 있는지를 알기 위해서다. 서명은 데이터(여기서는 거래)에 대한 해시와, 개인키로 만들 수 있고, 검증은 공개키로 하게 된다. 그림에는 소유자 2의 공개키의 해시와 거래의 해시를 결합하여 소유자 1의 전자서명을 만들었다. 이러한 과정을 거쳐야 트랜잭션이 유효하다고 판단하고 이를 블록에 포함시킬 것이다.

타임스탬프 서버

블록체인이 왜 체인인가? 그건 연결되어 있기 때문이다. 블록은 타임스탬프*를 가지고 있다. 이는 시간의 연속성을 의미하므로 첫 번쨰 블록보다 두 번째 블록이 당연히 타임스탬프가 더 클 것이다. 또한 해시라고 되어있는 것을 볼 수 있는데, 블록을 난이도, 머클루트, 논스, 블록의 인덱스와 같은 정보를 결합하여 자신만의 해시를 갖는다. 그리고 놀랍게도 블록은 이전 블록의 해시 또한 가지고 있고, 이것이 사슬로 연결되어 체인을 구성하게 되는 것이다.

*이 타임스탬프는 그 데이터가, 명백히, 해시(과정)에 들어가기 위해 해당 시각부터 존재했음을 증명한다. 각 타임스탬프는 그 해시안에 먼젓번 타임스탬프를 포함하고, 그에 앞선 것들을 하나씩 연장하는 타임스탬프가 찍힌 사슬을 생성한다.

작업증명

작업증명은 이중지불문제를 해결하기 위해 나타난 합의 알고리즘 중 하나다. 사용자는 논스 값을 증가시켜 난이도에 해당하는 해시 값을 찾기 위해 노력한다. 대체로 0비트가 몇 개가 포함되어야 하냐에 따라 난이도가 달라질 것이며, 이미 도출된 해시 값만을 가지고는 원본 메시지를 알 수 없고, 이는 컴퓨팅파워를 통해 해결하는 방법밖에 없다. 이를 채굴이라 한다.

 

이런 작업증명을 통해 문제를 가장 먼저 풀어내어 생성한 블록을 체인에 등록하게 되는데, 그 결과로 우리는 암호화폐를 받게 된다. 추가적으로, 트랜잭션을 보낼 때는 거래 수수료가 발생하는데, 만약 블록 생성에 투자한 것보다 거래의 가치가 적다면, 거래 수수료가 인센티브로 더해질 것이다.

 

블록은 서로 연결되어 있고, 만약 과거의 블록을 바꾸려고 시도하면, 해시값이 변경되어 사슬이 끊어지므로 공격자는 그 이후의 블록에 대한 모든 작업증명을 실행시켜야 하기 때문에 블록의 수가 늘어날 수록 공격자가 공격에 성공할 가능성은 극히 줄어든다. 이후에 있는 블록까지 작업증명을 통해 조작하려면 '정직한 노드' 의 체인보다도 더 많은 CPU파워를 동원하여 더 긴 체인을 만들필요가 있을텐데, 그것은 상식으로 불가능하다.

네트워크

해당 파트는 블록체인 네트워크가 동작하는 원리이므로 핵심사항에 해당한다. 채굴을 실행하는 모든 노드는 트랜잭션을 모두 검증한다. 다른 합의 알고리즘에서는 그렇지 않은 것도 있다. 이는 이중지불문제 해결을 위해 모든 거래를 수집해서 블록에 포함하는 것이다. 여기에는 트랜잭션의 유효성을 검증하는 것도 포함될 것이다. 네트워크에 거래를 수집하고, 작업증명을 하고, 블록한 생성하고 블록을 네트워크에 전파하여 유효성을 검증받고 그것을 체인에 포함시키게 되면 끝난다. 이 과정의 반복이다.

 

노드가 트랜잭션을 수집하기 위해서는 노드에 모든 노드가 연결되어 있어야 할 것같지만, 사실은 그렇다기보다는 트랜잭션은 노드에서 노드로 전파된다.

 

블록 자체에는 거래를 가지고 있으나, 헤더에는 모든 것이 포함되지 않는다. 바로 머클트리 루트해시를 갖는다. 머클트리는 거래가 있다면 두 거래를 해시하고, 각 해시에 대한 또 다른 해시를 부모로 갖는다. 그렇게 만들다보면 결국 최종적으로 루트해시를 하나 가지고 있게 되는 것이다. 만약 중간에서 거래를 조작하게 될 경우 루트 해시값이 변경되므로 이는 유효하지 않게 될 것이다.

프라이버시

논문에서의 언급대로, 우리가 일반적으로 사용하는 은행시스템은 우리의 개인정보를 은행에 넘겨두고 일부 제한적으로 우리의 정보에 접근가능하도록 한다. 그리고, 우리가 작성한 거래는 외부로 유출되지 않는다. 그러나, 비트코인과 같은 퍼블릭 블록체인은 누가 누구에게 얼마를 보냈다는 거래내역은 누구나 확인할 수 있고, 트랜잭션을 조회하면 누구나 확인할 수 있다.

 

하지만 블록체인은 철저한 익명성때문에 우리의 개인정보는 공개되지 않는다. 지갑의 주소를 우리의 계좌번호라고 생각할 수 있는데, 대체로 계좌번호를 알면 그게 누구인지 알 수 있으나 지갑은 그게 누구의 소유인지 알 수 없다. 신원의 검증없이 누구나 새로운 주소를 만들 수 있기 때문이다. 그저 기존의 지갑에 있던 자금을 옮기기만 하면 그만이다.

 

아래에 부가적인 방책이라는 말로 각 거래마다 새로운 키 쌍이 사용되어야 한다고 되어있지만, 현실적으로 트랜잭션을 보낼 때마다 공개키-개인키를 새로 생성하게 되면 키 관리도 어려워지기 때문에 지갑에서 키를 관리하기 어려워질 것이다. 우리가 알고 있는 암호화폐 지갑이라는 것은 사실 개인키를 관리해주는 것이기 때문이다.

마치며

내가 이 논문을 제대로 이해 했는지 모르겠다. 블록체인을 활용한 연구에 대한 것이나 관련 논문들도 읽어보기야 하겠지만, 사실상 블록체인의 시초인 이 논문을 제대로 이해하지 못했다면 다른 논문도 어렵지 않을까 싶다. 참고로 이 글에서는 6. 인센티브, 7. 디스크 공간 회수, 8. 간소화한 결제 검증, 9. 가치 합치기와 나누기, 11. 계산은 생략했다. 아마도 다음 것은 논문은 아니겠지만, 역시 중요한 문서인 이더리움 백서가 될 것이다. 이 또한 일부 한글판이 나와있으니 다행이다.

'블록체인' 카테고리의 다른 글

비트코인: 개인간 전자화폐 시스템  (0) 2020.10.30