블록체인

블록체인은 관리 대상 데이터를 '블록'이라고 하는 소규모 데이터들이 P2P방식을 기반으로 생성된 체인 형태의 연결고리 기반 분산 데이터 저장환경에 저장되어 누구도 임의로 수정될 수 없고 누구나 변경의 결과를 열람할 수 있는 분산 컴퓨팅 기술 기반의 데이터 위변조 방지 기술이다. 이는 근본적으로 분산 데이터 저장기술의 한 형태로, 지속적으로 변경되는 데이터를 모든 참여 노드에 기록한 변경 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가능하도록 고안되었다. 잘 알려진 블록체인의 응용 사례는 암호화폐의 거래과정을 기록하는 탈중앙화된 전자장부로서 비트코인이 있다. 이 거래 기록은 의무적으로 암호화되고 블록체인 소프트웨어를 실행하는 컴퓨터상에서 운영된다. 비트코인을 비롯한 대부분의 암호화폐들이 블록체인 기술 형태에 기반하고 있다.

최근 JTBC에서 암호화폐를 주제로 토론을 진행했다. 진행 중, 정재승 교수측의 "암호화폐와 블록체인은 분리하는 것은 어렵다"와 유시민 작가의 "암호화폐와 블록체인을 분리하여 블록체인기술 육성이 가능하다" 라는 의견이 대립했다. 과연 블록체인만을 가져와서 따로 기술육성하는 것이 가능할까?


블록체인은 퍼블릭 블록체인, 프라이빗 블록체인, 컨소시엄 블록체인 이렇게  3가지로 나눌 수 있다.


퍼블릭 블록체인 :  누구든지 열람이 가능한 공개된 장부 개념의 블록체인으로 채굴자들의 해쉬파워(컴퓨팅 파워)로 검증 및 트랜젝션이 이루어 진다. 개인이나 한 단체가 통제하기 힘들기때문에 탈중앙화, 분권화된 시스템이다.


프라이빗 블록체인 : 개인이나 단체가 모든 권한을 가진 형태의 블록체인으로 다른 노드가 네트워크에 참여하기 위해서는 별도의 허락이 요구된다.


컨소시엄 블록체인 : 미리 선정된 노드들에 의해서 장부가 검증되는 반 중앙형 블록체인이다. 블록체인 열람 권한을 공개할 수 도 있고 선택에 따라 비공개 할 수 도 있다. 주로 금융과 관련된 암호화폐(Ripple 등)에 적용된다.

퍼블릭 블록체인의 경우 채굴자들이 참여하여 각 트랜젝션들을 검증하고 수행되도록 한다. 이 과정에서 많은 양의 컴퓨팅 파워가 필요로 하게 되는데, 이에 따른 보상으로 암호토큰을 지급하게 된다.(그 누구도 보상없이 이런 행위를 하지 않기 때문이다.) 따라서, 퍼블릭 블록체인을 사용하게 되면 암호화폐의 개념을 분리하기 힘들어진다.

토론에서 언급된 한교수의 인공지능 차량에 블록체인을 접목한 예시는 프라이빗 블록체인이나 컨소시엄 블록체인과 같은 폐쇄형을 말하는 것 같다. 폐쇄형 블록체인의 경우 암호화폐가 필수적이지 않다.



JTBC 동영상 링크: https://www.youtube.com/watch?v=GfaQgl50Mv4





이더리움(Ethereum)

이더리움은 2015년 7월 30일 비탈릭 부테린(Vitalik Buterin)이 개발하였다. 비탈릭 부테린은 가상화폐인 비트코인에 사용된 핵심 기술인 블록체인 화폐 거래 기록뿐 아니라 계약서 등의 추가 정보를 기록할 수 있다는 점에 착안하여, 전 세계 수많은 사용자들이 보유하고 있는 컴퓨팅 자원을 활용해 분산 네트워크를 구성하고, 이 플랫폼을 이용하여 SNS, 이메일, 전자투표 등 다양한 정보를 기록하는 시스템을 창안했다. 이더리움은 C++, 자바, 파이썬, GO 등 주요 프로그래밍 언어를 지원한다.-위키백과

비트코인은 결제나 화폐의 용도에 집중하는 반면, 이더리움은 결제뿐만 아니라 계약, SNS, 이메일, 투표 등 다양한 애플리케이션을 블록체인 위에서 운영할 수 있도록 한다. 이더리움 위에서 동작하는 앱을 DApp(디앱)이라 부른다.

