역사 증명: 블록체인을 위한 시계

솔라나의 핵심 혁신 기술에 대한 심도 깊은 설명을 전달드리도록 하겠습니다

GM Chung
솔라나 한국
9 min readApr 21, 2020

--

솔라나는 세계 최고의 성능을 자랑하는 무허가형 블록체인입니다. 현재 진행 중인 솔라나의 테스트넷은 200개의 독립된 GPU 노드들로 구성되었으며, GPU를 통해 초당 50,000건의 트랜잭션을 처리하고 있습니다. 높은 성능을 달성하기 위해 여러 최적화 및 새로운 기술이 필요로 했으며, 그 결과 블록체인 개발 분야에 있어 기존에는 찾아보지 못할 수준의 네트워크 수용력을 이뤄냈습니다.

솔라나 네트워크를 가능하게 해준 8가지 주요 혁신들은 다음과 같습니다:

분산된 시스템에서 가장 어려운 난제 중 하나는 시간에 대한 합의입니다. 실제로 많은 사람들이 비트코인 작업 증명 알고리즘의 가장 중요한 기능은 시스템을 위한 탈중앙화된 시계라고 말하고 있습니다. 솔라나의 경우, 역사 증명을 해결책으로 사용하고자 하며, 이를 기반으로 한 블록체인을 개발하였습니다.

탈중앙 네트워크들은 신뢰를 바탕으로 한 중앙화된 타이밍 솔루션을 사용하여 이러한 문제를 해결해왔습니다. 예를 들어, 구글의 스패너(Spanner)는 데이터 센터 간에 동기화된 원자시계를 사용하고 있으며, 구글의 엔지니어들은 이 시계를 매우 정밀하게 동기화하고 지속적으로 유지하기 위해 노력하고 있습니다.

시간에 대한 문제는 블록체인과 같은 대립성(Adversarial)을 지닌 시스템에서는 해결되기 더욱 어렵습니다. 네트워크의 노드들은 외부로부터 가져온 시간 혹은 메시지에 찍힌 타임스탬프를 그대로 신뢰하고 사용할 수 없습니다. 예를 들어 해시그래프(Hashgraph)의 경우, “median” 타임스탬프를 사용하여 해결하고 있습니다. 네트워크에서 표시되는 각 메시지들은 네트워크상에서 압도적으로 다수에 의해 서명되고 타임스탬프를 받게 됩니다. 그리고 이때 해당 타임스탬프들의 중간값(median)을 해시그래프에서는 “fair” ordering이라는 표현을 사용합니다. 각 메시지는 시스템에서 압도적인 다수의 노드들에게 전달되고, 충분한 수의 서명이 메시지에 모이면, 이를 다시 네트워크 전체로 전파합니다. 즉 예상 가능하듯이, 이 과정은 매우 느리게 이뤄집니다.

만약 단순하게 메시지로 인코딩된 타임스탬프를 신뢰할 수 있다면 어떻게 될까요? 그렇게 된다면 분산 시스템에 엄청난 수준의 최적화가 가능해질 것입니다.

“동기화된 시계들은 매우 흥미로운 주제이다. 왜냐하면 이는 분산화된 알고리즘의 성능을 개선시킬 수 있기 때문이다. 동기화된 시계는 이를 위한 로컬 컴퓨터와의 통신을 대체할 수 있게 된다.”

- Liskov, B. Practical uses of synchronized clocks in distributed systems

이는 즉, 솔라나가 높은 처리량의 고성능 블록체인을 구현할 수 있음을 의미합니다.

역사 증명 (혹은 내역 증명) — Proof of History

만약 타임스탬프를 신뢰하기보단, 특정 메시지가 이벤트 전후에 발생했음을 증명할 수 있다면 어떻게 될까요? 만약 여러분이 뉴욕 타임즈 잡지의 표지 사진을 찍게 된다면 , 해당 사진은 여러분이 잡지가 출간된 이후에 찍었음을 증명할 수 있습니다. 혹은 뉴욕 타임즈 잡지가 출간되었음을 증명할 수 있는 영향력을 갖게 됩니다. 쉽게 말하자면 역사 증명은 어떠한 사건이 특정 순간에 일어났음을 증명하는 내역을 기록하는 것입니다.

역사 증명 타임스탬프

역사 증명은 고빈도 검증 가능 지연 함수(High frequency Verifiable Delay Function, VDF)입니다. 검증 가능 지연 함수는 검증하기 위해 일정한 단계의 절차를 필요로 합니다. 하지만 효율적이며 공개적으로 검증 가능한 고유값을 출력해 냅니다.

솔라나에서 구현한 함수의 경우, 이전의 출력값이 계속적으로 다음의 입력값으로 들어가는 순차적 전상 저항 해시(Sequential Pre-image resistant Hash)를 활용하고 있습니다. 이를 통해 주기적으로 횟수와 현재의 출력값을 기록합니다.

SHA256 해시 함수의 경우, ²¹²⁸개 코어가 병렬처리로 이뤄지는 브루트 포스(Brute force)가 아니면 공격이 불가능한 프로세스입니다.

이를 통해 생성된 각 카운터 간에 실제로 시간이 흐르고, 각 카운터마다 기록된 순서가 실제 시간과 동일하다는 것을 확인할 수 있습니다.

