오늘 회사에서 샌프란시스코 대학교 블록체인 관련 교수인 정은진 교수님에게 블록체인 관련된 세미나를 들었다. 


오늘 강의를 통해 그 동안 내가 블록체인에서 의구심을 가졌던 내용을 정리해보았다.


블록체인이란?

우선 앞에 글에서도 설명하였듯이 블록체인은 hash의 연결이다. 

hash는 y=f(x)로 이루어져 있는 함수로써 함수에 들어간 값에 따라 y의 값이 바로바로 나온다. 이때 사용되는 해쉬는 sha256이다. x값으로 y의 값을 찾는데 어렵지 않으나, y의 값으로 x의 값을 찾는 것은 무지 어렵다. 이런 y값으로 x의 값을 찾는 것이 결국 비트코인을 채굴한다는 의미와 같다.


블록체인은 아래 그림과 같이 각 블록이 hash 값으로 연결되어 있다. 앞에 hash 값은 이전의 블록의 hash 값이 포함되어 있으므로, 중간의 블록이 변경될경우 모든 신뢰성이 깨지게 된다. 그러므로 데이터의 신뢰성을 보장한다하여 요새 각광받고 있다.


조금 더 쉽게 설명하면 위에 사용된 블록을 거래 장표라고 한다면 각 거래장표는 hash로 증명이되고 각 거래장표는 서로 연결되어 있는 구조로 생각하면된다. 여기서 거래장표는 y=f(x)에서 x의 값이 되는 것이다. x의 값은 매체가 무엇이냐에 따라 장표가 아니라 다양하게 사용할 수 있다.


블록생성 합의

블록은 다음 블록의 hash값을 찾기위해 nonce 값을 찾으면서 연결된다. 그런데 만약 블록의 nonce 값을 찾는 과정이 동시에 일어나서 블록이 여러개 생성된다면 어떨까? 그러면 결국 아래 그림처럼 트리구조가 되어버릴수가 있다. 그러면 결국 체인이 아닌 트리가 되고 신뢰가 깨지기 때문에 문제가 발생한다. 그래서 합의 알고리즘을 통한 합의 과정이 필요한다.


practical byzantine fault tolerance

블록체인의 합의 과정 중 자주 사용되는 개념으로 비잔틴 3분의 1 법칙이 있다. 3분의 1 미만의 컴퓨터가 악의적으로 행동해도 나머지 3분의2 이상의 컴퓨터가 데이터에 대한 합의를 이루는 방식. 예를 들어 4대의 컴퓨터 중 1대가 악의적으로 행동해도 나머지 3대가 데이터에 대한 합의를 이룰 수 있음.

즉 정리하면, 악의적 행동을 하는 사람이 3분의 1일 넘어서면 합의에 이룰수 없는 이론이다. 반대로 말하면 3분의 1이하가 반대를 한다면 그것은 합의가 가능하다.


합의 알고리즘 (작업증명 PoW)

- 가장 많이 사용하는 합의 방법으로 먼저 체굴한 블록이 선정되는 합의 알고리즘

- 이는 이더리움 포함한 대부분의 코인에서 사용하는 방식이지만 장비가 좋거나 돈이 많아 사람을 많이 고용할 수 있는 집단이 다 챙겨먹을 수 있기에 빈익빈부익부 현상을 초래


합의 알고리즘 (지분증명 PoS)

- 이더리움이 새로 개발하려는 캐스퍼의 일종으로 기준치의 비트코인(블록)을 가지고 있는 사람에게 투표권을 주며 그 투표권을 가진 사람들이 투표권을 행사하여 정격체인을 선택하는 구조.

- 여기서 아까 봤던 practical byzantine fault tolerance 개념이 사용되는데 투표를 진행하였을때 2/3 이상의 사용자가 투표한 체인만 정격체인이된다. 한번 투표를 통해 더 이상 바뀔수 없는 경우 완결한 형태의 체인이 된다.

- 현재 이더리움에서도 사용하려는 개념이며 투표를 하면 0.7%의 이자율을 준다. 이는 투표를 장려하여 빠른 체인 형성을 위해서이다. 하지만 패널티도 존재한다. 만약 투표를 진행하지 않으면 예치금을 깍는다.

