블록체인 기반 지식
인터넷 계층과 프로토콜
Ethernet : 데이터링크 계층의 핵심적인 기술, 이더넷을 통해 LAN이 만들어졌다.
TCP/IP : 각각의 LAN을 연결시키는 기술. 이 기술로 인터넷이 등장했다.
HTTP : 인터넷 상에서 콘텐츠를 주고받는데 사용하는 프로토콜.
SSL/TLS : 인터넷의 보안과 관련된 계층 & 프로토콜. 요즘은 TLS를 주로 사용한다.
이 프로토콜을 사용하면, 내가 보낸 메세지를 상대방이 탈취했을 때, 원본 메세지가 무엇인지 알 수 없게 만들 수 있고, 메세지를 조작해서 보내더라도, 수신자가 메세지의 조작 여부를 알 수 있다.
암호학
인터넷이 발달한 이후, 인터넷을 통한 전자상거래도 활발히 발생하기 시작했다.
이렇게 인터넷을 통해 돈이 오고 가기 시작하면서 데이터의 암호화에 대한 중요성도 증가했다.
특히 블록체인 기술에서 핵심적으로 사용하는 기술은 비대칭 암호화 기술이다. (Asymmetric Cryptography)
비대칭 암호화 기술에서는 Public Key, Private Key 2개의 키를 사용한다.
프라이빗 키는 뭔가에 서명을 할 때 사용할 수 있고, 퍼블릭 키는 그 서명을 검증하는데 사용할 수 있다.
따라서 내가 비밀스럽게 보관하고 있는 키로 서명을 한 무언가에 대해, 여러 사람들이 알고 있는 퍼블릭 키로 그 서명이 옳다는 것을 검증하면, 그 무언가는 내가 갖고 있는 물건임을 증명할 수 있다.
위에서 말하는 '서명'은 우리가 실제로 문서에다가 하는 서명과 같은 의미를 지닌다.
즉, 내가 무언가를 하기로 동의해서 하는 '서명'과 같은 위치를 갖는 서명이기에 이 서명은 위조되지 않는 것이 중요하다.
그리고 이 비대칭 암호화 기술은 수학적으로 비밀키를 알아내거나 위조할 수 없다고 알려져있기 때문에 많은 분야에서 사용하고 있다. 대표적인 활용 예시로는 지금은 사라진 '공인인증서'가 있다.
비트코인에서는 내가 갖고 있는 코인을 다른 사람에게 보내는 경우, 내가 보내는 것에 동의한다는 서명을 남기는데 사용된다.
프라이빗 키와 퍼블릭 키는 퍼블릭 키로 어떤 것을 암호화한 내용을, 프라이빗 키로 열어볼 수 있는 특징도 있다.
그래서 내가 어떤 B 라는 사람에게 암호문을 보내고 싶다고 한다면, B의 공개키를 이용해서 평문을 암호화한 뒤, B에게 보내면 된다.
B는 자신이 가지고 있는 프라이빗 키로 암호문을 복호화한 뒤, 원래 평문을 확인할 수 있다.
블록체인에서는 첫번째 특징(서명과 검증)이 주로 사용된다.
블록체인
비트코인(블록체인)은 개인과 개인간의 value(돈)를 중앙 기관에 의존하지 않고 안전하게 넘기는 방법을 고민하는 과정에서 나왔다.
그에 대한 배경은 2008년 리만 브라더스 (서브 프라임 모기지) 사건이다.
이 사건으로 인해 중앙 정부와 은행에 대한 신뢰에 의문을 품은 사람들이 탈중앙화된 화폐를 만들었고, 그것이 비트코인이었다.
비트코인은 사토시 나카모토라는 의문의 사람이 낸 9페이지 논문에서 시작되었다.
비트코인에는 내가 원하는 문구를 집어넣을 수 있는데, 최초로 채굴된 블록(제네시스 블록)에는 금융 기관의 도덕적 헤이와 관련된 신문 기사의 제목 문구가 들어있다.
그리고 2009년에 이 논문을 기반으로 한 최초의 비트코인 시스템이 가동되기 시작했다.
그렇다면 블록체인이란 무엇일까?
블록체인은 사토시 나카모토가 만든 용어로, 일종의 분산 데이터베이스이다.
말 그대로 데이터가 여러군데 흩어져있다는 뜻이다.
그리고 이 데이터베이스의 내용은 누구나 볼 수 있는 공개된 데이터베이스이다. (조회하는 사이트도 있다!)
데이터베이스에 들어가는 데이터들은 블록체인의 각 블록이 채굴된 시간 '로그'이다.
이 기록은 오로지 추가만 될 수 있고, 수정/삭제는 되지 않는다.
블록체인은 각 블록을 채굴한 뒤 기존 블록에 이어붙이면서 데이터베이스를 늘려나간다.
반드시 기존 블록에 이어붙어야만 유효하기 때문에, 만약 데이터를 조작하는 경우 이어붙이는 체인이 끊어져서 들통이 난다.
누군가 나에게 비트코인을 보내려고 한다면, 이 전송과 관련된 서명을 해야하고 (private key), 이 서명이 public key로 검증되면 실제로 코인이 이동한 역사가 된다.
이렇게 코인을 보내는 동작 하나 하나를 '트랜잭션' 이라고 하는데, 이 트랜잭션들을 모아서 지금까지 이 트랜잭션들이 진행되었다는 것에 대해 모두가 동의하면 (분산 시스템) 합의를 통해 역사로 확정짓는다. (블록 채굴)
그런데 분산 시스템에는 '비잔틴 장군 문제' 라는 유명한 유형의 문제점이 존재한다.
비잔틴 장군 문제는, 각 전장에 흩어진 장군들이 작전을 주고 받을 때, 스파이 장군을 제외한 나머지 장군들이 올바르게 의사소통을 하는 방법에 대한 문제이다.
비트코인은 이 문제를 proof of work (작업 증명) 방식으로 해결한다.
작업 증명은 너가 스파이가 아니라는 것을 작업을 통해 증명해보라는 것으로, 기존 트랜잭션들을 묶어 하나의 블록으로 만들기 (채굴하기) 위해서는 무수히 많은 작업을 해야하고, 스파이라면, 시스템을 망치기 위해서 이 무수히 많은 작업을 위해 시간과 돈을 투자하지 않을 것이라는 전제를 통해 문제를 해결하는 방식이다.
모두가 동의하는 과정에서는 프로토콜이 필요하다.
이 프로토콜을 'consensus protocol' 이라고 한다.
이 프로토콜은 크게 Permissioned, Permissionless 로 구분된다.
Permissioned 는 폐쇄형 블록체인으로, 승인을 받은 사람만이 접근할 수 있다.
Permissionless는 개방형 블록체인으로, 누구나 블록체인 네트워크에 접속해서 채굴을 할 수 있다.
비트코인은 개방형 블록체인에 해당한다.
정리하자면, 블록체인 기술은 탈 중앙화된 네트워크에서 data를 이동하는 기술이다.
이때 데이터를 증명 가능한 형태로 움직이는 것이 블록체인이 해결하고자 하는 문제이다.
이때의 데이터는 돈(코인)이 될 수도 있고, 컴퓨터 코드가 될 수도 있다.
(나중에 정리하겠지만, smart contract 라는 블록체인으로 컴퓨터 코드를 옮기는 기술이 있다.)