블록체인 데이터 프라이버시 보호를 위한 암호학

Seunghwa Lee
CPLABS-TECH
Published in
12 min readFeb 4, 2021

안녕하세요, 코인플러그 플랫폼 개발팀 엔지니어 이승화입니다. 이 글은 블록체인 기술과 데이터 프라이버시, 영지식 증명에 대한 간단한 설명을 담고 있습니다.

목차

0. 시작하는 말
1. 영지식 증명
2. 영지식 증명 용어 정리
3. 영지식 사용 예시
4. 마치며

0. 시작하는 말

최근 블록체인 기술과 관련하여 프라이버시(개인정보보호)의 문제가 종종 언급되고 있으며, 이와 함께 영지식 증명 (Zero-knowledge proof)이라는 기술이 주목받고 있습니다. 블록체인과 관련하여 왜 프라이버시 문제가 대두되고 있는 것일까요?

블록체인이 각광받고 있는 가장 큰 이유는 강력한 분산화와 함께 “공개 원장”으로 사용될 수 있기 때문입니다. 공개 원장이란 말 그대로 누구나 볼 수 있는 원장이란 뜻입니다. 누구나 적을 수 있고, 목록을 확인하고 그 정합성을 검증할 수 있는 이 공개 원장에 비트코인이라는 “암호화폐(가상자산)의 거래내역”이 적히며 사람들은 이 기술의 유용성을 확인하게 되었습니다.

하지만 이 기술이 상용화되는 과정에서 말 그대로 “누구나 볼 수 있는 목록”인 것이 문제가 되기 시작했습니다. 내가 누구에게 암호화폐를 언제, 얼마나 보내는지 등 모든 내역이 공개되기 때문에 “공개 원장”으로써 데이터 정합성의 담보라는 가치를 가질 수 있었던 기술은 프라이버시의 문제에 맞닥뜨리게 됩니다. 이처럼 블록체인을 응용하여 새로운 어플리케이션을 만들고자 할 때 프라이버시 노출은 항상 함께 언급되는 문제입니다. 반면, 기존의 중앙화 된 데이터 베이스와 같은 저장소들은 프라이버시 데이터가 노출되지 않도록 특정 관리자만 접근할 수 있게 합니다. 그러나 이 때문에 데이터의 공개적 인증이 불가하고 데이터의 정합성을 증명하기 위해 다양한 매개체(중앙기관)와 장치들이 추가됩니다. 이처럼 프라이버시 보호와 공개적 인증이라는 서로 상반되는 속성들을 충족하는 것은 어려운 일입니다.

그러나 최근 이 문제를 암호학 중 하나인 “영지식 증명”으로 해결을 할 수 있게 되어 많은 사람들이 관심을 갖기 시작하였습니다. 하지만 이 영지식 증명은 접근하는 것이 쉽지만은 않습니다. 본 글에서는 이 영지식 증명을 이해하고 활용하고 싶으신 분들을 위해 블록체인과 영지식 증명을 위한 암호학에 대한 기본 정의들과 용어 등을 소개하도록 하겠습니다.

1. 영지식 증명 (Zero-knowledge proof)

[그림 1] 영지식 증명 예제 ( 나이 증명 )

프라이버시 보호공개적 인증, 이 두 가지 상반되는 속성을 영지식 증명이 어떻게 만족시키는지에 대해서 알아보도록 하겠습니다.
- 본 글은 실제로 더 많이 사용되고 있는 비대화형 영지식 증명 (Non-Interactive Zero-Knowledge proof, NIZK)을 기준으로 설명합니다. 비대화형 영지식 증명과 대화형 영지식 증명에 대한 내용이 궁금하시다면 [여기]를 확인하세요.
- 영지식 증명은 Goldwasser et. al.[GMR]에서 처음으로 제안되었습니다.

영지식 증명의 사전적 정의는 다음과 같습니다.

증명자가 알고 있는 내용, 지식을 검증자에게 보여주지 않으면서도 알고 있음을 증명하는 방법

영지식 증명은 Setup, Prove, Verify 라는 세 알고리즘으로 이루어져 있습니다.

  • Setup : 증명에 사용할 Common Reference String (CRS)를 생성한다.
  • Prove : CRS를 사용하여 증명하고자 하는 내용(Statement)과 비밀정보(Witness)를 알고 있음에 대한 증명(Proof)을 생성한다.
  • Verify : CRS를 사용하여 증명하고자 하는 내용(Statement)과 증명자로부터 받은 증명(Proof)을 이용하여 직접적인 비밀정보 제공 없이 증명자에게 비밀정보가 있음을 검증한다.

그리고 이 증명 시스템은 다음 세 가지 안전성 속성(Security properties : Completeness, Soundness, Zero-knowledge)을 가지고 있습니다.

  • Completeness : 증명자가 정당한 내용과 비밀정보를 가지고 증명을 생성하면 검증자는 항상 검증 할 수 있다.
  • Soundness : 증명자가 정당한 비밀정보를 갖고 있지 않을 때 검증을 통과할 수 있는 증명을 생성할 수 없다.
  • Zero-knowledge : 검증자는 증명을 통해 비밀정보에 대해 알 수 없다.

