본문 바로가기
투자 이야기/암호 화폐

비트코인 암호화 방법인 해시함수와 루트해시 이해하기

by 곰같은 남자 2022. 1. 23.

우리는 비트코인을 암호화폐라고 이야기합니다. 누군가가 악의적으로 거래 내역을 위변조 하지 못하게 장부를 암호화했기 때문이지요. 그리고 어떻게 암호화를 했는지 이해하기 위해서는 해시(Hash) 함수와 루트 해시라는 개념을 이해해야만 합니다. 기술적 이야기를 제외하고 충분히 이해할 수 있도록 쉽게 적어보도록 하겠습니다. 

혹시 오늘의 글이 이해가 되지 않는다면 과거 발행한 글을 읽고 오면 더 수월하게 읽으실 수 있습니다. 글 아래에 링크를 연결해두도록 하겠습니다. 

 

 

비트코인의 암호화 방법인 해시(Hash) 함수

해시 함수는 무작위적인 길이의 데이터를 지정된 길이의 데이터로 바꿔주는 함수입니다. 말이 어렵지요. 하지만 우리가 중학교 때 배운 함수로 대체하여 생각하면 이해가 훨씬 쉽습니다. 예를 들어 보도록 하겠습니다.

 

4,187,233x=y라는 일차 함수가 있습니다. x에 입력하는 숫자에 따라 y값이 나오게 됩니다. 만약 x에 48,756,172를 입력하면 y값은 204,153,452,352,076이라는 값이 나오게 됩니다. 매우 간단하지요. 그런데 반대로 204,153,452,352,076이라는 숫자를 주고 "내가 몇과 몇의 곱으로 이 숫자를 만들었는지 맞춰봐"라고 물어본다면 맞추기가 쉬울까요 어려울까요. 매우 매우 어려울 겁니다. 여기까지 동의하면 해시함수는 그다지 어렵지 않습니다.

 

무작위적인 길이의 데이터를 입력하면 지정된 길이의 데이터가 나오는 해시 함수가 있다고 생각해보겠습니다. 만일 거래가 발생하여 '유재석은 노홍철에게 5,000만 원을 송금했다.'라는 데이터가 들어오면 해시 함수는 이를 암호화하기 위해 길이가 지정된 함숫값 '4839e0ae81j13hu29878d6ay8aef55d8744dhd6a5ee'를 만들어냅니다. 왜 저런 함숫값이 나왔는지 궁금해할 필요는 없습니다. 원래 그렇게 설계된 함수일 뿐입니다. 

중요한 점은 어떠한 경우에도 '유재석은 노홍철에게 5,000만 원을 송금했다'라는 데이터가 입력되면 위의 지정된 함숫값으로만 출력이 됩니다. 다른 결괏값은 나오지 않습니다. 

 

이때 유재석이 노홍철에게 10,000원을 송금할 수도 있고, 정준하가 박명수에게 3,000원을 송금할 수도 있겠지요. 입력된 데이터의는 제각각 다를 텐데 해시 함수를 통과한 데이터는 길이가 정해진 문자열로 대체돼서 나오게 됩니다. 물론 데이터마다 함숫값은 전부 다르겠지요. 그저 길이만 같을 뿐입니다.

 

위의 204,153,452,352,076라는 숫자를 제가 몇 곱하기 몇으로 만들었는지 맞추는 게 어렵다는 것을 인정하면, '4839e0ae81j13hu29878d6ay8aef55d8744dhd6a5ee'라는 값이 어떠한 거래 내역 데이터인지 확인하는 것은 불가능하다는 것을 인정하실 겁니다. 

원본 데이터를 확인하려면 어마어마한 에너지가 소비되기 때문에 원래의 데이터에 접근이 어렵고 거래의 위변조도 불가능하겠지요. 이러한 방식을 통해 우리의 모든 거래 내역(비트코인에서는 트랜잭션)은 암호화되어 기록됩니다. 

 

 

거래 내역 체인을 연결하기 위한 루트 해시

블록체인은 블록을 체인 형식으로 묶어나가는 것을 뜻합니다. 그리고 블록은 거래 장부의 역할을 하는데, 비트코인의 블록은 10분에 하나씩 만들어집니다. 이는 거래가 발생했든 하지 않았든 저절로 만들어집니다.

그런데 새롭게 생성된 블록에 기존 발생했던 모든 거래 내역을 옮겨 적는 것은 여간 불편한 것이 아닙니다. 블록이 한두 개일 때야 가능하지만, 1,000,000번째 블록에 999,999번까지 있었던 거래 내역을 옮겨 적으려면 장부 공간을 비효율적으로 활용하게 되겠지요. 그래서 나온 방법이 루트 해시입니다. 

 

아이디어는 간단합니다. 각각의 거래 내역의 해시 함숫값을 모아 하나의 해시 값을 갖게 만드는 것이지요. 그림으로 이해하는 게 말보다 훨씬 쉽습니다.

 

각각의 블록체인에는 거래 내역 해시값이 있고, 블록의 해시값이 다음 블록으로 연결되는 모형을 설명해둔 그림
블록체인 루트해시 모형

위의 방식으로 기존의 거래 내역과 바로 전 블록의 해시값을 통해 새로운 해시값을 만들어냅니다. 다음번 블록에도, 그 다음번 블록에도 체인을 연결해 나아가는 것이지요. 이때 만일 하나의 해시값을 바꾸면 어떻게 될까요? 어떠한 경우에도 입력값이 달라지면 해시값이 변하기 때문에 하나의 해시값이 변경되면 뒤에 있는 모든 해시값은 전부 틀어지게 되겠지요.

이를 통해 중간의 거래 내역 위변조가 있었는지 없었는지 확인하는 과정을 거치게 됩니다. 누군가가 악의적으로 해시값을 바꿀 경우 바로 확인이 가능하겠지요.  

 

비트코인의 문제는 여전히 남아있습니다.

이제 비트코인이 어떻게 분산화를 시도했는지, 거래의 내역은 누가 보증하는지, 거래 내역을 어떻게 암호화하는지, 블록을 어떠한 방식으로 연결하는지까지 조금 이해하게 되었습니다. 그러나 문제는 여전히 남았습니다. 과연 시스템에 문제가 생겼을 시 각각의 참여자들은 어떠한 방식으로 합의할지 결정을 해야 합니다. 이는 자연스럽게 비잔틴 장군 문제 이야기로 넘어가게 됩니다.

 

 

함께 읽으면 좋은 글 : 비트코인의 분산 장부와 타임스탬프 이해하기 

 

비트코인의 분산 장부와 거래 기록(타임스탬프) 이해하기

현재의 금융거래 시스템에서는 금융 당국이 A와 B사이의 거래가 이루어졌다는 원장을 관리하고 보증합니다. 이를 중앙화 된 거래 시스템이라고 하지요. 그러나 탈중앙화를 목표로 하는 비트코

lljjww.tistory.com


글을 읽어주셔서 감사합니다.

댓글