- 투표를 진행하고도 또 다른 체인에 투표할 시 페널티로 예치금을 모두 환수한다.

- 하지만 이런 구조는 2/3 체인에 등록되기 위해 지분이 많은 사람에게 몰리게되는 단점이 있음.



합의 알고리즘에 선택되지 못한 블록의 트랜잭션은 어떻게될까?

가장 내가 블록체인 공부하면서 궁금했던 부분이 이부분이다. 만약 내가 생성된 블록에 여러 트랜잭션을 집어넣었는데 내 블록이 선택되지 않아 페기된다면 과연 이 내부에 존재하는 거래내역(트랜잭션은)은 어떻게 될까? 


이는 교수님이 설명을 해주셨는데 블록에 들어가지 못한 트랜잭션은 결국 트랜잭션 큐에 들어가게 되고 블록에 선택될 때까지 거래가 완료되지 않는다고 했다. 그럼 대세 블록에 들어가게 하여 거래를 성사하고 싶으면 어떻게 해야할까?

비싼 수수료를 블록 소유자한테 납부하고 그 블록에 소속되면 된다. 이는 이더리움에서 송금할 때 가스를 주입한다는 방식과 동일하다고 한다.


적용사례

비트코인뿐 아니라 다양한 산업에서 블록체인을 사용한다. 카카오 인증, 멜론 인디음악, 현대카드 SSO등등 하지만 블록체인은 100%의 신뢰를 가지지 못하고 속도의 제약, 수수료 등등 문제가 있어 아직 보편화 되기에는 이른 것 같다.


지금까지 블록체인에 대해 알아보았다. 신기한 기술이지만 그만큼 문제도 많은 것 같다. 초창기니까 더 보완이 되면 좋은 알고리즘이 되지 않을까 싶다.

다들 비트코인붐이 오기 시작하면서 돈을 잃은 사람도 있고, 돈을 얻었다는 사람도 있다.
나는 그 노선에 같이 달리지는 않았지만, 새로운 기술과 트렌드에 뒤쳐지는 느낌이 들어서 늦게나마 공부를 해보고 싶었다.

그 중에서 비트코인의 핵심 기술이라고 불리는 블록체인이 무엇인지 
조사해보았다. (인터넷에 있는 자료를 바탕으로 정리한 내용이다. 출처는 문서 하단에 기재하였다.)







제 3자 인증에서 개인과 개인간의 인증 시스템(P2P)

기존의 화폐거래를 하기위해서는 은행이라는 제 3기관의 인증을 통해 진행되었다.

예를 들어 설명해보자.
만약 위들이라는 사람이 다니라는 사람에게 10만원을 전송하고자 할 때, 위들은 은행에 내 계좌에서 10만원을 다니에게 전송하라고 요청할 것이다. 그럼 은행은 다니에게 10만원을 전송할 것이다. 

우리는 여기서 은행을 제 3기관으로써 신뢰하여 중계를 담당하게 하였다.

하지만 이는 몇몇 단점이 존재한다.
먼저, 그 중계 과정에서 일정의 수수료를 납부해야하는 단점과 돈 흐름에 대한 통제 그리고 장부를 중앙에서 관리하게 됨으로써 장부가 손실이 된다거나 조작될 경우 진위여부파악과 보상을 받기가 까다롭다.

이를 해결하기 위해서 각광받고 있는 기술이 바로 블록체인이다.

블록체인은 이런 제3기관의 중계과정 없이 거래하는 사람과 사람사이에 거래를 하게 되고 그 거래에 대한 장부를 모든 사람들이 나눠가지는 시스템이다.

이런 시스템을 이용하면 모두가 거래에대한 장부를 가지고 있어 조작할 수 없으며, 제 3기관에 거래를 맡기지 않아도 되서 제 3기관에 제약없이 거래를 할 수 있다.


장부기록방식
블록체인 기술은 간단하게 먼저 설명하면 다음과 같다.

거래가 진행되는 내용을 보면 거래 기록이 쌓이게 되는데 그 거래 내역을 적은 종이를 상자에 담고 봉인해야한다. 이때 필요한 봉인번호를 찾아내는 것을 마이닝 또는 비트코인을 채굴한다고 한다.

