Faythe Tech Blog for Information Security and Cyber Threat Intelligence

Blockchain (블록체인)

이 글에서는 블록체인(Blockchain)에 대한 기본적인 개념과 동작 원리에 대해서 설명한다.

블록체인의 등장 배경

블록체인(Blockchain)은 2008년 사토시 나카모토(Satoshi Nakamoto, 가명)에 의해 발표된 논문인 “Bitcoin: A Peer-to-Peer Electronic Cash System“라는 논문에서 처음 등장한 개념이다. 논문의 제목에서 유추할 수 있듯이, 블록체인 기술은 비트코인(Bitcoin)을 실현하기 위한 기반 기술이며 비트코인은 전자 화폐다. 그동안의 금융 거래 체계는 거래를 위해 은행 등의 금융 기관을 거쳐야만 했으며, 기업간 혹은 국가간 거래에서는 이러한 절차로 인해 수수료 등의 형태로 시간과 비용 소모가 존재했다. 기존 금융 거래 시스템이 이러한 번거로운 절차를 고집했던 이유는 금융 거래상의 안전성때문이었는데, 블록체인과 비트코인은 이러한 안전성 문제를 기술적, 수학적, 암호학적으로 해결함으로써 전통적인 은행이 수행하던 역할을 완전히 대체하는 것이라고 볼 수 있다.

기존의 문제

왜 은행이라는 제 3의 기관(Third-party)을 거쳐 거래하는 형태의 불편한 방식이 유지되어왔나? 그 이유는 거래의 안전성 떄문이다. 금융거래는 특성상 거래의 내용이 정확히 수행되어야 한다는 점의 중요도가 매우 높다. 신뢰할 수 있는 제 3자를 거치게 되면 제 3자가 거래의 내용과 절차를 보장해줄 수 있다. 이러한 방식은 가장 대표적인 금융 거래 문제인 이중 지불 문제(Double spending problem)에 대한 위험이 낮다고 볼 수 있다.

이중 지불 문제

매 초마다 수만~수백만건의 금융 거래(Transaction, 트랜잭션)가 발생하는 금융 시스템(혹은 네트워크)가 있고, 그 금융망 안에 있는 Alice라는 사람이 동일한 망 내부에 있는 Bob과 Carol이란 두 사람에게 돈을 송금하려 한다고 가정해보자.

Alice는 $100을 소유하고 있고, Bob과 Carol에게 각각 $80씩 송금하려고 한다. 기존의 은행 시스템에서는 아마 다음과 같은 거래 내역이 발생할 것이다.

  1. Alice -> Bob, $80
  2. Alice -> Carol, $80

물론 위 경우, 첫 번째 트랜잭션이 발생한 이후 Alice의 잔고는 $20이기 때문에, 두 번째 트랜잭션은 수행이 불가능하며, 은행은 두 번째 트랜잭션을 기각할 것이다.

그러나, 은행이란 관리/제어 기관이 없는 금융망에서의 거래는 거래를 수행하고자 하는 사람이 해당 트랜잭션을 만들고, 이를 주변에 존재하는 모든 다른 사람(Node, 노드)들에게 알림(Broadcast)으로써 거래가 진행된다. 만약 금융망 안에 존재하는 모든 노드(사람)들이 동일한 거래 내역을 동일한 시간에, 동일한 순서로 듣는다면 굳이 은행이라는 중앙 제어 기관을 거치지 않더라도 각자의 잔고를 계산하는 데에 문제가 없을 것이다. 그러나 네트워크상에는 필연적으로 지연(delay)이 존재하며, broadcasting된 패킷들이 전파되는 과정에서 특정 노드에게 첫 번째 트랜잭션보다 두 번째 트랜잭션을 먼저 전달되는 상황이 발생할 수 있다. 만약 Alice가 악의적인 의도로 첫 번째 트랜잭션과 두 번째 트랜잭션을 거의 동시에 발생시킨다면 전파되는 트랜잭션 정보의 불일치 확률이 크게 올라간다. 따라서 금융망은 어떤 트랜잭션을 인정해야 하는지에 대한 정확한 판단을 할 수 없게 된다.

블록체인 기술은 트랜잭션에 대한 이중 지불 문제를 기술적으로 해결함으로써 전자 화폐의 실현 가능성을 증명했다. 이 문제를 어떻게 해결했는가에 대한 설명은 아래에 기술되어있다.

블록체인의 동작 원리

블록체인은 모든 거래내역이 적힌 거래 원장(ledger)을 점차 축적되는 블록의 형태로 저장한다. 다음 그림은 Satoshi의 논문에서 소개된 블록체인의 개념도이다.

Blockchain Architecture

