블록체인에 해당하는 개념은 “타임 스탬프 서버”라는 부분에 설명되어 있습니다. 이로 인해 블록체인과 타임스탬프는 상당히 큰 연관성이 있어 보인다는 것을 알 수 있습니다.

그렇다면, “타임 스탬프” 개념에 대해서 다시 생각해 봅시다. 일반적인 타임스탬프(Timestamp)라고 하면 “2018-04-05 13:00:00”등의 형식으로 표현되는 날짜와 시간이 적힌 문자열이라고 생각하게 됩니다. 실제 생활에서는 독자가 여행을 가기 위해 KTX 티켓을 예매하기 위해 시간을 선택하면 그것을 누가 언제 몇시 몇분에 탑승을 위한 계약 내용에 날짜와 같이 저장되는 것이 타임스탬프의 한 종류라고 봐도 됩니다. 타임스탬프의 역할은 어떤 이슈가 일어난 날짜와 시간을 기록하여 사실 존재를 증명하는 전후 관계를 보장하는 것입니다.

현실세계의 타임스탬프

아래 그림과 같이 지역별 시차를 제외하면 표준시간, 현지시간 등의 표준화를 통해 모든 사물, 사람들이 시간축을 공유합니다.

모든 사람은 같은 시간축을 공유

컴퓨터의 타임스탬프

컴퓨터 세계에서는 현실세계의 시간과 반드시 동기화되는 것은 아니기 때문에(각각의 환경이 참조하는 시간이 다르기 때문), 여러 환경에 따라 다른 시각을 보일 수 있습니다. 여기서 지불한 사실이 언제 일어났는지에 대한 합의를 하지 못하면, 사실 증명이 어렵게 됩니다. 이런 경우, 타임스탬프를 악의적으로 쉽게 변경할 수 있어 어려움이 생기게 됩니다. 예를 들어 게임에서 이벤트를 할 경우, 특정 시간에 한정 아이템을 받을 수 있는 조건이 발생하거나 특정 시간대에서만 얻을 수 있는 혜택이 제공될 때, 사용자가 기기의 시간대를 변경해서 미리 이벤트 정보를 확인하고 부정 플레이를 할 수 있게 됩니다. 

모든 사람이 컴퓨터에 설정된 시간, 즉 모두 다른 시간축을 가짐

중앙집권적 타임스탬프

인터넷 서비스는 불특정 다수의 사람들에게 서비스하는데 있어서 어느 한 곳에 중심을 두고 그 중심점의 시간을 기준으로 서비스 무결성을 유지하고 있습니다. 보통 타임서버에 접근하여 시간 동기화를 하여 모든 서버가 동일한 시간축을 가지도록 사용하고 있습니다. 이 경우 타임서버가 해킹당한다면 시간축이 틀어질 수 있는 단점이 있습니다. 여기서 비트코인은 “아무도 간섭없이 사용할 수 있는 송금 구조를 만들자”것과 “누구도 마음대로 중지시킬 수 없다”라는 구조를 실현하기 위해서는 중앙집권적 구조가 아닌 중심부가 없는 P2P형태의 구조를 생각하게 되었습니다.

타임서버와 동기화하여 각 서버의 시간축을 동일하게 유지

비중앙집권적 타임스탬프

P2P 시스템에서 중심부 시간에 의존하지 않은 상태로 타임스탬프를 필요로 하는 데이터를 처리하기 위해 새로운 타임스탬프 방법이 필요해졌습니다. 다시 말해, 타임스탬프가 필요한 서비스를 P2P로 실현하기 위해 중심부 시간에 동기하는 방법으로는 한계가 존재하여 블록체인 타임스탬프 개념이 나왔습니다. 블록체인이 획기적으로 보이는 이유는 시간을 되돌릴 수 없다는 것과 1개의 시간축을 모두가 공유하고, 그 시간축에서 전화 관계를 정의할 수 있는 물리적인 시간 특징을 암호화학에 기초한 데이터구조를 사용하여 다시 구현한 것입니다.

P2P네트워크에서 모든 사람이 볼 수 있는 시간 = 블록체인 타임스탬프

해시체인 타임스탬프

물리적 시간의 동기화가 확인하기 어려운 분산시스템에서 모든 참가자가 하나의 시간축을 공유하려면 어떤 사건이 일어난 절대적인 시간을 엄격하게 요구하는 것이 아니라, 전후 관계가 존재하는 2개의 사건에 대해 그 순서를 특정할 수 있는 상대적 시간으로 시간축을 정의하는 방법이 있습니다. 즉, 사건1과 사건2가 발생했을 때 사건1과 사건2가 일어난 정확한 시간을 몰라도, '사건1이 사건2 다음에 일어났다' 라는 상대적인 전후 관계만을 취급한다는 것입니다. 이 개념은 분산시스템의 논리적 타임스탬프라고 말합니다.

블록체인은 암호화 해시함수를 사용하여 데이터가 존재하기 전에 다른 데이터가 존재했다는 전후 관계를 논리적으로 부정할 수 없는 형태로 정의하고 있습니다.

사건의 상대적인 전후 관계만 취급하는 시간축


위 그림에서 A데이터에 대해 암호화 해시함수를 이용하여 얻어진 해시값 h(A)이라고 합니다. h(A)값이 존재하는 것은 이전 A데이터가 있는 것이 논리적으로 옳다고 봅니다. 또한, B = h(A)로 h(B)를 계산하면 h(B)가 존재하기 전에 h(A)가 존재하고 있었다고 볼 수 있습니다. 이처럼 동일한 데이터에 대해 재귀적으로 암호화 해시함수를 적용하는 기술이 해시체인입니다. 이 해시체인은 일회성 비밀번호 인증 시스템 구현에 주로 사용됩니다.

확장된 해시체인

확장된 해시체인

위의 확장된 해시체인을 사용하여 모든 데이터의 존재증명과 전후 관계를 증명할 수 있습니다. 실무적인 P2P시스템에서 사용하기 위해서는 몇가지 이슈를 해결해야 합니다.

  • 여러개의 노드가 참여하는 P2P 네트워크에서 모든 노드가 항상 최신 타임스탬프를 볼 수 있는가?
  • 노드가 과거 데이터를 변조한 경우, 변주 탐지 및 변조 데이터를 거부할 수 있는가?

블록체인에서는 위 첫번째 이슈를 해결하기 위해 모든 데이터를 항상 모든 노드에서 공유하지 않고 여러 데이터를 정리한 블록단위로 공유합니다. 이 블록을 만드는데 사용되는 기술이 머클트리(Merkle tree 또는 해시트리)입니다. 또한 이 머클트리를 사용하여 두번째 이슈를 해결할 수 있습니다. 머클트리는 http://brownbears.tistory.com/372 정리되어 있으니 확인하면 됩니다.

'블록체인' 카테고리의 다른 글

비트코인 - UTXO란?  (0) 2018.07.24
양자컴퓨터란?  (0) 2018.07.23
블록체인 타임스탬프  (0) 2018.07.18
51% 공격(Attack)이란?  (0) 2018.07.17
작업증명 (Proof-of-Work : PoW) 알고리즘이란?  (0) 2018.07.11
머클트리(merkle tree)란?  (0) 2018.07.09

+ Random Posts