이해가 가지 않을 수도 있으니 예를들어 설명해보자.

만약 위들이라는 사용자가 다니라는 사용자에게 돈을 10만원을 입금하게 되는 경우,
위들은 모든 사람들에게 다니에게 10만원을 이체한다고 전송하고 모든사람들은 
먼저 위들이라는 사용자가 10만원이 있는지 확인하는 과정을 거친다. 이를 검증하는 절차라고 하는데 검증이 끝난 후 돈을 보냈다는 기록을 장부에 동시에 적어서 보관하는 방식으로 거래가 이루어 진다.

이렇게 기록한 장부를 상자에 보관하기 위해서는 특정한 봉인번호가 필요한대 이를 위해서는 봉인번호를 찾아내야 한다. 비트코인 체굴이라는 것은 결국 이런 봉인번호를 찾기위해서는 문제로 주어지는 특정한 해쉬값을 가지는 input 값을 찾는 과정이라고 생각하면된다.(아래에서 동작 방식 설명) 

먼저 문제를 해결하여 봉인번호를 찾으면 모든 사람들이 이를 검증하고 검증이 끝나면 그 사람은 그 종이를 봉인하게되고 이것이 결국 비트코인을 얻었다고 하는 것이며, 이런 봉인번호를 블록체인에서는 "Proof of Work"라고 한다.

즉 이런 장부를 기록하는 종이를 블록(block)라고 하고, 이런 종이들을 보관하는 종이상자들을 블록체인이라고 한다.

결국 모든 거래는 서로에게 공유되며 그 봉인번호를 찾아서 또다른 연결고리를 찾아가는 과정이 비트코인을 획득하는 과정이라고 보면된다.

출처 : 은평시민신문





거래내역을 변경하고 다시 봉인하면 조작이 가능한가?
그럼 조작이 불가능하다고 하였는데 채굴에 성공한 봉인번호를 가지고 거래내역을 조작한 뒤에 다시 봉인하면 되는거 아닌가? 하는 의구심을 가질 수도 있다.

이미 거래내용이 기재된 거래내용은 현재 발견한 봉인번호와 상관없이 모든 블록들과 연결되어 있기 때문에 하나의  block의 기록된 거래내용 자체를 변경하고자 한다면 모든 거래 내역을 다 조작해야 하기 때문에 불가능에 가깝다.

결국 현재의 block은 이전의 block과 연결되어 있고 그 블록은 또 그 이전 block에 연결되어 있기 때문에 조작하려면 모든 봉인번호를 찾아내야 하는데.. 하나의 봉인번호를 찾아서 비트코인을 채굴하는 것도 어려운 상황에서 보든 봉인번호를 다시 찾아내서 조작한다는 건 현재 기술에서 불가능에 가깝다.

하지만 악의적으로 모두가 함께 조작한다면 조작이 가능하다는 단점은 가지고 있다.



비트코인 체굴 원리
그럼 이런 비트코인의 체굴의 원리가 무엇인지 살펴보자.
비트코인을 체굴하는 것은 금을 캐네는 것과 같다고 해서 마이닝(mining)이라고 한다.

마이닝이라는 단어는 텍스트 마이닝과같이 빅데이터에서도 자주 사용되고 여러모로 현대에서 참 가치를 찾아낸다는 뜻으로써 많이 사용되는 것 같다.

아무튼 위에서 먼저 살펴보았듯이 봉인번호를 찾는 과정을 비트코인을 채굴하는 것이라고 하는데
이는 문제해결을 통해서 얻을 수 있다.

문제는 10분에 한번씩 일정량이 생성되며, 문제를 해결한 사람에게는 비트코인이 부여되는 것이다.
이런 문제를 hashcash라고 한다.

해시는 단반향성으로써 input 데이터로 생성된 out 데이터로 다시 input 데이터를 찾을 수 없다.
또한 들어오는 input 데이터가 하나가 변경되어도 완전 다른 데이터가 출력이된다. 예를들면 hello와 hello1은 완전 다른 hash 값이 출력된다.