그렇다면 이런 다양한 DApp들은 이더리움 위에서 어떻게 동작할까?


이더리움 창시자 비탈릭 부테린


바로 스마트 계약(Smart Contract)를 통해 동작하게 된다. 가령 우리는 축구경기의 내기에서 패한사람이 '나는 내기를 한 적이 없어' 라고 부인 할 수 있다. 그래서 우리는 제 3자인 중계인을 이용하게 된다. 이더리움은 이 제 3자인 중계인 역할을 대체하고자 한다. 이더리움을 이용하면, '내일 아스널이 축구경이에서 이기면 A가 B에게 500원을 이체 한다.' 가 중계인 없이 가능하게 된다.

이더리움은 비트코인의 블록체인 구조를 응용하였고 이를 통해 스마트 계약을 가능하게 했다.

이더리움의 트랜젝션에는 다음과 같은 값들을 포함하고 있다.


*메시지 수신처
*발신처를 확인할 수 있는 서명
*발신처가 수신처로 보내는 이더의 양
*선택적(optional) 데이터 필드
*STARTGAS 값: 트랜젝션 실행이 수행되도록 허용된 최대 계산 단계수
*GASPRICE 값: 매 계산단계마다 발신처가 지불하는 수수료

처음 세 개의 값들은 코인들이 보통 가지는 값들이다. 네 번째에 있는 데이터 필드에는 컨트랙트가 수행할 코드를 가지고 있다.  DApp 개발자는 의뢰인으로 부터 트랜젝션 요청이 들어오고 이를 처리할 내용을 작성하여 데이터 필드에 넣게 된다. 위 의 예로 들면 '아스널이 경기에서 이겼는지 확인하고 조건부에 따라 돈을 이체한다.'는 코드가 이 곳에 들어가게 된다.


이때, 데이터 필드의 코드에 잘못된 코드나 무한루프에 빠질 수 있는 코드에 대비하여 다섯 번째의 STARTGAS라는 값이 필요하게 된다. 코드에서 한 계산당 1gas가 사용되는데, STARTGAS는 사용가능한 gas의 수를 의미하고 이를 통해 계산 낭비를 방지한다.



이더리움은 APPLY( )라는 상태 전이 함수를 통해 트랜젝션을 검증하고 수행한다.

