Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
04-29 08:31
관리 메뉴

ulismoon

[BlockChain] 블록체인에 관하여 - 1 본문

카테고리 없음

[BlockChain] 블록체인에 관하여 - 1

ulismoon 2017. 7. 28. 22:15

사실 이거 다른데 다 썼던 내용이고, 난 하도 많이 보고 쓰고 해서 이제 그냥 줄줄 읊을 수 있는 수준이 됐지만, 기록 겸 혹시나 도움이 될 수 있을까 싶어 작성한다.


군더더기는 다 빼고 기술적 핵심만 써야겠다.


0. 암호화폐? 블록체인?

가장 대표적인 암호화폐인 비트코인과 이더리움을 기본으로 하겠다. 별 거 아니다. 암호화폐라는 것은 말 그대로 암호화되어서 특정인만 쓸 수 있는 화폐를 말하며, 블록체인은 이 암호화폐에 신뢰성을 부여하는 매커니즘이다.


1. 화폐의 고민

화폐를 정의하고 통용하는 데 있어서 만나는 가장 큰 두 가지 장벽은 첫째가 이 돈이 내 돈임을 증명하는 것이며, 둘째가 이 돈이 다른데서 쓰이지 않았음을 증명하는 것이라 한다.

우리가 일반적으로 쓰는 종이돈을 생각해보자. 사실 이 종이돈은 내가 흘린걸 남이 주우면 그만이므로 그 돈이 내 돈임을 증명할 수가 없다. 하지만 그 돈이 내 계좌에서 인출되었고, 거래명세표가 돈다발에 같이 들어있었다면 그 돈은 내 돈임을 증명할 수 있을 것이다. 돈을 흘리는 것은 유저불량이므로 제외하자. 그리고 종이돈은 다른데서 쓰였을 수가 없기 때문에 이중지불 문제를 겪을 수가 없다.

각종 전자화폐는(쇼핑몰 포인트도 전자화폐라면 그렇게 부를 수 있다.) 소유권을 증명하는 것은 어렵지 않다. 아이디와 비밀번호로 잠겨있는 계정에 귀속되어 있기 때문이다. 하지만 까다로운 것이 이중지불에 대한 문제인데, 2008년 사토시 나카모토라는 정체모를 저자가 쓴 블록체인 기술이 등장하기 전에는 이건 사실상 정복 불가능한 문제로 여겨지고 있었다. 어떠한 방법으로든 복사가 가능해지는 순간 전자화폐는 이중지불이 가능해지고 화폐 체계가 무너지기 때문이다.

사토시 나카모토는 사람이지 조직인지 모른다. 지금도 모른다. 이 사람이 2008년 페이퍼를 하나 내고, 비트코인이라는 것을 만들었다. 비트코인은 사토시의 페이퍼에 등장하는 분산화된 블록체인이라는 기술을 이용해 소유권과 이중지불의 문제를 매우 똑똑하게 해결한 암호화폐로, 실질적으로 이 문제를 해결한 첫 번째 전자화폐이다. 다음장부터는 이 블록체인이라는 것이 어떻게 돌아가는 지, 왜 안전한 지를 살펴본다.


2. 공개키 암호화 알고리즘

그 전에 하나 짚고 넘어가야 할 게 있는데, 바로 공개키 암호화 알고리즘에 대한 것이다. 공개키 암호화 알고리즘은 대칭키 암호화 알고리즘의 대칭점에 있는 것으로, 두 키가 하나는 암호화, 하나는 복호화에 사용된다. 한 키를 가지고는 두 작업을 다 할 수 없다는 특징이 있다. 먼저 하나의 키를 만들어 이를 개인키라 하고 나만 가지고 있는다. 그리고 이 개인키에 특정한 함수를 적용해 또 하나의 키를 만들어내는데, 이를 공개키라 부르며, 이 키는 누구에게든 나눠줘 공유하게 된다. 나에게 비밀 메세지를 보내고 싶은 사람은 내가 공유해놓은 공개키로 자신의 메세지를 암호화해 내개 보낸다. 내 공개키로 암호화된 암호는 내 개인키로만 풀 수 있기 때문에 암호화된 메세지는 탈취되어도 복호화의 위험이 없다. 나는 메세지를 전달받아 여유있게 내 개인키로 복호화하면 된다. 블록체인의 한 축을 담당하고 있기 때문에 이를 먼저 언급한다.


3. 해시함수

이것 역시 블록체인의 핵심 기능인데, 자주 등장할 거라 미리 설명한다. 해시함수는 말 그대로 함수인데, 입력값에 복잡하고 역연산이 불가능한 연산을 해서 특정 길이의 결과값을 만들어내는 함수를 말한다. 비트코인에서는 SHA256 함수를 사용하는데, 256비트 길이의 결과물을 뱉어내는 함수이다. 이 함수의 특징은 입력값을 보고 출력값을 예측할 수 없다는 점(당연히 출력값을 보고 입력값을 예측할 수도 없다)인데, 1과 2는 굉장히 유사한(아스키코드 1 차이) 문자지만 해시함수를 통과시키면 전혀 다른 값이 튀어나온다. 모든 해시함수는 당연히 취약점이 존재하는데, 그것은 바로 입력값의 가능한 갯수보다 출력값의 가능한 갯수가 적기 때문에 결국은 충돌(collision)이 일어난다는 것이다. SHA1 해시함수는 이러한 충돌을 인위적으로 만들어내 입력값을 역으로 추론할 수 있어서 지금은 사용하지 않고 있고, SHA256은 그 다음 세대인 SHA2 계열에 속한다. 아직 SHA2에 대한 쓸만한 공략법은 나오지 않은 상태이며, 현재 SHA3를 공모하고 있다. 따라서 SHA256 해시와 같은 해시함수는 출력값으로 입력값을 찾을 수 없으며, 예측이 불가능한 값을 만들어내는, 그리고 특별한 공략 방법이 없는 강력한 함수이다.