그렇기 때문에 대표적인 hash 알고리즘인 sha-256는 경우의수가  2256개이다.
그렇기 때문에 사실 모든 데이터를 다 조회해보는 것은 너무 어렵다.

그래서 비트코인 체굴을 위해서 제공되는 데이터는 문자열과 결과 hash값이다. 
그래서 체굴하고자 하는 사람은 임의의 nonce만을 찾아내면 되도록 문제를 제공한다.



사용자 인증방법 및 거래 방법
중앙에서 이것이 내 비트코인이라는 것을 증명해주는 기관이 없다면 이 비트코인이 내 것이라는 것을 어떻게 증명해야할까?

이는 공개키 암호화 방식으로서 문제를 해결하고 있다.
※ 공개키 암호화 방식


출처 : https://brunch.co.kr/@artiveloper/24



공개키 암호화 방식을 사용하면 누구나 공개키를 통해서 개인키로 서명한 서명을 검증할 수 있다.
=> 특정메시지를 자신의 개인키로 서명하면 다른 사람은 이미 공개된 공개키로 그 서명이 그사람 개인키로 서명한 것인지 확인할 수 있다.

그래서 위들이라는 사용자가 다니라는 사람과 거래를 할 때 다니가 올린 공개키로 다니가 보낸 데이터가 다니의 개인키로 암호화 된건지 인증할 수 있다.

거래과정은 다음과 같다.

돈을 보내는 사람이 공개키와 개인키를 생성해서 돈을 받는 사람에게 전달하고 수표를 작성해서 P2P  네트워크에 전송한다. 이 수표를 사용하기위해서는 돈을 보내는 사람의 개인키가 있어야 한다. 이 수표가 돈을 보내는 사람의 수표가 맞는지 확인은 돈을 보낸 사람의 공개키로 검증해볼 수 있다.

비트코인이란 시스템에서 가장 중요한 부분은 바로 이렇게 돈을 주고받는 거래이다.

돈을 보내는 수표를 발행하기 위해서는 발행하는 사람의 과거으 ㅣ수표 이력을 조회하여 돈이 그만큼 존재하는지 확인한다.





출처 : 네이버 D2



위의 예를 살펴보면 Transaction C는 D에게 보내기 위해 A와 B를 통해 전달 받았던 수표를 가리키고 있다. 

Transaction D는 C에게 비트코인을 전송받았기 때문에 Transaction C가 발부한 수표를 가리키게 된다. 그리고 Transaction C는 D에게 101 비트코인을 전송하고 잔액 49 비트콘인 남게된다.

수표의 뿌리는 마이닝을 통해서 채굴한 비트코인부터 시작이다.
위의 그림에서 Transaction B가 비트코인을 통해서 채굴을 한 뿌리 수표이다.

그럼 위에서 설명했던 내용 중에 위변조에 대한 내용을 다시 한번 확인해보자.
비트코인에서 수표(위에서는 거래장부)를 블록체인에 저장하기 위해서는 여러 개의 수표를 모아서 하나의 블록을 생성하고, 그 블록을 연결리스트로 만들어 저장한다. 

이 블록을 생성하기 위해서는 앞에서  설명했던 hashcash문제를 또 풀어야 한다. 
이 블록자체를 위조할 수 있다고 생각하지만 위에서 설명했던 것 처럼 블록은 연결리스트로 구성될 때 이전 블록의 해시값을 다음 블록에 포함시켜서 중간에 블록의 위조를 막는다.




출처 : D2




Block2는 Block1의 해시값 hash1을 담고 있다. 그렇기 때문에 Block1의 내용이 수정되면 Hash1의 값이 변경되기 때문에 block2도 수정되어야하고 이런과정을 통해 모든 hash 값이 변경되어야 한다.

사실 전세계에 P2P로 연결된 블록체인 기술에서 hash값을 변경해가면서 위변조 하는 것 자체가 불가능에 가깝기 때문에 그정도로 신뢰도가 있다고 판단해도 좋을 것 같다.



만약 비슷한 시점에 봉인문자열을 찾게 된다면?

