과학 보급: 제로 지식 증명은 무엇이며, 제로 지식 증명의 사용 사례는 무엇인가요?
저자: Captain Hiro, 바비트
아마 당신은 ZK Proof 또는 제로 지식 증명에 대해 들어본 적이 있을 것입니다. 하지만 그것이 무엇인지 명확히 이해하지 못했나요? ZK-rollups는 무엇인가요? ZK-SNARKs는 무엇인가요? 이 글에서는 제로 지식 증명에 대한 모든 질문에 답변할 것이니, 시간을 잘 활용하여 함께 제로 지식 증명의 여정을 시작해 봅시다!
제로 지식 증명이란?
제로 지식 증명은 한 쪽(증명자)이 실제 정보를 공개하지 않고도 다른 쪽(검증자)에게 비밀이나 주장이 진실임을 증명할 수 있는 증명 방법입니다.
위에서 언급한 "제로 지식"이라는 용어 자체는 어떤 정보도 공개하지 않지만, 두 번째 쪽(검증자)이 첫 번째 쪽(증명자)이 이 비밀을 알고 있거나 그들의 주장이 진실하다고 믿는다는 사실을 증명합니다.
그렇다면 우리는 왜 제로 지식 증명이 필요할까요? 다른 사람이 정보를 공개할 것이라고 믿지 않지만, 그들에게 우리가 이 비밀을 알고 있거나 우리의 주장이 진실하다고 설득하고 싶을 때 필요합니다.
제로 지식 증명에는 두 가지 유형이 있습니다:
- 상호작용형
- 비상호작용형
1️. 상호작용형 제로 지식 증명의 예를 살펴보겠습니다.
당신이 성인이 되었음을 제로 지식으로 증명해야 하지만, 실제로 당신의 구체적인 나이를 공개할 수 없다고 가정해 봅시다. 우리는 당신의 나이를 증명할 제3의 권위 있는 기관이 필요하며, 그 기관의 절차는 다음과 같습니다:
"제공해 주신 출생 증명서 사본 감사합니다. 우리는 당신이 21세라는 것을 알고 있습니다. 여기 비밀 번호가 있습니다. 비밀리에 저장하고 안전하게 보관하세요. 나중에 필요할 수 있습니다."
"당신의 비밀 번호는 22번 해시 처리되어 최종 나이 해시 코드가 만들어집니다(네, 시스템의 기본 작업은 당신의 나이에 +1을 해시하여 작동하게 하는 것입니다). 따라서 우리가 당신에게 제공한 비밀 번호와 이 최종 나이 해시 코드 사이에는 22번의 해시 처리가 있습니다."
"우리는 당신의 이름, 타임스탬프, 그리고 이 최종 나이 해시 코드를 사용하여 포장합니다. 이것이 당신이 다른 사람에게 제공해야 할 증명 자료입니다."
이제 당신이 다른 사람에게 18세 이상임을 증명하고 싶다면, 당신은 비밀 번호에서 최종 나이 해시 코드까지 18개 이상의 해시 단계를 효과적으로 증명해야 합니다.
이를 위해, 당신은 마지막 18개의 해시 단계를 보여주면 되고, 먼저 비밀 번호를 4번 해시 처리하여 결과를 제공해야 합니다; 즉, 네 번째 해시 처리의 결과를 보여줘야 합니다.
그런 다음 그들은 당신이 제공한 결과에 대해 18번 해시를 진행합니다(기관이 이제 당신의 비밀 번호에 대해 총 22번 해시를 수행했기 때문에), 그들은 결국 최종 나이 해시 코드를 얻고 당신이 성인인지 검증할 수 있습니다. 이 모든 정보는 당신의 증명 세트에 포함되어 있습니다.
실제로 검증자는 "우리가 값을 주면, 우리는 그것을 18번 해시하여 당신의 최종 나이 해시 코드와 일치하는 값을 얻을 수 있습니다. 만약 당신이 18세가 아니라면, 당신의 최종 나이 해시 코드에는 18번의 해시 단계가 없을 것이고, 우리는 당신의 실제 나이를 잘 인증할 수 없습니다."라고 말할 것입니다.
이것은 좋은 예시이기도 하죠?
하지만 이 상호작용형 방법에도 몇 가지 한계가 있습니다:
- 그들이 검증할 때마다 전체 긴 과정을 거쳐야 합니다. 이 과정은 사실 상당히 간단한 해시 처리인데, 실제 암호화 알고리즘의 계산이 어떤 모습일지 상상해 보세요.
- 또한, 온라인이든 오프라인이든 양측이 동일한 시간, 동일한 장소(네트워크 플랫폼)에서 만나야 합니다.
2️. 비상호작용형 증명을 살펴보겠습니다.
1986년, Fiat와 Shamir는 Fiat-Shamir 휴리스틱(비상호작용형 제로 지식 증명)을 발명하여 상호작용형 제로 지식 증명에 기반한 첫 번째 디지털 서명 알고리즘이 되었습니다.
Fiat-Shamir 휴리스틱은 커밋먼트 스킴(Commitment Scheme)을 통해 비상호작용형 제로 지식 증명으로 변환될 수 있으며, 이로 인해 ZK-SNARKs 또는 제로 지식의 간결한 비상호작용형 증명이 탄생했습니다.
Fiat-Shamir 휴리스틱을 더욱 강력하게 만들기 위해 우리는 커밋먼트 스킴을 사용합니다. 커밋먼트 스킴은 많은 암호화 프로토콜의 기본 구성 요소입니다. 이는 커밋터가 값을 공개하고(커밋), 이 값을 메시지에 바인딩(binding)하면서도 이를 공개하지 않도록(hiding) 합니다.
현재 제로 지식 증명에 사용되는 두 가지 주요 커밋먼트 스킴은 페더슨 커밋먼트(Pederson commitment)와 다항식 커밋먼트(Polynomial commitment)입니다.
하지만 2013년경까지 ZK-SNARKs는 실제로 유효해져서 개발자들이 현실 세계의 응용 프로그램에서 구현하고 사용할 수 있게 되었습니다.
저는 Vitalik Buterin의 이 우수한 글 읽기를 추천합니다. 이 글은 ZK-SNARKs가 왜 유용한지에 대한 전반적인 설명과 그것들이 어떻게 구현되는지를 설명합니다. 아마도 한 번에 모든 것을 이해하기는 어려울 수 있으니 여러 번 읽어보세요. 일단 내용을 이해하게 되면 그 원리를 알게 될 것입니다.
후량자 세계에서 우리는 ZK-SNARKs에 선택한 암호 함수가 양자 컴퓨터에 의해 강제로 해킹되지 않도록 해야 합니다. 그래서 후량자 안전성을 달성하기 위한 개선이 진행되고 있습니다. 이와 관련된 더 많은 정보를 원하신다면 ACM의 이 강의를 보실 수 있습니다:
자, 이제 제로 지식 증명이 무엇인지 알게 되었는데, 그들은 무엇을 위해 사용될까요?
개념적으로 두 가지 주요 용도가 있습니다:
- 블록체인의 거래 규모 확대
- 프라이버시 ------ 예를 들어 의료 분야에서 개인 데이터 보호
블록체인 확장 ------ ZK Rollups
롤업은 블록체인의 확장 솔루션으로, 첫 번째 레이어 네트워크 외부에서 거래를 실행하지만 첫 번째 레이어에 거래 데이터를 게시하는 방식으로 작동합니다. 이를 통해 롤업은 네트워크를 확장하고 여전히 이더리움 합의에서 보안을 얻을 수 있습니다.
계산을 체인 외부로 이동하면 더 많은 거래를 처리할 수 있습니다. 왜냐하면 롤업의 일부 거래 데이터만 이더리움 블록을 사용해야 하기 때문입니다.
이를 실현하기 위해 롤업 거래는 별도의 체인에서 실행되며, 특정 버전의 이더리움 가상 머신(EVM)을 실행할 수도 있습니다.
롤업에서 거래를 실행한 후의 다음 단계는 이를 배치하고 이더리움 메인 체인에 게시하는 것입니다.
전체 과정은 본질적으로 거래를 실행하고, 데이터를 수집하고, 데이터를 압축하여 단일 배치 방식으로 메인 체인에 롤업(roll)하는 것이므로 이 과정을 "롤업"이라고 부릅니다.
이더리움은 게시된 데이터가 유효하다는 것을 어떻게 알 수 있을까요? 악의적인 행위자가 제출한 것이 아닌지?
각 롤업은 첫 번째 레이어에 스마트 계약 집합을 배포하여 충전 및 인출을 처리하고 증명을 검증합니다.
증명은 또한 서로 다른 유형의 롤업 간의 주요 차별점입니다.
Optimistic 롤업은 사기 증명을 사용하고, 반면 ZK 롤업은 유효성 증명을 사용합니다.
ZK 롤업에서는 첫 번째 레이어에 게시되는 각 배치 파일이 ZK-SNARK라는 암호 증명을 포함합니다. 거래 배치가 제출될 때, 해당 증명은 첫 번째 레이어 계약에 의해 빠르게 검증될 수 있으며, 무효 배치는 직접 거부될 수 있습니다.
제로 지식 증명과 Optimistic 롤업에 대해 알아야 할 내용이 많습니다. 그들의 구현 방법, 한계 등 이 글에서는 몇 가지 간단한 개념만 다루었습니다. 더 많은 관련 내용을 배우셔야 합니다.
많은 프로젝트가 이더리움을 위해 ZK 롤업 기반의 확장 솔루션을 개발하고 있습니다. 몇 가지 주목할 만한 프로젝트로는 dYdX, Loopring, Polygon Miden, Polygon Hermez가 있습니다.
프라이버시 ------ 일상 생활에서의 응용
두 회사 A와 B가 블록체인을 매개로 운영하고 소통하고 싶다고 가정해 봅시다.
A가 자산을 B에게 이전하고 싶어하지만, 그들은 이 자산이 내부에 유지되기를 원합니다. 맞습니다, 블록체인은 투명성, 상호 운용성, 데이터 보안 및 무결성 등 여러 이점을 제공하지만, 왜 한 회사가 내부 물류 정보를 공개해야 할까요? 이때 제로 지식 증명이 필요합니다.
또한, 당신이 해외 친구에게 돈을 비공식적으로 송금하고 싶지만 정부가 이 거래를 감시하지 않기를 원한다고 가정해 보세요. 당신은 어떻게 하시겠습니까? 제로 지식 증명이 도움이 될 수 있습니다.
다른 여러 분야에서도 제로 지식 증명은 깊은 영향을 미칠 것입니다. 예를 들어 의료, 보험, 전자 투표, 신원 관리 등에서 말이죠.
의료 분야에서는 DNA 데이터, 개인 정보, 의료 기록, 기본 병력 정보, 약물 추적 가능성, 임상 시험, 의료 공급망, 장기 이식의 안전성을 보장합니다.
보험 분야에서는 디지털 형태의 보험 증명서 및 보험 증명, 개인 정보, 차량 정보, 청구 정산을 보장합니다.
블록체인과 ZKP를 사용하는 신원 관리는 깊은 의미를 가집니다. KYC(고객 알기)와 관련된 모든 애플리케이션, 학교, 대학, 결제 애플리케이션은 우리의 신분증 이미지, 예를 들어 운전 면허증, 여권, 유권자 신분증, 국민 신분증을 요구합니다. 우리의 민감한 개인 데이터는 실제로 그곳에 있으며, 우리는 정보가 언제든지 유출될 위험이 있다는 것을 인식하지 못합니다. 제로 지식 증명을 통해 우리는 이러한 신원 정보를 보호하고, 공급자, 애플리케이션 및 정부에 필요한 정보만 공개할 수 있습니다. 사실, 우리는 제로 지식 증명을 사용하여 이러한 신원 정보의 공개 방식을 완전히 혁신할 수 있습니다.
우리는 이러한 모든 것에 제로 지식 증명을 사용할 수 있으며, 필요한 정보가 있을 때마다 사용자가 선택적으로 승인하고 필요한 정보를 제공할 수 있으며, 나머지 세부 사항은 숨겨집니다.
ZK-SNARKs의 효율성은 2013년 이후에야 실제 구현과 개발자 사용이 가능해졌습니다. 그래서 제로 지식 증명을 사용하는 다양한 애플리케이션이 미래에 큰 공간을 차지할 것으로 기대됩니다.
2016년에 출시된 Zcash는 현재 ZK-SNARKs를 성공적으로 구현하고 사용자 간 프라이버시 거래를 제공하는 유일한 두드러진 제품입니다.
ZK-SNARKs와 ZK-STARKs
이미지 출처: Matter Labs github 리포지토리
ZK-STARK는 제로 지식 확장 가능한 투명한 지식 증명을 의미하고, ZK-SNARK는 제로 지식의 간결한 비상호작용형 지식 증명을 의미합니다.
이 두 가지 제로 지식 기술은 본질적으로 비상호작용형이며, 이는 코드가 배포되고 자율적으로 작동할 수 있음을 의미합니다.
ZK-SNARKs는 그 기초에서 타원 곡선의 안전성에 의존합니다. 암호학에서 타원 곡선의 기본 가정은 무작위 타원 곡선 요소를 알려진 기준점에 대한 이산 로그를 찾는 것이 불가능하다는 것입니다.
신뢰할 수 있는 설정(trusted setup)은 개인 거래에 필요한 증명을 생성하기 위한 키의 초기 생성 이벤트와 이러한 증명의 검증을 의미합니다.
신뢰할 수 있는 설정 이벤트에서 이러한 키를 생성하는 데 사용된 비밀이 파괴되지 않았다면, 이러한 비밀은 가짜 검증을 통해 거래를 위조하는 데 사용될 수 있습니다.
SNARKs의 또 다른 한계는 우리가 이미 알고 있는 것처럼 후량자 세계에서의 실행 가능성입니다.
반면, 네트워크에서 STARKs를 사용하기 시작할 때 신뢰할 수 있는 설정이 필요하지 않습니다. 이는 양자 저항성으로도 알려져 있습니다. 비록 STARK의 증명 규모가 SNARK보다 훨씬 크지만요.
하지만 STARKs는 여전히 초기 단계에 있으며, 현재 개발자에 대한 지원도 많지 않아서 ZK-STARK 기반 제품을 보려면 몇 년이 더 걸릴 것입니다.
이 글은 여기서 마칩니다. 이것은 웹3 세계에서 제로 지식 증명이 사용되는 것에 대한 초기 소개이며, 당신이 제로 지식 증명에 대해 어느 정도 이해하게 되었기를 바랍니다.