정리하면,

증명자(Prover)와 검증자(Verifier)는 증명하고자 하는 내용(Statement)과 공개적인 값(Instance)을 공유하고 비밀정보(Witness)는 증명자만 가지고 있습니다. 증명자가 비밀정보(Witness) 없이는 검증 가능한 증명(Proof)을 생성하지 못하고(Soundness) 검증자는 증명을 통해 비밀정보에 대한 어떠한 정보도 얻을 수 없습니다(Zero-knowledge).

영지식 증명에 가장 유명한 예로 동굴 예제가 있는데, 이 글에서는 기술적인 건 잠시 넘어가고 좀 더 개념적이고 사용에 가까운 예시로 들도록 하겠습니다.
이해를 돕기 위해 영지식 증명의 사용 예시로 가장 많이 사용하는 성인 인증을 예시로 한다면,

증명하고자 하는 내용(Statement): 나이>19이다.

비밀정보(Witness): 나이=23

또는 거래 관련해서는

증명하고자 하는 내용(Statement): 유저1이 유저2에게 얼마를 보냈다.

비밀정보(Witness): 유저1=A, 유저2= B, 얼마=10 BTC

로 표현이 가능합니다. 이처럼 영지식 증명은 원하는 내용을 공개적으로 증명할 수 있고, 또한 증명 과정에서 비밀정보를 보여줄 필요가 없습니다.

공개적 증명과 프라이버시 보호 이 두 가지 양립된 속성을 풀 수 있는 영지식 증명은 블록체인 기술이 보편화 될수록 더 많은 영역에서 사용될 것입니다.

2. 영지식 증명 용어 정리

영지식 증명이 쉬운 기술이 아닐 뿐만 아니라 수학, 암호학, 컴퓨터 공학 기술들이 접목된 전문 용어로 설명이 되어있어 이해하기가 쉽지 않습니다. 이 글에서는 영지식 증명의 이해를 돕기 위해 영지식 증명 관련 문서들에서 만나게 되는 다양한 용어들에 대해서 알아보고자 합니다.
- 용어에 대한 설명은 영지식 표준화 기구인 ZKProof Community의 reference [ZKPRef]를 참조하였습니다.

  • CRS ( common reference string)

비대화형 영지식 증명(Non-Interactive Zero-knowledge Proof System, NIZK)을 위해 증명자와 검증자 사이에 하나의 규약이 있습니다. 대화형(Interactive)에서는 상대방을 속이지 못하도록 랜덤한 값을 주고받지만, 비대화형은 이러한 과정 없이 증명자가 증명을 생성하면 검증자는 이를 이용해 검증하는 형식이기 때문에(증거를 검증할 때 추가적인 메시지 교환을 하지 않기 때문에) 이러한 랜덤 값을 증명과정 전에 규약을 해놓는 것입니다. 이를 위한 값이 Common Reference String (CRS)이며, 증명 방식에 따라 순수한 랜덤 값일 수 있고 또는 증명하고자 하는 내용에 연관된 랜덤 값일 수 있습니다. 많은 사람들이 영지식 증명에서의 키(Key)라고 생각하는 것이 이 CRS이며 이 CRS는 증명자와 검증자가 둘 다 사용하게 됩니다.

[그림 2] Relation 관계도
  • Statement, Instance

Statement는 증명하고자 하는 내용을 뜻합니다. 개발자 기준에서 본다면 증명하고자 하는 프로그램의 수행과정이 됩니다. 그리고 공개되는 파라미터, 값들을 Instance라고 합니다. 만약 전자 신분증 발급에 대한 영지식 증명을 생성한다면 발급하는 프로그램을 Statement, 그리고 발급하는 과정의 파라미터 중 공개할 입력, 출력, 또는 상숫값들이 Instance가 됩니다.

  • Witness

비밀정보인 Witness는 증명자가 공개하지 않을 내용입니다. 예를 들어, 전자 신분증이 발급될 경우 주민등록번호, 주소와 같은 개인정보는 Witness가 되며 증명에서 공개하지 않을 부분을 뜻합니다.

  • Relation

Relation은 공개될 정보(Instance)와 비밀정보(Witness)의 모든 쌍의 집합입니다. Statement는 “내가 전자 신분증을 제대로 발급받았는가?”를 뜻한다면 Relation은 전자 신분증을 발급하는 프로그램으로 보시면 됩니다.

  • Language

Relation이 Instance와 Witness의 집합이라면 Language는 Relation에 속하는 모든 Instance의 집합을 뜻합니다. 형식적인(Formal) Soundness의 뜻은 Instance가 Language에 속하는지를 확인합니다.

[그림 3] ZKP 관계도
  • Proof of Knowledge (PoK)