4. P2P 네트워크

많이들 들어봤을 이름이다. 먼 옛날 이동키, 프루나, 냅스터, 그리고 지금의 비트토렌트까지 유명한 공유 플랫폼이 사용하는 네트워크 토폴로지이다. 이 방식은 중앙 서버를 두고 사용자들이 서버에 요청을 해 응답을 받아가는 방식이 아닌 사용자들 간에 서로가 서로에게 데이터를 요청하고 받아가는 형식을 띤다. 각각의 컴퓨터들을 노드라고 하며, 각각의 노드는 인접 노드(피어) 리스트를 가지고 있다. 피어는 또 다른 피어 리스트를 가지고 있고, 이런 식으로 모든 노드는 거미줄처럼 하나의 웹으로 엮이게 된다. P2P 네트워크에서의 거리는 지리적인 거리가 아닌 이 네트워크 그래프 상에서의 거리를 뜻한다. 바로 옆집 컴퓨터가 네트워크 상에서는 매우 먼 노드가 될 수도 있다.


5. 지갑, 거래 생성

암호화폐를 쓰려면 역시 계정부터 만들어야 한다. 비트코인이건 이더리움이건 여기저기서 지갑을 만들 수 있는데, 암호를 입력하면 이를 기반으로 개인키와 공개키를 만든다. 개인키는 사용자가 보관하고, 공개키는 약간의 조작을 거쳐 비트코인 주소라는 것을 생성한다. 하나의 공개키에서 수많은 주소를 만들어낼 수 있고, 이 주소들은 전부 하나의 개인키로 복호화할 수 있다. 따라서 사용자는 필요에 따라 얼마든지 많은 주소를 찍어내 사용할 수 있다.

누군가가 내 빈 지갑을 보고 비트코인을 보내준다고 하자. 그러면 내게 비트코인을 보내는 사람은 자신의 지갑에서 나를 받는 사람으로 하는 거래를 생성하게 된다. 그리고 이 거래에는 input, output이 있는데, input은 내가 사용하는 UTXO(뒤에 나온다) 정보가 있고, output에는 수신인이 받을 돈과 내가 돌려받을 거스름돈이 적혀있다. 그리고 output의 총합은 input보다 통상 약간 작은데, 이 차이는 나중에 내 거래를 담을 블록을 채굴하는 사람에게 지불하는 수수료로 나간다. 수수료는 input-output으로 자동 계산되기 때문에, output을 잘못 적으면 엄청난 돈을 수수료로 내게 될 수도 있다. 물론 지갑에서는 이런 것들을 잘 해주니 별 신경 안써도 된다.

이렇게 만들어낸 거래는 그 사람의 지갑에 연결된 피어에게로 전파되고, 각 피어는 전달받은 거래가 정상적인 거래인지 해시값을 검증한 다음 다른 자신의 피어로 전달한다. 이렇게 얼마간의 시간이 지나면 전 세계의 모든 비트코인 노드에 이 사람의 거래가 전송된다.


6. 채굴, 거래의 승인

새로운 거래를 전달받은 Full Node miner는 이전 블록이 완성된 신호를 받은 즉시 다음 블록을 생성하기 시작한다. 상세한 내용은 뒤로 미루고, 블록에는 거래를 담는다는 것만 알고 있자. 이렇게 거래를 담아 새로운 블록을 생성하면, 이 정보 역시 네트워크를 따라 전파된다. 보낸 사람, 받는 사람의 지갑(이 역시 노드다)은 이 정보를 받는대로 검증하고, 유효할 경우 거래가 1번의 승인을 받았다고 한다. 시간이 지나면 이 뒤에 다른 블록이 계속 쌓여나갈 것이며, 블록은 점점 더 변경하기 어려워진다(왜인지 뒤에 나온다). 그렇게 충분한 횟수의 검증(비트코인의 경우 통상 6번)을 받으면 거래는 되돌릴 수 없다고 말할 수 있다. 이제 내 지갑에는 누군가가 보내준 돈이 잔고로 표기될 것이다.


기본적인 비트코인의 작동은 위와 같다. 지갑을 만들고 거래를 생성하면 사람들이 그 거래를 블록에 담아 채굴하고, 그렇게 채굴된 블록에 담긴 거래는 승인을 받았다고 한다. 적정 횟수의 승인을 받으면 거래는 완전히 변경 불가능하게 된다. 다음 글부터는 그 상세를 하나씩 뜯어보자. 한번에 쓰려니 내용도 너무 많고 손도 아프고 배도 고프다.

Comments