블록체인은 해시 함수(Hash Function)과 같은 암호학적 알고리즘(Cryptographic Algorithm)에 기반한다. 블록체인 네트워크에는 사용자(User)와 채굴자(Miner)가 존재하며, 사용자는 트랜잭션을 발생시키는 일반 사용자들이고, 채굴자들은 트랜잭션이 승인될 수 있도록 채굴(Mining) 과정을 수행해주는 노드들을 의미한다. 블록체인상에서의 거래는 일반적으로 다음과 같은 순서로 진행된다.

  1. 일반 사용자들이 트랜잭션을 발생 (상시 발생)
  2. 채굴자들은 자신들이 승인하고싶은 트랜잭션 데이터들을 마이닝 풀(Mining Pool)에 저장
  3. 채굴자들이 자신들의 Mining Pool에 담긴 트랜잭션을 통해 채굴(Mining) 경쟁을 시작
  4. 채굴 경쟁에서 승리한 한명의 채굴자가 등장하면, 그의 마이닝 풀에 존재했던 모든 트랜잭션들은 승인처리되며, 승인처리된 내역은 새로운 블록에 저장됨.
  5. 새로운 블록의 내용이 모든 노드(사용자 및 채굴자)에게 전파(broadcast)되며, 채굴자들은 자신의 마이닝 풀을 초기화함.
  6. 2~5 과정 반복

위 절차를 자세하게 설명하자면,

1번: 사용자들이 일반적으로 금융 거래를 요청하는 과정은 1번 과정에 해당된다. 이 때, 사용자들은 자신이 발생시킨 트랜잭션을 처리해주는 채굴자를 위해 수수료를 트랜잭션에 포함시킨다. 수수료는 크게 설정할 수도, 작게 설정할 수도 있다.

2번: 채굴자들은 트랜잭션을 마이닝 풀에 저장한다. 정상적인 채굴자라면 높은 수수료를 지닌 트랜잭션들을 먼저 자신의 마이닝 풀에 등록할 것이다. 따라서 일반 사용자들은 자신의 트랜잭션이 빠르게 처리되기를 희망할 경우, 높은 수수료를 부여함으로써 우선순위를 부여할 수 있다.

  1. 각 채굴자들은 자신의 마이닝 풀에 담긴 트랜잭션들과 임의의 난수를 이용해 해시 연산을 수행함. 어떤 한 노드가 특정 임계치(Threshold) 값 이하의 해시 값을 찾을때까지 모든 채굴자들은 난수를 이용해 해시 연산을 반복하며, 이 임계치보다 낮은 값을 산출하는 해시를 찾은 채굴자가 최종 승리한다. 임계치의 값은 곧 채굴 경쟁의 난이도를 의미하며, 유동적으로 조절될 수 있다.

  2. 어느 한 채굴자가 채굴 경쟁에서 승리할 경우, 해당 채굴자의 마이닝 풀에 담긴 모든 트랜잭션들은 승인 처리되며, 새로운 블록에 저장된다. 새로운 블록은 이전 블록의 해시 값과 채굴자가 사용한 모든 트랜잭션 정보들 및 채굴자가 사용한 난수 값을 모두 이용해 산출된다. 이 기술이 블록체인이라고 불리우는 이유는 이전 블록의 내용(해시)이 다음 블록을 만드는 데에 사용되기 때문이며, 블록들이 길게 연결될수록 과거 데이터에 대한 신뢰도가 높아진다고 볼 수 있다.

  3. 새로운 블록의 정보가 모든 노드로 전파되고, 이중 지불 각 노드들은 새로 승인된 모든 트랜잭션들을 확인할 수 있게 됨으로써 이중 지불 문제를 해결할 수 있다.

블록체인의 의의

블록체인은 무엇인가? 에 대한 질문에는 여러가지 답이 존재할 수 있지만, 본인은 다음과 같이 생각한다.

블록체인은 높은 수준의 무결성(Integrity)을 제공하는 분산형 데이터베이스(Database) 기술이다.

기존 데이터베이스는 보통 회사나 단체의 메인 서버에 저장되어 중앙집중 형태로 관리됐다. 이러한 구조는 관리 방식이 용이하다는 장점이 있지만, 서버만 해킹당하면 모든 정보가 유출될 수 있고, 또 해커가 서버에 침입하여 데이터를 의도적으로 변경할 수 있기 때문에 보안상 안전한 구조는 아니라고 볼 수 있다.

블록체인은 어찌보면 모든 사람들(블록체인 네트워크 참여자들)이 볼 수 있는 거대한 칠판에 트랜잭션들을 적는 형태로 데이터를 저장한다고 생각할 수 있다. 모든 사람들이 보고있기 때문에 해커가 이 칠판에 적힌 데이터를 변경하려면 네트워크 참여자 중 과반수 이상을 속여야 한다는 어려움이 있다. 물론 이러한 운영 방식으로 인해 프라이버시 문제와 과반수와 관련된 블록체인의 근본적인 한계가 존재한다는 단점이 있지만, 데이터가 절대 변경되지 않아야 하는 시스템에는 아주 적합하다고 볼 수 있다. 또한 저런 칠판을 여러 곳에 두고, 각 칠판들이 잘 동기화되도록 한다면 딱히 중앙 서버가 필요하지 않게 됨으로써 공격자가 공격 수행 시 여러 칠판을 동시에 공격해야 한다는 어려움을 야기한다. 또한, 기존의 중앙집중형 구조를 벗어나 분산형 데이터베이스로써의 역할또한 가능해진다.