시간의 상한선 — Upper bound on Time

역사 증명에 순차적으로 기록되는 메시지들

데이터의 해시를 이전에 생성된 상태(State)에 덧붙이는 방법으로, 데이터를 순차적으로 입력하게 됩니다. 상태, 입력 데이터, 그리고 카운터는 모두 기록되며, 입력값을 추가하게 되면 앞으로 발생할 모든 미래 출력값은 예측이 불가능하게 됩니다. 해시 함수가 전상(Pre-image) 및 충돌(collision)에 대한 내성이 있는 한, 이를 병렬 기법을 통해 풀어낼 수 없으며, 원하는 해시값을 내놓을 수 있는 입력값을 만들어 내거나, 같은 해시지만 내역(history)이 다른 출력값을 생성할 수 없습니다. 이를 통해 두 번의 추가 작업 사이에 시간이 경과하였음을 증명할 수 있게 되며, 해당 데이터가 추가되기 이전에 생성되었다는 것을 증명할 수 있게 됩니다. 즉, 뉴욕 타임즈에 실린 내용들은 잡지가 출간되기 전에 발생한 사건임을 의미하는 것과 같습니다.

시간의 하한선 — Lower bound on Time

역사 증명에서의 시간 하한선

역사 증명에서의 입력값은 역사 증명 자체에 대한 참조 사례로 재사용 될 수 있습니다. 이러한 역참조(Back reference)는 사용자의 서명과 함께 서명된 메시지의 일부로서 삽입될 수 있으며, 사용자의 개인 키(Private key) 없이 수정될 수 없습니다. 이는 뉴욕 타임즈 잡지를 배경으로 두고 사진을 찍는 것과 같습니다. 해당 메시지는 0Xdeadc0de 해시가 포함되어 있기 때문에, 우리는 이것이 카운터 510144806912 생겨난 이후에 발생했음을 알 수 있게 됩니다.

하지만 해당 메시지가 다시 역사 증명 스트림으로 삽입되기 때문에 이는 마치 뉴욕 타임즈 잡지를 배경에 두고 사진을 찍는 것과 같으며, 그다음 뉴욕타임즈가 해당 사진을 첨부하여 출간하는 것과 같습니다. 이렇게 우리는 해당 사진 속 내용이 특정한 날 전후에 존재했다는 것을 알 수 있게 됩니다.

검증 — Verification

기록된 참조 사례는 단일 CPU 코어에 의해서만 생성되지만, 출력값은 병렬처리를 통해 검증할 수 있습니다.

병렬 검증

기록된 각 슬라이스는 생성하는데 소요된 1/(코어 수) 시간 안에 분리된 코어를 통해 처음부터 끝까지 검증 가능합니다. 따라서 4,000 개의 코어를 지닌 현대식 GPU는 보통 1초가 필요로 하는 분량을 단 0.25 밀리초만에 검증할 수 있습니다.

ASICS

모든 CPU는 각기 다르고, 어떤 CPU는 다른 CPU보다 훨씬 빠른 경우도 존재합니다. 그렇다면 이렇게 각기 다른 속도를 갖추고 있을때 SHA256 루프에 의해 생성되는 “시간"이 어떻게 정확히 맞다고 확신할 수 있을까요?

이에 대한 주제를 다른 아티클을 통해 설명드릴 수 있지만, 간략히 말씀드리자면 현재 솔라나는 어떤 CPU가 다른 CPU보다 얼마나 더 빠르고, ASIC이 네트워크에서 사용 가능한 다른 CPU보다 얼마나 더 빠른지에 대해 상관하고 있지 않습니다. 단순히 ASIC이 얼마나 더 빠를 수 있는지에 대한 상한선을 중요한 포인트로 생각하고 있습니다.

현재 솔라나는 SHA256을 사용하고 있으며, 비트코인을 통해 암호 해시 함수를 더 빠르게 만들기 위한 많은 연구를 진행하였습니다. 연구를 통해 이 함수는 더 큰 순람표(Look-Up table)가 있다거나, 클록 속도에 영향 없이 이루어지는 언롤(Unroll) 등을 통해 더 속도를 높일 수 있는 것이 아님을 알 수 있었습니다. 때문에 인텔과 AMD는 모두 1.75 사이클에 SHA256을 풀라운드 할 수 있는 소비자용 칩을 출시하고 있습니다.

이러한 이유로 솔라나는 커스터마이징된 ASIC이 1,000배 100배 만큼 더 빠른 속도를 낼 수 없다고 확신하고 있으며, 네트워크 가용 범위의 30% 내외로 배치될 것이라 예상하고 있습니다. 이러한 한도를 활용하여 네트워크 공격자의 DoS(Denial of Service) 공격이 매우 제한적이고, 쉽게 감지되며, 희박한 확률만을 허용하는 프로토콜을 만들 수 있었습니다. 이에 대한 내용은 다음 시간을 통해 더 자세히 설명드리도록 하겠습니다!

코드

만약 여러분이 러스트(Rust)와 쿠다(Cuda)를 사용할 수 있고, 세계에서 가장 빠른 블록체인을 만들어보고 싶다면 hello@solana.com를 통해 연락 주시길 바랍니다.

솔라나 공식 커뮤니티에 참여하세요

공식 홈페이지 | 텔레그램 | 디스코드 | 트위터

--

--