개발 공부/블록 체인

블록체인 개념 정리 ① [ 블록체인의 구조와 P2P 시스템 , 해시함수와 해시값 도출 ]

수달하나 2019. 3. 5. 12:40

안녕하세요 수달입니다.

오늘은 차세대 기술로 각광받고 있는 블록체인에 대해 포스팅하겠습니다.

일단 기본적으로 블록체인이란 것은

블록이 체인 형태로 이루어져 있는 것을 말합니다.

하지만 블록체인을 정확하게 풀어본다면

블록체인이란 무결성을 확보하고 유지하기 위해 순서에 따라 연결된 블록들의 정보 내용을

암호화 기법과 보안 기술 알고리즘으로 구성한 원장의 순수 분산 P2P 시스템입니다.

무결성이라는 것은 시스템이 정상 방법으로 예정된 기능을 수행할 경우, 고의 또는 부주의로 인한

비인가 조작이 발생하지 않는다는 정보 시스템 속성을 의미하고

(어떠한 이유로든지 오류가 발생하지 않는 상태)

원장이라는 것은 회계상 모든 거래의 발생 내용을 작성한 장부를 말합니다.

블록체인을 정확하게 이해하기 위해선

블록체인을 설명하기 전에 먼저 네트워크의 구조를 알아야 합니다.

 

 

중앙 통제 시스템과 분산 시스템

 

 

하나의 네트워크를 구성하기 위해서는 여러 시스템이 사용되는데

그중 가장 대표적인 시스템이 중앙 통제 시스템과 분산 시스템이라고 할 수 있습니다.

사실상 두 가지의 시스템을 기반으로 분산형 중앙통제 시스템과 같은 혼합된 통제 시스템이 등장하긴 하지만

다룰 내용의 예외 부분이기 때문에 고려하지 않겠습니다.

현재 블록체인이 사용되지 않는 대다수의 네트워크 구조는 중앙 통제 시스템의 관리받게 됩니다.

예를 들어서 은행을 생각해 본다면 우리나라엔 여러 가지 은행이 존재하지만

그 은행들은 모두 금융감독원이라는 하나의 중앙 기관의 통제를 받게 됩니다.

하지만 오른쪽에 있는 분산형 네트워크 시스템은 중앙 통제 기관이

존재하지 않게 되어 피어와 피어가 직접적으로 연결된 P2P 시스템

즉 Peer To Peer 시스템을 구성하게 됩니다.

(피어:Peer는 개개인의 사용자를 의미합니다.)

즉 블록체인 기술은 이 분산형 네트워크 시스템에서 발전한 형태라는 것입니다.

새로운 단어의 등장(블록체인)의 측면으로 평가해 봤을 때 완전한 새로운 기술이라고 생각하는 사람이 많지만

기존의 존재하던 시스템의 업그레이드로 생각하는 사람들에게는 블록체인 기술이라는 것이

완전히 새로운 것이 아닌 분산형 네트워크의 한층 업그레이드된 버전이라고 생각할 수도 있겠습니다.

 

 

 

 

 

블록체인의 구조 (간략화)

 

 

 

 

블록체인의 구조는 마치 블록이 체인처럼 연결이 되어있다고 해서 블록체인이라고 불린다고 설명했습니다.

하지만 위의 그림을 살펴본다면 사실 체인처럼 연결된 것이 아니라

현재 블록 안에 "해시값"이 이전 블록을 가리키는 형태로 구성되어있다고 생각하면 됩니다.

그림에서 보이는 R1, R2, R3는 해시값이며

각각의 해시값 들은 이전 블록을 가리키는 것이지 이전 블록의 데이터를 가리키는 것이 아닙니다.

데이터는 블록의 일부분에 해당하게 됩니다.

이제 블록이 어떻게 연결되어있는지를 알게 됐으니

블록체인을 가능하게 만드는 기술 중 하나인 "해시"라는 것을 살펴볼 필요성이 있습니다.

 

 

 

해시 함수를 통한 해시값 뽑아내기

 

 

 

 

해시 함수는 어떠한 값을 해시 함수를 통해 해시값으로 변형 시켰을 때

길이가 일정한 유일한 값을 갖도록 하는 함수이다.

위의 그림처럼 "블로그"에서 "블러그" 라는 모음 하나만 바뀌어도 해시값이 완전히 달라지는 것을

