블록체인 분산 원장 시스템의 비잔틴 장애 허용(BFT) 모델과 영지식 증명(zk-SNARKs)의 수학적 모순 해결 해결책
장애 대응을 하다가 밤을 꼬박 새운 어제, 원인은 의외로 사소한 아키텍처 설계 미스였습니다. 저와 같은 실수를 반복하지 않으시길 바라며 이 글을 씁니다.
비트코인과 이더리움을 시작으로 꽃피운 블록체인 네트워크 기술의 핵심 철학은 탈중앙화된 신뢰의 구축에 있습니다. 중앙 집중화된 절대 권력자나 보증 기관이 존재하지 않는 P2P(Peer-to-Peer) 네트워크 환경에서는 악의적인 의도를 품고 장부를 조작하려는 해커 노드나 고장 난 통신 장비가 상존합니다. 이러한 위협 모델 속에서도 정상적인 노드들이 합일된 하나의 진실을 공유하게 만드는 암호학적 기반이 비잔틴 장애 허용(BFT, Byzantine Fault Tolerance) 알고리즘입니다. 비잔틴 장군 문제 모델은 통신이 불완전하고 변절자가 존재할 수 있는 군대들 사이에서 공격 시간을 합의해야 하는 논리 퍼즐에서 기원했습니다. 전통적인 PBFT(Practical Byzantine Fault Tolerance) 알고리즘은 전체 노드의 3분의 1 미만이 악의적이더라도 시스템의 일관성을 유지할 수 있음을 수학적으로 증명해 냈지만, 노드 간의 메시지 교환 횟수가 N의 제곱근에 비례하여 기하급수적으로 폭증하기 때문에 노드 수가 수천 단위로 넘어가는 퍼블릭 블록체인에는 적용할 수 없었습니다. 사토시 나카모토는 작업 증명(Proof of Work)이라는 경제적 인센티브 확률 모델을 결합한 나카모토 합의를 통해 허가받지 않은 무제한의 노드들이 참여할 수 있는 느슨하지만 거대한 BFT 모델을 구현하며 이 제약을 돌파했습니다.
합의 알고리즘이 퍼블릭 분산 원장의 신원 무결성과 진실성을 방어한다면, 블록 공간에 기록되는 데이터의 투명성은 전혀 다른 차원의 프라이버시 문제를 잉태하게 되었습니다. 모든 거래 내역과 잔고 송금 기록이 누구에게나 백일하에 공개된다는 시스템적 특성은 프라이빗 한 금융 거래나 기업 간의 기밀 스마트 컨트랙트 실행에 있어 매우 치명적인 약점입니다. 자신이 특정 조건(예: 잔고가 충분함, 성인 인증 완료 등)을 충족한다는 사실을 증명하면서도, 그 조건의 원본 데이터(정확한 잔액 액수, 구체적인 생년월일 표기 등) 자체는 상대방은 물론 네트워크 전체에 절대 노출하지 않는 궁극의 프라이버시 기술이 요구되었으며, 이 불가능해 보이는 모순을 돌파한 암호학의 정수가 바로 영지식 증명(Zero-Knowledge Proofs), 그중에서도 특히 간결성과 비상호작용성을 띠는 zk-SNARKs(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) 프로토콜입니다.
zk-SNARKs의 구현은 고도의 추상 수학과 다항식 연산의 집합체입니다. 증명하고자 하는 어떤 계산 로직이나 프로그램 함수를 특정한 암호학적 등식 회로(Arithmetic Circuit)로 매핑하고, 이를 다시 QAP(Quadratic Arithmetic Program) 문제 행렬로 치환시킵니다. 증명자(Prover)는 이 다항식 방정식의 해를 자신이 알고 있다는 사실을 타원 곡선 암호학과 타원 곡선 페어링(Bilinear Pairing) 성질을 이용해 극도로 짧은(수백 바이트 스펙) 길이의 암호화된 증거물(Proof string)로 압축하여 생성해 냅니다. 이 방법의 위대함은 원본 계산 로직이 아무리 거대하더라도 생성된 증명을 검증자(Verifier)가 확인하는 데는 밀리초 단위의 매우 짧은 연산만 소요된다는 점입니다. 때문에 블록체인 네트워크의 모든 피어들은 복잡하고 프라이빗한 스마트 컨트랙트 계산 과정을 일일이 재수행하지 않고도, 이 짧은 증명 스니펫만을 수학식에 대입해 봄으로써 해당 거래의 합법성 여부를 참과 거짓으로 온전히 판단 가능합니다. 비록 초기 파라미터 세팅 과정(Trusted Setup)에서 독성 폐기물(Toxic Waste)이 파생된다는 결함을 가지고 있으나 후속 zk-STARKs 연구를 통해 이를 우회하며 암호학의 새 지평을 열고 있습니다.