블록체인의 동작 원리 - 비트코인


이번 글에서는 블록체인의 동작 원리에 대해 대략적으로 알아보려고 합니다. 블록체인 기술은 암호화폐마다 세부적으로 기술들이 다를 수 있는데, 이 글은 비트코인을 기준으로 작성했습니다.

해시

해시 함수는 임의 길이의 데이터를 입력으로 받아 고정된 길이의 데이터로 출력하는 함수입니다. 가장 쉬운 해시 함수의 예시로는 나머지 연산이 있습니다. 임의의 정수를 n으로 나누는 함수는 0~n-1의 고정된 값을 출력하기 때문에 위의 정의에 부합합니다.

해시 함수의 일종으로 암호화 해시 함수(Cryptographic hash function)가 있는데, 일반적인 해시 함수에서 몇 가지 특성을 더 가지고 있습니다. 그 중 가장 중요한 것은 출력값에서 입력값을 유추하는 것이 거의 불가능해야 한다는 점입니다. 그런 면에서 방금 언급한 나머지 함수는 그렇게 좋은 해시 함수라고 하기는 어렵습니다. 현재 가장 널리 쓰이고 또 많이 알려진 암호화 해시 함수 중 하나는 SHA-256인데 비트코인을 포함한 많은 암호화폐들이 사용하는 해시 함수입니다.

블록

비트코인 블럭

블록체인이라는 이름에서 알 수 있듯이 블록체인은 블록들로 구성되어 있습니다. 블록은 트랜잭션, 이전 블록의 해시 값, 타임스탬프, Nonce, 해시 값으로 구성되어있습니다.

트랜잭션

블록체인의 각 블록은 여러 트랜잭션 데이터를 포함합니다. 트랜잭션의 검증은 공개키 암호화 방식을 사용합니다. 개인이 가진 비공개 키를 이용해 해당 트랜잭션의 디지털 사인을 만들면 모두가 공개키를 이용해 해당 트랜잭션의 유효성을 확인할 수 있습니다.

이전 블록의 해시 값

각 블록은 블록들이 연결되어있는 순서를 결정하기 위해 이전 블록의 해시 값을 갖고 있습니다. 결과적으로 가장 최근 블록의 무결성은 이전 블록들의 무결성을 보여줍니다.

Nonce, 해시 값

Nonce는 새로운 블록의 해시 값이 n개의 연속된 0으로 시작하도록 하는 임의의 값입니다. 새로운 블록을 생성하기 위해서는 새 블록의 트랜잭션, 이전 해시 값, nonce를 포함한 데이터를 해시 함수에 넣었을 때 해시 값이 000...으로 시작하도록 하는 nonce를 찾아야 합니다. 이 과정을 흔히 채굴이라고 합니다. 블록 생성자에게는 채굴의 대가로 일정량의 비트코인을 제공합니다.

Proof of Work

블록을 생성할 때 요구되는 0의 갯수 n은 블록체인의 채굴자들의 전체 컴퓨팅 파워에 따라 변합니다. 비트코인의 경우 새로운 블록이 생성되는데 걸리는 시간이 10분이 되도록 난이도를 조정합니다. 이 때 블록이 새로 생성되는데 소요되는 시간을 블록 타임이라고 합니다. 이와 같은 방식의 블록 생성 방식을 작업 증명(PoW, Proof of Work)이라고 합니다.

비트코인의 경우 채굴 시 보상으로 제공되는 비트코인의 양이 시간이 지남에 따라 절반씩 줄어들도록 설계되어 있어 비트코인의 최대 발행량은 시작부터 2100만 BTC로 정해져있습니다.

Longest chain rule

새로운 블록 생성이 완료되면 생성한 노드에서는 해당 블록을 다른 노드에 브로드캐스팅을 하고 다른 노드들은 해당 블록을 추가하는 방식으로 블록체인은 동작합니다.

하지만 만약 특정 노드에서 새로운 블록에 조작을 가하고 브로드캐스팅을 한다면 비정상적인 블록이 체인에 연결될 위험이 존재합니다. 이를 피하기 위해 새로운 블록이 추가되어도 바로 해당 블록을 추가하는 것이 아니라 다른 블록이 배포되는 것을 기다리는데, 만약 조작된 블록이 추가되었다면 정상적인 블록 생성 브로드캐스트를 받으면 체인은 잠시 두 갈래로 갈라집니다. 그리고 일정 블록을 더 추가한 후 더 긴 체인을 정상적인 체인이라 판단하고 채택합니다. 이 경우 조작을 가하려는 노드의 컴퓨팅 파워가 전체 블록체인의 컴퓨팅 파워의 50%가 넘지 않는 이상 조작된 블록이 전체 블록체인에 채택될 수 없습니다. 이는 반대로 말하면 전체 컴퓨팅 파워의 51% 이상을 독점하면 조작이 가능해진다는 것인데, 이를 이용한 공격을 51% 공격이라 합니다.