내가 블록체인을 알아보면서 가장 궁금했던 것은 바로 이 이슈이다.
만약 비슷한 시점에 해답을 찾게 된다면 누가 먼저 찾았는지 알 수 있을까?라는 문제이다.

비트코인은 기본적으로 길이가 긴 블록체인을 원본으로 생각하고, 둘이 길이가 같다면 이중 아무거나 선택해도 문제가 없다는 원칙을 가진다.

블록체인 A를 보유한 사용자는 새로 생성된 블록을 블록체인 A에 추가해 나갈 것이고, 블록체인 B를 보유한 사용자는 새로 생성된 블록을 블록체인 B에 추가해 나갈 것이다. 블록체인 A에 새로 추가된 블록을 블록체인 B의 사용자는 받아들이지 않는다. 블록체인이 다르다는 건 새로 생성된 블록이 가리키는 이전 블록의 해시값이 다르다는 의미이기 때문에 블록체인을 형성할 수 없기 때문이다. 따라서 양쪽 블록체인의 사용자는 완전히 갈라져서 별개의 네트워크처럼 나누어진다.

시간이 지나면 양쪽 사용자 중 컴퓨터 성능이 더 좋은 쪽이 더 빨리 블록을 생성해 더 긴 블록체인을 만들게 된다. 더 긴 블록체인이 아마도 더 많은 사용자가 참여한 블록체인일 것이다. 그리고 둘 중 하나가 블록을 위조하려는 세력이라면 아마도 짧은 블록체인을 가진 쪽이 불순한 세력일 가능성이 높을 것이다. 이제 블록체인 A와 블록체인 B의 길이가 달라지는 시점에 사용자가 짧은 블록체인이 잘못된 블록체인이라고 판단하고 긴 블록체인을 받아들이는 것으로 전략을 바꾼다면 전체 사용자가 가진 블록체인은 곧 하나로 통일된다.

다음 그림은 이 과정을 도식으로 표현한 것이다.




사진 출처 D2




밑에 있는 초록색 블록부터 시작해서 위로 블록체인을 만들어 간다. 특정 시점에 2개의 블록이 동시에 생성되어 블록체인이 나눠질 수 있지만(그림에선 2개로만 나뉘지만 더 많이 나뉘는 것도 가능하다), 곧 어느 한 블록체인이 더 길어질 것이고 짧은 블록체인은 버려진다. 사용자가 정확히 반으로 나뉜다면 양쪽 블록체인이 동일한 길이를 유지하며 길어질 수도 있지만 이렇게 될 확률은 매우 낮기 때문에 곧 어느 한쪽으로 수렴한다. 가장 긴 블록체인(그림에서 진한 검은색으로 표시된 체인)이 블록체인의 원본이 되고 네트워크의 모든 피어가 동일한 블록체인을 유지할 수 있게 된다.



참고 사이트


비트코인 개발 문서

https://bitcoin.org/en/developer-documentation


비트코인 프로그램
https://bitcoin.org/en/bitcoin-core/features/user-interface


출처 : 
http://d2.naver.com/helloworld/8237898 


http://slownews.kr/67899



  1. ㅇㄴㅁ 2018.08.09 16:45

    TREBIT

    코인거래소
    Trebit 이 원화마켓을 오픈합니다 :)
    8월 8일 18시 기준 원화마켓이 오픈이 되었습니다 !

    원화(KRW)마켓 오픈과 함께
    옵저버(OBSR)와 아이온(ION) 8월10일 상장!!!

    특히 옵저버(OBSR)는 전 세계 최초로 트래빗 거래소에 상장되는 코인으로,

    일반 암호화폐와 다르게
    ICO를 진행하지 않고 상장되는 종목입니다.

    원화(KRW)마켓 오픈 기념으로
    거래수수료 0% 이벤트를 진행 중이니
    수수료 부담 없이 거래하시고,
    무려 3억원 상당의
    에어드랍 이벤트의 주인공에 도전해 보세요.

    트래빗고객센터 : 1600-5433
    운영시간 : 평일 09:00 ~ 18:00
    이용문의 : cs@trebit.com

    *옵저버 더 알아보기: http://www.obsr.org/index
    *아이온 더 알아보기: https://ionomy.com/games

+ Recent posts