블록체인 불변성의 원리
시리즈 1편부터 정주행 하기 -> [쉽게 배우는 비트코인 작동원리]
장부를 생성하기 위해 쏟아부은 작업과 비용을 증명함을 통해 장부의 합의를 이루는 작업증명(PoW) 시스템에서 블록체인은 그 근거와 결과물로써 존재한다.
따라서 블록체인의 구성 요소에 대한 기술적 이해가 선행되면 채굴, 하드포크 등 장부를 살아있게 하는 규칙들에 대한 이해가 수월해진다.
블록체인 장부를 하나로 묶는 데에 가장 큰 기여를 하는 기술이 있다면 단언컨대 SHA-256 해시 알고리즘일 것이다.
해시 알고리즘이란 임의의 데이터를 고정된 길이의 해시(결괏값)로 출력하는 함수이다. SHA-256 함수는 이름대로 결괏값이 항상 256 bits(또는 32 bytes)로 고정되어 있다.
(효과적인 이해를 위해 링크로 실습해 보는 것을 추천)
링크에서 제공하는 함수에 "비트코인"이라는 데이터를 넣으면 다음과 같은 해시가 나온다.
f386c9a9402b1adcfccd9d7f1b18aa6c60a583e82fca35b59029f4bcc776649e
다음은 1~5까지의 숫자를 뒤에 추가했을 때 생기는 결과이다.
비트코인1 => a41e963...
비트코인2 => c269dfb...
비트코인3 => acace56...
비트코인4 => 6776d09...
비트코인5 => 12286c6...
보이는 바와 같이 입력값에는 규칙이 존재하지만 해시 결과에서는 패턴이 보이지 않는다.
이처럼 함수의 해시가 데이터의 작은 변화에도 완전히 다른 값을 도출하는 현상을 "눈사태 효과"라고 부른다.
얼핏 보면 랜덤 같지만 어느 컴퓨터에서나 SHA-256 함수를 돌리면 위와 같은 해시를 얻을 수 있다.
SHA-256 함수의 가장 큰 특징은 눈사태 효과로 인해 역추산이 불가능에 가깝다는 것이다.
[특정 데이터] -> [해시]를 계산하기는 매우 쉽지만, 반대로 [해시] -> [특정 데이터]를 찾기 위해서는 모든 경우의 수의 데이터를 일일이 다 계산하는 방법밖에 없다.
이를 수치화한 것으로 비유하자면, 원하는 해시값에 상응하는 데이터를 찍어서 맞추기란 광활한 우주 속 특정 원자 하나를 때려 맞히는 수준의 난이도와 맞먹는다.
이렇게나 엄청난 기술이 비트코인 블록체인에서 활용된다니, 벌써부터 설레지 않을 수 없다.
SHA-256 함수는 이후 블록 생성 과정에서 사용되니 잘 알아두도록 하자.
이전 글을 참고하자면, 비트코인의 블록에는 약 10분 동안 진행된 비트코인의 거래내역들이 자리를 잡으며, 블록들이 연결고리를 통해 꼬리에 꼬리를 무는 형태를 블록체인이라 부른다.
다음은 블록이라는 장부를 구성하는 여러 데이터 중 가장 핵심적인 부분이다.
Nonce(난스)
Transaction(자료 또는 거래내역)
Previous Hash(이전 블록의 값)
Hash(해시)
(효과적인 이해를 위해 링크로 실습해 보는 것을 추천)
링크에서 제공하는 초록색 박스는 각각 하나의 블록을 의미한다.
가장 첫 번째 블록인 블록 1은 Genesis Block(제네시스 블록)이라고도 불린다.
이 블록 이전에 존재하는 장부가 없어 말 그대로 태초의 상태이기 때문이다.
(실제로는 0번블록을 첫 블록이라 칭한다.)
블록 1의 [난스 + 자료 + 이전 값 + 기타정보]를 더한 값을 Block Header(블록헤더)라고 부른다. 이를 SHA-256 함수에 넣어서 나온 값을 한 번 더 함수에 넣으면 해당 블록의 해시를 얻을 수 있다.
블록의 각 구성요소는 자칫하면 복잡해질 수 있기에 링크의 데모 블록체인을 통해 쉽게 알아보도록 하자.
블록 1에 임의의 거래내역을 기록하려고 한다. 여기서 자료에는 다음과 같은 두 개의 거래내역이 존재한다.
-Bob이 Alice에게 1 비트코인 전송
-Alice가 Charles에게 0.5 비트코인 전송
거래내역을 입력하자마자 블록 1의 해시가 변경됐다. 앞에서 다룬 "눈사태 효과"로 인해 SHA-256 함수에 입력되는 [난스 + 자료 + 이전 값 + 기타정보] 중 일부인 자료의 변경이 해시 전체의 변화를 가져왔기 때문이다.
데이터의 변화로 인해 해시가 변경되었다면, 블록이 빨간색으로 변한 이유는 무엇일까? 블록이 빨간 상태에서 채굴 버튼을 누르면 다음과 같은 결과가 나온다.
블록이 초록색으로 변함과 동시에, 난스는 11316에서 138548로, 해시는 824722... 에서 0000b0...으로 바뀌었다. 이들을 제외한 다른 값은 모두 변하지 않았다.
추후에 채굴이라는 개념을 다룰 때 더 심층적으로 서술하겠지만, 철저하게 블록의 관점에서 볼 때 채굴이란 난스를 무작위로 변경해서 규칙에 맞는 해시를 찾아내는 과정이다.
링크에 존재하는 채굴이 완료된(초록색) 블록들이 가지고 있는 공통점은 모두 0 4자리가 해시의 앞자리로 존재한다는 것이다(규칙은 매번 다를 수 있음).
블록의 채굴자들은 규칙에 맞는 블록을 생성하기 위해 [난스 + 자료 + 이전 값 + 기타정보] 중 바뀌어도 거래 내역에 지장을 주지 않는 난스를 무작위로 변경한다.
만약 변경 중 해시값에서 0 4자리가 발견되면 채굴이 완료되고, 블록이 네트워크에 등록된다.
난스를 무작위로 입력하는 과정에서 엄청난 양의 전기가 소모되는데, 이 노력에 대한 대가로 블록을 생성한 채굴자는 비트코인을 보상으로 받는다.
생성된 블록들이 연결된 형태인 블록체인은 그 불변성을 매우 독특한 방식으로 유지한다.
위 그림을 기준으로 블록체인이 생성되는 방법을 알아보자.
1). 블록 1이 채굴되어 6U9P2...라는 해시값을 갖는다.
2). 6U9P2...는 블록 2의 이전 값(Previous Hash)이 된다.
3). 블록 2의 [난스 + 자료 + 이전 값 + 기타정보]를 SHA-256 함수에 넣고 채굴을 실행하면 8Y5C9...라는 블록 2의 해시값을 찾을 수 있다.
4). 8Y5C9...는 블록 3에서 이전 값이 된다.
*앞자리에 0 4자리가 와야 한다는 규칙은 적용하지 않았음.
각 블록들이 이처럼 이전 블록들과 SHA-256 함수를 통해 연결되어 있기에 만약 누군가 중간 블록의 내용을 위변조 한다면 다음과 같은 상황이 벌어진다.
(효과적인 이해를 위해 링크로 실습해 보는 것을 추천)
사진을 클릭해서 자세히 보면 3번 블록에 "위변조 된 거래"가 적혀있다.
하지만 거래를 위변조 시 해당 블록의 해시가 바뀌기 때문에 그다음 블록인 4번 블록에 들어갈 이전 값 또한 변경된다.
이는 4번 블록의 해시 또한 변경하게 되어, 그 뒤에 생성된 모든 블록들의 연결고리를 끊어놓는다.
공격자가 거래 한 번을 위조하기 위해서 그 이후에 생긴 모든 블록들을 다시 채굴해야 한다면 이는 경제적으로 큰 손해일 수밖에 없다.
또한 현존하는 진짜 장부보다 빠른 속도로 채굴하지 않으면 애써 위변조 한 장부가 네트워크에서 거부되기에 공격할 동기가 사라진다.
위와 같은 블록체인의 특성 덕분에 비트코인은 제3자를 신뢰하지 않아도 코드로서 작동하는 무신뢰 장부를 생성 및 유지할 수 있는 것이다.
다음 포스팅에서는 비트코인 지갑은 어떤 역할을 하는지, 소유권의 설정과 관리에 대한 기술적 지식을 다룰 예정이다.
Brownworth, Anders. Blockchain Demo, andersbrownworth.com/blockchain/. Accessed 2 Jan. 2025.
Ponteves, Hadelin De, et al. “Understanding SHA256 Hash.” Blockchain A-Z. 1 Jan. 2025, https://www.udemy.com/course/best-blockchain-az. Accessed 1 Jan. 2025.