볼 수 있는 것처럼 해시값을 통해서 원본을 추론할 수 없도록 해야 합니다.

 

여기서 많은 사람들이 오해하는 것 중에 하나가 해시 함수라는 것이 정해진 함수로 착각하는 것인데

"해시 함수"라는 것은 함수의 개발자의 목적에 따라서 자유롭게 변화시킬 수 있기 때문에

특정한 한 가지의 함수를 의미하는 것은 아닙니다.

이제 블록의 연결을 이해하기 위해서 심화된 해시값 도출을 생각해 봐야 합니다.

많은 사람들이 비트코인을 하면서 채굴 혹은 마이닝에 대한 개념을 들어봤을 것이라고 생각합니다.

하지만 채굴과 마이닝이 해시값을 찾아가는 과정으로만 알고 있지

어떤 형식으로 해시 값을 찾아간다는 것인지는 알지 못합니다.

또 해시값을 도출하는 과정을 위에서 보여주었는데

"어떤 형식으로 해시값을 찾아간다"는 것은 무슨 말인가라고 생각할 수 있습니다.

왜냐면 해시값은 해시 함수에 데이터를 넣어서 반환되는 값이라고 설명했기 때문입니다.

하지만 사실 블록체인에서의 해시값은 해시 함수를 통해서만 결정되는 것이 아닙니다.

 

난스와 해시값의 난이도(제약조건) 설정

 

 

"해시값을 찾아냈다"라는 것은 곧 난이도(제약조건)

부합하는 해시값을 도출했다는 것을 의미하며 또한

Nonce 값을 찾아냈다는 것을 의미합니다.

Nonce라는 것은 값이 없다 혹은 정해지지 않은 값을 의미합니다.

예를 들어서

난이도(제약조건)에 따라서 난이도가 1이면 해시값의 첫 번째 값이 0으로 시작하고

난이도가 2면 해시값의 첫 번째 값과 두 번째 값이 0으로 시작하고

난이도가 3이면 해시값의 첫 번째, 두 번째 그리고 세 번째 값까지 0으로 시작하는

블록을 생성한다고 생각해 보겠습니다.

데이터만을 가지고 해시값을 도출한다면 한 개의 유일한 해시값이 생성되기 때문에

블록 생성에 있어서 난이도를 조절할 수가 없습니다.

따라서 난이도를 올리거나 내리기 위해서 알 수 없는 임의의 값 Nonce를 이용하게 됩니다.

예를 들어 난이도(제약조건)가 3인 블록을 생성할 때

해시의 값을 000▩▩▩▩▩▩으로 나타내기 위해 난스의 값에 무작위의 임의 값을 계속적으로 넣어주어서

해시값의 첫 번째부터 세 번째 자리의 값이 모두 0이 되는 그런 해시값을 찾는 것입니다.

그리고 이때 난스를 찾았다는 말과 함께 새로운 블록이 생성됐다고 말합니다.

결론적으로

해시값을 찾았다 = 난스를 찾았다 = 새로운 블록을 생성했다.

라고 말할 수 있으며 이러한 과정이 비트코인에서 채굴 혹은 마이닝으로 불리게 됩니다.

비트코인에서는

알 수 없는 Nonce의 값을 무작위로 대입해서 난이도(제약조건)에 맞는 해시값을 찾아야 하기 때문에

소모되는 시간과 전력 낭비가 발생하고 그에 따른 보상으로 비트코인이라는 가상화폐를 받게 됩니다.

잠시 비트코인에 대한 얘기를 더 해보자면 초기 비트코인의 블록 생성 난이도는 매우 낮기 때문에

일반 컴퓨터로도 채굴 이 가능했으나 시기가 지나고 유입되는 인원이 많아짐과 동시에

난이도는 점점 올라갔기 때문에 일반 PC에서는 채굴이 불가능하여

채굴을 위한 사람들이 직접 모여서 POOL을 이루고 연산양을 합하는 방식으로 채굴을 하게 됐습니다.

또한 비트코인이 한창 핫할 때 그래픽카드가 채굴에 도움이 된다고 하여

가격이 급상승했던 적이 있었습니다.

다음 포스팅은 블록체인의 데이터 머클트리와 암호화 기법을 통한 트랜잭션 검증에 대해 살펴보겠습니다.

 

 

 

 

 

 

감사합니다.