말 그대로 지식이 있는지를 증명하는 것입니다. 일반적인 Proof는 참인 Statement를 증명합니다(Soundness). 이 Soundness로는 증명자가 Witness를 알고 있는지를 증명하지는 못합니다. 반면 Proof of Knowledge의 안전성은 Knowledge Soundness를 만족시키고 이는 Statement가 참이면서 해당 Witness를 사용해서 증명했다는 것을 모두 뜻합니다. 같은 공개 값에 비밀 값이 두 가지가 있으면 Proof로 증명할 경우 이 두 가지를 구분할 수 없지만 Proof of Knowledge는 증명자가 정한 비밀 값으로 증명됐다는 것을 구분할 수 있습니다.

  • Argument

Proof of Knowledge에서 Proof는 어떤 공격자(All-Powerful, 모든 공격자)가 있더라도 증명을 조작하지 못한다는 개념을 내포하고 있습니다. 하지만, 이는 효율적으로 증명하기 힘듭니다. 이에 대한 대안으로 Argument에서는 공격자의 능력을 낮춰 Computational 능력(Exponential이 아닌)을 가진 공격자가 증명을 조작하지 못한다는 것을 증명합니다. 효율성을 위해 Proof보다 Argument를 많이 사용하는 것이 추세이며, 이 또한 증명으로 부르고 있습니다. 또, Proof와 마찬가지로 Knowledge Soundness를 만족하는 경우 Argument of Knowledge(AoK)로 부릅니다.

  • zk-SNARK (zero-knowledge Succinct Non-interactive ARgument of Knoweldge)

영지식 증명이고 비대화형이며 공격자의 능력을 Computational로 가정하고 Knowledge Soundness를 만족하는 증명입니다. Succinct는 증명의 크기가 작고 검증 속도가 빠름을 뜻합니다. 프로그램 수행 과정의 검증이 프로그램을 돌리는 것보다 빠르길 기대하기 때문에 Succinctness 속성이 나오게 되었습니다. 이 zk-SNARK는 영지식 증명에서 가장 핫 한 영역입니다. 그 이유는 Succinctness를 만족하는 효율성과 임의의 프로그램을 증명할 방법(소속증명, 범위증명 등)이 알려져 있기 때문입니다.

3. 영지식 사용 예시

그럼, 영지식 증명이 실제 사용되고 있는지 몇 가지 예를 들어보겠습니다.

Zcash : Zcash는 암호화폐 중 하나로 영지식 증명으로 거래 내역을 감추고 있습니다. 누가 누구에게 보냈는지 얼마를 보냈는지를 전부 감추면서도 이 내역에 대한 공개 검증이 가능한 증명을 블록체인에 적어 프라이버시 보호가 가능한 암호화폐를 서비스하고 있습니다.

Hyperledger Indy : Hyperledger 프로젝트 중 분산 ID(DID)를 위한 프로젝트인 Indy는 URSA 프로젝트와 함께 영지식 증명으로 분산 ID 증명서를 생성하고 있습니다. 영지식 증명으로 신원정보를 감추면서도 증명을 할 수 있도록 하고 있습니다.

Mina protocol : 블록체인의 문제점 중 하나인 점점 커지는 블록 크기 때문에 이미 성장한 블록체인을 처음부터 다 받으려면 큰 용량이 필요합니다. 그러나 Mina protocol은 이를 영지식 증명으로 블록의 내용이 검증된 블록임을 증명하여 이 증명을 블록체인 대신 사용합니다. 즉 사용자는 증명 하나만 가지고 있으면 이 값이 현재까지 적힌 모든 블록에 있는 데이터가 옳다는 것을 증명할 수 있습니다.

ZK Rollup : 아직 사용된 것은 아니지만 이더리움의 문제점 중 하나인 트랜잭션 확장성을 영지식으로 해결하려는 Rollup 방법입니다. 기존 트랜잭션의 내용을 전부 블록에 적어야 하기 때문에 이를 전부 검증해야 하며, 이 트랜잭션의 크기 때문에 스마트 컨트랙트의 사이즈 또한 제한되어야 했습니다. ZK Rollup은 이러한 문제점을 영지식을 통해 트랜잭션 내용을 하나의 영지식으로 만들어 이더리움에는 증명만 적는 거로 해결하는 방법입니다.

이외에도 Login 시스템과 같은 다양한 인증 시스템을 대체하려는 연구가 많이 있습니다.

4. 마치며

블록체인에서 영지식이 필요한 이유와 영지식 증명에 대해 간략한 소개를 해보았습니다. 실제 영지식 증명을 사용하기 위해서는 증명하고자 하는 내용을 영지식 증명 스킴(Scheme)에 맞게 변형시켜야 하는 과정뿐만 아니라 CRS 생성에 Trusted 3rd Party가 필요할지 안 할지 등의 여러 이슈가 있지만, 첫 시작점에서 처음 접하는 사람들에게 도움이 되고자 이 글을 적어보았습니다.

글 읽어 주셔서 감사합니다. 관련하여 의견이나 문의 있으시다면 메일 부탁드립니다.
- 이메일 : contact@coinplug.com

5. 참고자료

[GMR] S. Goldwasser, S. Micali, and C. Rackoff. Knowledge Complexity of Interactive Proofs. Proc. 17th STOC, pages 291–304. 1985.

[ZKPRef] ZKProof Community Reference v0.2, https://docs.zkproof.org/reference.pdf

--

--