들어가며
안녕하세요, 코인원 CTO Lab의 개발 인턴 강주현입니다. 코인원 인턴 생활이 5개월 차에 접어든 시점에서 새로운 블록체인 검증 방식을 소개하려고 하는데요, 바로 생소하지만 혁신적인 주제인 ‘영지식증명’입니다. 조금은 어려운 주제이기도 하지만, 현재 블록체인 네트워크 기술의 수면 위로 떠오르고 있는 증명 방식인 만큼 쉽게 풀어내어보려고 합니다.
영지식증명의 정의와 특성
증명자와 검증자 간의 영지식증명 (출처 : Medium-Towards Data Science)
영지식증명(Zero-Knowledge Proof)은 단어가 의미하는 대로 ‘지식 없이 하는 증명’입니다. 이 증명에는 두 가지 역할자가 존재하는데, 각각 증명자(Prover)와 검증자(Verifier)라고 부릅니다. 증명자는 어떠한 정보가 참이라는 것을 증명하는 역할자이며, 검증자는 해당 정보가 참이라는 것을 검증하는 역할자입니다. 따라서 영지식증명은 증명자가 자신이 알고 있는 정보를 공개하지 않으면서 정보를 알고 있다는 사실을 검증자에게 증명하는 과정입니다.
이해를 빠르게 돕기 위해, 간단히 알리바바의 동굴의 예시를 들겠습니다.
영지식증명 동굴의 비유 (출처 : 해시넷)
스미스와 찰리라는 사람이 있습니다. 또한 입구에서 두 갈래로 나뉘다가 각자의 끝이 마법의 문으로 서로 이어진 동굴이 있다고 가정합니다. 마법의 문은 비밀의 단어를 외쳤을 때 열리는 문입니다. 여기서 찰리는 비밀의 단어가 무엇인지 알고 있습니다.
찰리 : “너에게 비밀의 단어가 무엇인지는 말해주지 않겠지만, 내가 비밀의 단어를 알고 있다는 사실을 증명하고 싶어!”
스미스는 찰리가 두 갈래 중 한 길을 택해서 문에 다다를 때까지 동굴 밖에서 기다립니다. 그리고 찰리가 문에 도착했을때 쯤, 스미스는 동굴 입구로 가서 이렇게 말합니다.
스미스 : “네 증명이 맞는지 검증해볼게. 지금 나는 동굴 입구에 있고, 너는 왼쪽 갈래길로 나와봐.”
찰리가 스미스가 지시한 갈래로 나왔을 때, 찰리는 두 가지 가능성을 생각합니다. 첫 번째 가능성은 “오른쪽 갈래로 들어가 왼쪽 갈래로 나왔다 (비밀의 단어를 알고 있다)” 이며, 두 번째 가능성은 “왼쪽 갈래로 들어가 왼쪽 갈래로 나왔다 (비밀의 단어를 알고 있거나 모르고 있다)”는 것이 됩니다. 스미스가 확실하게 비밀의 단어를 알고 있다고 검증하기 위해서는 해당 검증 절차를 여러 번 반복하여 “비밀의 단어를 알고 있을 확률”을 높이는 것입니다.
이렇게 검증 절차를 거치고 난 뒤, 찰리는 스미스가 알고 있는 비밀의 단어에 대한 정보를 알지 못해도, 스미스가 그 단어를 알고 있는지 없는지에 대한 검증을 할 수 있습니다.
위와 같은 영지식증명 과정이 만족하는 3가지 조건이 있습니다. 각각 완전성(Completeness), 건전성(Soundness), 그리고 영지식성(Zero-Knowledge)이라고 지칭합니다.
완전성(Completeness): 어떠한 정보가 참일 경우에 정직한 증명자는 정직한 검증자에게 그것을 납득시킬 수 있어야 한다.
건전성(Soundness): 어떤 정보가 거짓일 경우에 부정직한 증명자는 거짓말을 통해 정직한 검증자에게 그것이 ‘참’임을 절대 납득시킬 수 없어야 한다.
영지식성(Zero-Knowledge): 검증자는 어떤 정보가 참 혹은 거짓이라는 사실 이외에는 아무것도 알 수 없어야 한다.
영지식증명의 발전: zk-SNARK
(출처: Wikimedia Commons)
영지식증명을 통한다면 어떤 사실을 알지 못해도 그것이 참이라는 것을 증명할 수 있습니다. 그러나 위에 소개된 알리바바의 동굴과 같은 예시는 증명자와 검증자 간에 항상 통신이 가능한 상태여야 합니다. 검증될 때까지 서로 메시지를 교환하면서 증명을 하는 방식은 증명의 사이즈가 클수록 주고받아야 하는 메시지 양이 늘어나고 시간 소모가 커지기 때문에 비효율적일 수 있습니다. 그 점을 보완하기 위해서 2013년, zk-SNARK(zero-knowledge Succinct Non-interactive ARguments of Knowledge)가 소개되었습니다.
zk-SNARK는 발전된 영지식증명입니다. 영지식증명을 기반으로 간결하고(Succinct) 비상호적인(Non-interactive) 지식 논의를 하는 것이 zk-SNARK 라고 볼 수 있습니다.
비상호성(Non-interaction): 증명자와 검증자의 온라인 여부에 관계없이 증명 및 검증이 가능하다.
간결성(Succinctness): 증명 사이즈가 수 1/1000 초 안에 검증될 정도로 작고 간결하다.
zk-SNARK 검증방식
기존 검증 방법이 여러 번 메시지 교환을 통한 방식이라면, zk-SNARK는 사전 정의된 함수와 매개 변수를 이용하여 단 한 번만 검증하는 방식입니다. 조금 더 말을 풀어보자면, 증명자가 증명에 필요한 매개 변수와 증인 변수(정보를 증명하기 위해 필요한 비밀 입력값)를 증명 함수에 넣고 증명 데이터를 생성한다면, 검증자는 검증에 필요한 매개 변수와 증명 데이터를 검증 함수에 넣고 증명이 유효한지 아닌지를 판별합니다.
블록체인에 zk-SNARK를 접목하다
일반적으로 블록체인 네트워크에는 수신자, 송신자 및 전송 금액 등의 거래 내역 정보가 공개 및 기록되어 있습니다. 개인정보를 보호하고 보안을 강화해야 하는 필요성이 늘어남에 따라 여러 블록체인 프로젝트에서 zk-SNARK를 접목하는 시도를 하고 있습니다. 대표적으로 영지식증명을 사용하는 암호화폐로써 지캐시(Zcash)가 있으며, 익명성을 보장하는 거래를 구현하였습니다. 이와 같은 비공개 거래는 일반적인 블록체인 네트워크에 기록되지만, 잔고와 송금 금액 등의 정보를 공개하지 않은 채 거래 내역이 기록됩니다.
(좌) 이더리움 로고, (우) 지캐시 로고
또한 zk-SNARK를 이용한 증명 사이즈와 검증 과정은 증명해야 하는 정보의 양에 상관없이 일정한 속도와 시간을 요구합니다. 이더리움 창시자 비탈릭 부테린은 이더리움 의 확장성을 증대시키기 위해서 zk-SNARK를 도입할 계획이 있음을 밝혔습니다. 이를 통해 최대 500 TPS의 성능까지 끌어올리고, 스마트 컨트랙트 내부에 영지식검증 알고리즘을 돌아가게 하여 과포화 상태의 이더리움 네트워크를 개선하는 등 구체적인 청사진을 그리고 있는 것으로 알려졌습니다.
마무리하며
시간이 지날수록 블록체인 기술이 발전함에 따라서 다양한 기술을 도입 및 적용하고 있습니다. 영지식증명 또한 현재까지도 안정적이며 확장성 있는 증명 방식이 되기 위해 개선 및 발전을 이루고 있습니다. 한층 더 나아가는 블록체인의 발전을 기다리며, 영지식증명에 대한 소개를 마칩니다.
강주현, CTO Lab Intern