APPLY(S, TX) -> S`

컨트렉트 코드 전부 gas가 소모될 때까지 수행하는데, gas가 도중에 부족하다면 수수료 지불을 제외하고 모두 원상태로 되돌린다. 이 때, 수수료는 채굴자가 가져가게 된다. 코드를 수행하고 남은 gas는 다시 발신처에 되돌려준다. 이더리움의 트랜젝션이 오류를 반환할 경우는 다음과 같다. 트랜젝션 형식, 서명, 발신처의 Nonce 일치에 문제가 있다면 오류를 반환한다. 또한 발신처의 잔고가 부족할 때 오류를 반환한다.

채굴 알고리즘도 비트코인과는 조금 다르다. 비트코인은 SHA-256 기반의 채굴방식인 반면, 이더리움은 Ethash 알고리즘을 사용하는데, 이는 무작위로 선택 된 최근 몇 개의 블록내역을 해싱작업하고 결과 값을 내놓는 것이다. 기존 비트코인의 채굴방식의 문제점인 'ASIC에 의한 채굴 장벽'을 낮추기 위해 고안되었다.


출처 및 참고자료: Ethereum white paper




비트코인(Bitcoin)

 블록체인 기술을 기반으로 만들어진 온라인 암호화폐이다. 2008년 10월 사토시 나카모토라는 가명을 쓰는 프로그래머가 개발하여, 2009년 1월 프로그램 소스를 배포했다. 중앙은행이 없이 전 세계적 범위에서 P2P 방식으로 개인들 간에 자유롭게 송금 등의 금융거래를 할 수 있게 설계되어 있다. -위키백과

비트코인의 기술의 핵심은 역시 블록체인이다. 블록체인을 이해하기 전에 알아야할 용어 몇가지 소개한다.

1) 공개키 암호화 방식



공개키 암호방식은 두 개의 키를 이용한다. 하나는 비밀키이고 또 하나는 공개키 이다. 공개키는 말 그대로 누구나 확인할 수 있고, 비밀키는 자신 이외에 아무도 모른 다는 것을 전제로 한다. 평문을 공개키로 암호화 하면 복호화는 개인키로만 가능하다. 따라서 A가 B에게 문서를 보낼 때, B의 공개키로 암호화 하여 보내고 B는 암호화된 문서를 자신의 개인키로 복호화 하여 내용을 확인 할 수 있다. 마찬가지로 B가 A에게 문서를 보낼 때는 A의 공개키로 암호화 한다.

 

2) 디지털 서명


서명은 '행위자가 자기의 동일성을 표시하고 책임을 분명하게 하기 위하여 성명을 쓰는 일'을 의미한다. 즉 자신이 했음을 보증하는 것을 말한다. 도장, 싸인과 같은 것이 알날로그 서명의 예이다. 그렇다면 디지털 상에서 어떤 행위를 자신이 했음을 보증하는 방법이 무엇일까? 바로 디지털 서명이다.

 



 서명은 위에서 설명한 공개키와 개인키가 사용된다. 평문을 M, 해쉬함수를 H, 암호화를 E, 복호화를 D라고 할때, 서명이 필요한 평문을 전송을 위해 개인키로 암호화 한 E[H(M)] 의 암호문을 만든다. 그리고 M과 E[H(M)] 를 함께 전송한다. 받는이는 E[H(M)] 을 보낸이의 공개키로 복호화 한 D[E[H(M)]] = H(M)  ‥‥‥ (1) 을 만들고, 같이 전송받은 평문에 해쉬함수를 취한 H(M) ‥‥‥ (2)를 만들고, (1) 과  (2)를 비교하여 일치하는지 검사한다. 이로써 전송한 사람이 작성하였음을 검증하고 중간에 변조되지 않았음을 확인할 수 있다.  이러한 디지털 서명은 우리가 많이 사용하는 공인인증서에 적용되고 있다.


비트코인

이제 비트코인의 시스템을 알아보자. 비트코인을 좀 들어본 사람이면 트랜젝션(Transaction)이라는 용어를 들어보았을 텐데, 간단하게 말하면 비트코인 거래내역 단위를 의미한다. A가 B에게 1BTC를 전송하면 하나의 트랜젝션이 발생하게 된다.

이때, 비트코인은 이러한 트랜젝션 중 위조된 트랜젝션, 잘못된 트랜젝션, 중복된 트랜젝션 등을 자체적으로 검증하는 시스템을 가지고 있다.  이 원리는 아래와 같다.


'n-1번째의 트랜젝션과 받는이의 공개키'를 송신자의 개인키로 서명한다. 이로 써 누구나 n-1번째 사람이 n 번째 사람에게 이체했음을 'n-1번째 사람의 공개키'로 검증할 수 있다. 이런 구조가 끊임 없이 반복되고 있다.

그러나 누군가 나서서 이러한 검증연산을 컴퓨터로 하기 전에는 옳은 트랜젝션인지 알 수 가 없다. 그래서 비트코인에 채굴이라는 시스템이 있다.



 위 그림에서 Tx는 각 트랜젝션을 의미한다. 블록에는 검증해야할 여러 트랜젝션들과 이전블록의 해쉬값, 타임스탬프가 들어간다. 이때, (이전 해쉬값, 트랜젝션 루트, 타임스탬프, Nonce)에 해쉬함수를 취해 E보다 작은 값을 가지게 하는 Nonce를 찾는 것이 채굴의 과정이다. 여기서 E는 목표 값(현재 기준 약 2^192)보다 낮은 값이 나올 때까지, 'SHA256 해싱'을 반복한다. 이를 만족하는 Nonce값은 여러개가 나올 수 있는데, 해쉬결과를 더 작게하는 Nonce가 우선순위를 갖는다.

이러한 블록은 10분에 1개씩 생겨나게 되고 블록의 Nonce를 찾은 채굴자에게 비트코인 보상이 주어지게 된다. 처음에는 블록당 50개의 비트코인이 보상으로 주어졌으나 210,000개의 블록마다 보상에 반감기가 적용되어 2013년에는 25개의 블록이 보상으로 주어졌고, 2020년에는 6.25개의 비트코인이 보상으로 주어질 것으로 본다. 비트코인의 총 발행량은 2100만개로 제한되어있어서 2140년쯤 모두 채굴되지만, 거래 수수료 또한 채굴자가 받을 수 있어서 비트코인의 시스템을 지속 될 수 있게 하였다.



+ Recent posts