위험 경고: '가상화폐', '블록체인'이라는 이름으로 불법 자금 모집 위험에 주의하세요. — 은행보험감독관리위원회 등 5개 부처
검색
로그인
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
시장 동향 보기
영지식 증명 II에 대해 이야기하기: Short No Interaction Proof (SNARK)
安比(SECBIT)实验室
特邀专栏作者
2020-01-07 00:06
이 기사는 약 8209자로, 전체를 읽는 데 약 12분이 소요됩니다
기사의 마지막 호가 발행된 후, 많은 친구들이 기사를 읽고 좋아해줘서 매우 놀랐습니다. 그럼 이 에피소드를 계속하겠습니다! 이번에는 SNARK에 초점을 맞추겠습니다.

이 기사의 저자 Dongze는 Ambi Technology Community의 작은 파트너입니다. 그는 현재 스탠포드 대학에서 공부하고 있으며 그의 연구 방향은 암호학입니다. 이 기사 시리즈는 유명한 스탠포드 과정 "CS"에 대한 저자의 연구 노트에서 가져왔습니다. 251: 암호 화폐 및 블록체인 기술". 이 과정의 강사는 암호학의 마스터인 Dan Boneh입니다.

기사의 마지막 호가 발행된 후, 많은 친구들이 기사를 읽고 좋아해줘서 매우 놀랐습니다. 그럼 이 에피소드를 계속하겠습니다! 이번에는 SNARK에 초점을 맞추겠습니다.

나는 이전 기사를 읽은 친구들이 약간 의아해 할 것이라고 믿습니다. 왜 우리는 증명을 그렇게 짧게 만들고 긴 메시지를 증명할 수 있습니까? 나도 수업 전에 같은 의심을 품고 이것이 "검은 기술"이라고 생각했지만 이 기사를 읽고 나면 이 "검은 기술"을 제어하는 ​​방법을 알게 될 것이라고 믿습니다.

첫 번째 레벨 제목

SNARK의 4단계 구성

보조 제목

첫 번째 단계: 유한 필드 결정

구성하기 전에 먼저 계산하려는 모든 숫자를 포함할 수 있는 유한 필드(Finite Field)를 결정해야 합니다. 평신도의 용어로, 우리는 이 숫자가 우리가 풀고자 하는 문제의 모든 숫자보다 큰지 확인하면서 아주 아주 큰 숫자 p를 선택해야 합니다.

이전에 RSA 암호화에 대해 배운 적이 있는 친구는 이 개념에 익숙할 수 있습니다. 유한체는 우리의 모든 숫자에 상한을 더해 전체 수학 체계의 계산 공간을 결정하는 것으로 컴퓨터에서와 비슷하다. uint32_t(32비트)가 필요하거나 uint64_t(64비트)와 동일합니다. 유한 필드를 초과하는 모든 값은 직접 오버플로되고 다시 돌아가서 0부터 시작합니다.

수학의 세계에는 실제로 이러한 특성을 충족하는 많은 종류의 컴퓨팅 공간이 있으며 가장 일반적인 것은 RSA 알고리즘에서 사용되는 양의 정수 modulo a 큰 소수(integer mod p)입니다. 위에서 언급한 숫자 p를 찾는 것은 실제로 큰 소수이며, 이를 사용하여 계산 공간을 생성할 수 있습니다.

보조 제목

2단계: 산술 회로 구축

우리가 디지털 공간을 찾았을 때, 다음으로 해야 할 일은 우리가 증명하고 싶은 문제를 수학적 연산 회로로 표현하는 것입니다.

수학 연산 회로란? 먼저 전통적인 논리 회로를 살펴보겠습니다.

위의 그림은 NAND 게이트(NAND) 회로를 설명합니다. 회로의 유용성에 대해 너무 많이 알지 못하더라도 두 세트의 입력 신호가 각각 AND 및 OR의 두 기본 논리 게이트를 통과한다는 사실을 알 수 있습니다. AND 및 OR과 같은 기본 논리 게이트는 논리 회로의 기본 빌딩 블록이며 스플라이싱 및 스태킹을 통해 복잡한 논리를 구현할 수 있습니다.

기본 모듈이 논리 게이트에서 수학 연산으로 변경된 것을 제외하면 수학 연산 회로도 마찬가지입니다. 덧셈과 곱셈은 가장 기본적인 수학 연산이기 때문에 덧셈과 곱셈을 통해 다른 모든 계산 방법을 거의 실현할 수 있으므로 "덧셈 게이트"와 "곱셈 게이트"를 수학 연산 회로의 기본 모듈로 선택할 수 있습니다. 산술 게이트를 겹쳐서 복잡한 다항식의 "회로"를 만들 수 있습니다.

연산 게이트를 더 잘 이해하기 위해 위의 NAND 게이트를 논리 회로에서 수학적 연산 회로로 변환해 봅시다. (Inp0과 Inp1이 원래 논리 회로와 동일하다고 가정하면 여전히 1/0 논리 신호를 입력합니다.)

먼저 AND 게이트를 살펴보겠습니다. AND는 실제로 매우 간단합니다. AND의 결과는 Inp0과 Inp1이 모두 1일 때만 1이 되기 때문입니다. 우리는 곱셈 게이트가 AND 게이트를 완벽하게 대체할 수 있음을 곧 발견했습니다. 곱셈의 결과는 두 입력이 모두 1인 경우에만 1이 됩니다.

AND를 해결한 후 NOT을 변환해 보겠습니다. NOT은 실제로 매우 간단합니다. 입력 신호는 0 또는 1만 될 수 있기 때문에 입력 신호가 1에서 빼면 결과는 반대입니다. 덧셈과 곱셈만 있기 때문에 문제가 있으므로 뺄셈을 구현해야 하는 경우 먼저 입력 신호에 상수 -1을 곱해야 합니다.

이러한 변환 후 논리 회로를 디지털 논리 회로로 성공적으로 변환했습니다. 동시에 AND와 NOT을 만드는 방법을 이미 알고 있기 때문에 이론적으로 이 두 부분을 모듈화하고 복잡한 논리를 결합할 수 있습니다.

이것을 보면 산술 회로가 매우 간단하고 논리 회로로의 변환도 매우 간단하다는 것을 느낄 수 있습니다. 그러나 사실 이것은 우리가 그동안 산술회로의 입력이 논리회로와 같다고 가정하여 0이나 1로 가정하였기 때문이다. 실제 시나리오에서 연산 게이트의 입력 값은 매우 클 수 있습니다(유한한 필드 선택의 크기에 따라 다름). 그래서 우리는 방법을 찾아야 합니다연산 회로에 대한 입력 제한, 논리 회로와 기능적으로 동일할 뿐만 아니라 입력 값에 [0,1] 두 개의 숫자만 사용할 수 있습니다.

그러나 이러한 관계를 나타내기 위해 산술 게이트를 사용하는 방법은 무엇입니까? 수학 연산 회로는 실제로 복잡한 다항식이므로(예를 들어 위 그림의 NAND 회로는 Out = 1 - Inp0 * Inp1이 됨) 이 질문을 변환할 수 있습니다. 다항식을 만들 수 있습니까?입력이 [0,1]의 값 범위를 만족할 때만 0이 출력됩니까?마지막으로, 우리는 이 요구 사항을 충족할 수 있는 다항식이 있음을 발견했습니다.

위의 문자열은 숫자 n이 이 범위에 있을 때만 다음 다항식이 0을 출력함을 의미합니다. 즉, 위에서 언급한 Inp0과 Inp1을 이 다항식에서 변환된 연산회로에 연결할 수 있으며,이 연산 회로의 출력 결과가 0이면 위의 NAND 연산 회로의 출력도 정확하다고 확신할 수 있습니다.

어떤 사람들은 위의 값을 제한하는 다항식은 하나의 입력만 제한할 수 있지만 두 개의 입력이 있는데 동시에 값 범위를 제한하는 방법은 무엇입니까? 사실 답은 매우 간단합니다. 동일한 다항식을 복사하고 두 개를 더하면 됩니다.

이 두 회로를 사용하여 제약 회로의 출력이 0인지 확인하기만 하면 NAND 게이트 회로가 정상적으로 작동합니다.

한 가지 주목해야 할 점은 논리 게이트가 산술 게이트로 구성되어 있기 때문에 논리가작동이 매우 느림보조 제목

3단계: 증명 가능한 수학적 연산 회로로 변환

디지털 컴퓨팅 회로의 개념이 있으면 서로 다른 회로 모듈을 함께 연결하여 증명으로 사용할 수 있는 컴퓨팅 회로를 생성할 수 있습니다.

먼저 정의하자증명으로 사용할 수 있는 디지털 연산 회로 C(x, w), 구체적인 구조는 다음과 같습니다.

간단히 말해서 이 회로 C에는 두 세트의 입력이 있습니다.

x 레이블이 지정된 첫 번째 입력 집합을 호출합니다.공개 입력, 이는 모든 사람이 x의 값을 알 수 있음을 의미합니다. 이 x는 일반적으로 증명하려는 문제의 특성과 일부 고정된 환경 변수를 나타냅니다.

두 번째 입력 세트는 w라는 레이블이 지정되어 있습니다.비밀 입력, 또는 증인이라고도 합니다. 이 데이터 집합은 실제로 증명을 제출한 당사자에 대한 답변이며 증명을 제출한 당사자만 알 수 있으며 다른 사람은 알 수 없습니다.

C 회로가 있을 때 우리의 목표는C(x, w) = 0임을 증명. 즉, A와 B가 수학 연산 회로 C의 출력이 0이고 공개 입력이 x라는 것을 알고 있다고 가정하면, A는 이 출력을 구성하는 비공개 입력 값 w를 알고 있음을 증명해야 합니다.

이 C(x, w) 개념을 위에서 언급한 NAND 게이트 예제에 대입하면 NAND 게이트만으로는 증명을 위한 회로가 되기에 충분하지 않음을 알 수 있습니다. 증명하려는 문제를 다음과 같이 재정의할 수 있습니다.NAND 게이트의 출력이 0이고 입력 Inp0 중 하나가 1이라는 것을 알고 있다면,A는 다른 입력 Inp1의 값을 알고 있음을 증명하려고 합니다. 이 증명 과정에서 NAND 게이트의 출력이 올바른지 확인해야 할 뿐만 아니라 모든 입력 값이 사전에 합의한 범위 내에 있는지 확인해야 합니다.

위에서 논의한 방식을 결합하고 NAND 회로 출력과 값 제한 회로를 함께 연결하여 연산 회로 C를 형성합니다. x는 Inp0이고 w는 Inp1이며 출력을 0으로 제한하여 완전한 NAND 게이트 프라이버시를 형성합니다. 인증 시스템.

최종 증명 회로 C를 얻으면 이 연산 회로의 복잡성을 계산할 수 있습니다.

디지털 연산 회로 C가 얼마나 어려운지 알고 싶다면 연산 게이트가 몇 개인지에 따라 복잡도를 설명할 수 있습니다. 일반적으로 표현하기 위해 사용합니다. 위에서 언급한 NAND 증명 회로처럼 아마 10 정도일 것입니다.

보조 제목

4단계: 비대화형 단락 증명 시스템(SNARK)

세 번째 단계를 통해 최종 증명 회로 C와 해당 x 및 w를 얻었을 때 준비가 거의 완료되었습니다. 나머지는 SNARK 알고리즘에 넘겨서 증명을 생성하고 검증할 수 있습니다.

먼저 전체 비대화형 증명 시스템의 공식적인 정의를 살펴보겠습니다.

SNARK 시스템은 종종 설정, 증명 및 확인의 세 가지 핵심 알고리즘으로 구성됩니다.

  • 알고리즘 설정 생성:

    설정 알고리즘은 결정된 회로 C를 일련의 전처리(전처리)로 가져온 다음 두 세트의 매개변수를 생성합니다. Sp는 증명자를 위한 매개변수이고 Sv는 검증자를 위한 매개변수입니다. 이러한 매개변수의 목적은 양 당사자가 간단한 증명을 생성하고 검증할 수 있도록 하는 것입니다. 일반적으로 생성 알고리즘의 복잡도는 회로 C, O(|C|)의 복잡도에 비례한다.

  • 증명 알고리즘 증명:

    증명 알고리즘에 대해 말할 필요가 없습니다.Prover는 Prove 알고리즘을 사용하여 증명을 생성한 다음 검증자에게 증명을 보냅니다. Prove 알고리즘은 증명을 재생성할 때 전처리된 데이터 Sp, 공개 입력 x 및 비공개 입력 w와 같은 거의 모든 데이터를 사용합니다. 결과 증명은 공간 복잡도가 매우 짧습니다: |Π| = O(log|C|).

  • 확인 알고리즘 확인:

    확인 알고리즘도 매우 간단합니다. 확인자는 확인 알고리즘을 사용하여 받은 증거를 확인합니다. 이 알고리즘은 확인이 통과되었는지 여부를 나타내는 1/0 값을 반환합니다. 검증 과정에서 상대방이 제공한 증명 외에도 데이터와 공개 입력 x를 전처리해야 합니다. 검증 복잡도도 매우 작으며 일반적으로 O(|x| + log|C|)입니다.

이 세 가지 알고리즘을 사용하면 매우 간단한 다이어그램을 사용하여 전체 증명 시스템을 설명할 수 있습니다.

첫 번째 레벨 제목

예시: 프라이빗 트랜잭션의 입력 및 출력 범위(Range Proof)

이전 기사를 읽은 친구는 여전히 개인 거래(기밀 거래)를 수행하려는 경우 거래 끝에 세 가지 증명 세트를 첨부해야 한다는 것을 기억해야 합니다.

  • 첫 번째 그룹은피더슨 약속, 입력과 출력 간의 수학적 관계를 증명합니다.

  • 두 번째 그룹은간격 증명, 입력 값과 출력 값이 모두 양의 정수 범위에 있음을 증명해야 합니다.

  • 세 번째 그룹은소유권 증명, 거래 개시자가 실제로 입력으로 너무 많은 토큰을 가지고 있음을 증명합니다.

Pederson의 약속 이행은 이전 기사에서 이미 논의되었습니다. 이제 짧은 증명의 4단계 구성을 이해했으므로 이를 구현하는 방법을 자세히 볼 수 있습니다.간격 증명

먼저, 우리는적절한 수학 회로우리가 증명하고 싶은 것을 설명하기 위해. (우리는 기본적으로 양의 정수의 유한 필드를 사용하고 모듈로에 대해 매우 큰 소수 p를 선택합니다.)

숫자 w가 있고 이 숫자 w가 음수가 아님을 증명하려는 경우 먼저 양의 정수 범위에 있어야 함을 증명할 수 있습니다. 컴퓨터 시스템의 양의 정수가 일반적으로 256비트를 초과하지 않는다는 점을 고려하면 문제를 약화시킬 수 있습니다.숫자 w가 0-2^256 사이의 값을 가짐을 증명하십시오.(이 조건에 따라 유한체에서 선택한 소수 p는 2^256보다 커야 합니다.)


이제 해결해야 할 문제를 결정했으므로 이 값 관계를 덧셈과 곱셈으로 표현하는 방법에 대해 생각할 수 있습니다. 이전 장에서 0과 1 사이의 값 n에 대해 이야기할 때 이 값 범위를 제한하기 위해 n * (n - 1) = 0을 사용했음을 기억하십시오.같은 방식으로 제약 조건이 0에서 5 사이의 값을 가지도록 하려면 더 긴 일련의 곱셈으로 제약 조건을 지정할 수 있습니다.

이것을 보면 w의 값을 제한하는 방법을 이미 알고 있을 것입니다. 이 방정식을 확장하기 위해 동일한 방법을 사용하고 (w - 1)에서 (w - 2^{256})까지 연속적으로 곱하기만 하면 됩니다. 좋아요?

간단하게 들리지만 신중한 친구들은 최종 회로에서2^256이 있습니다.곱셈 게이트. 곱셈이 너무 많고 덧셈이 없기 때문에 이 회로의 복잡성은 이미 천문학적입니다. 셋업을 실행해도 원숭이띠로 달려가게 될지 모를 수 있으므로 이 제약조건의 방법은 다음과 같다고 합니다.현실적이지 않다.

그렇다면 이 숫자 w의 공간을 제한할 수 있는 방법은 없을까요? 우리는 할 수 있습니다이진수의 구조를 영리하게 사용하십시오.우리는 w가 정수이고 0보다 크고 2^256보다 작다고 규정하고 싶기 때문에 이진법으로 다음과 같이 할 수 있습니다.w를 256비트로 분할한 다음 각 비트를 개별적으로 제한합니다.이 경우 우리가 최종적으로 얻는 회로의 크기는 이 숫자의 자릿수에 비례할 뿐이며 이 숫자의 최대 상한과는 관련이 없습니다. 복잡성이 갑자기 크게 떨어졌습니다.

어떻게 달성됩니까? 먼저 w를 256비트로 나눕니다.


각 비트는 이진수이므로 각 비트의 값 공간을 0과 1로 제한해야 합니다.

이 제약 조건에는 각 비트당 하나씩 256개의 복사본이 필요합니다. 이러한 제약 조건이 준비되면 마침내 모든 비트가 함께 원래 w로 복원될 수 있는지 확인합니다.

위에서 언급한 모든 256+1=257 제약 회로를 함께 연결하여 하나의 출력으로 결합합니다. 최종 생성된 회로는 증명 시스템을 구축하는 데 사용할 수 있는 회로 C입니다. C의 출력이 0이면 입력을 나타내는 숫자는 다음을 충족해야 합니다.

  • 이 숫자는 256비트 이진수로 표현할 수 있는 양의 정수입니다.

  • 이 256비트 이진수는 실제로 이진수입니다. (값 0 또는 1만 사용할 수 있음)

  • 이러한 256비트 이진수를 모두 조합하여 입력한 숫자를 복원할 수 있습니다.

바이너리의 특성을 교묘하게 이용하여,첫 번째 레벨 제목

예: 개인 트랜잭션 입력의 소유권

간격 증명을 해결한 후 프라이빗 트랜잭션의 마지막 증명 세트인 프라이빗 트랜잭션의 입력 값이 합리적임을 증명하는 소유권 증명을 완성해 봅시다.

이전 기사를 읽은 친구는 개인 거래의 소유권 증명을 위한 두 가지 시스템에 대해 이야기했음을 알아야 합니다.

첫 번째 솔루션은 트랜잭션이 이전 트랜잭션의 출력을 직접 참조할 수 있지만 이는 닭과 달걀 문제를 야기할 것입니다. 어려움은 첫 번째 프라이빗 트랜잭션을 생성하는 방법에 있습니다. 두 번째 해결책은 거래를 시작한 사용자의 계정 잔액이 실제로 그만큼의 돈을 가지고 있음을 증명하는 또 다른 새로운 증거를 각 거래 아래에 첨부하는 것입니다.

강조하고 싶다두 번째 증명 방식은 World State에서 트랜잭션 개시자의 계정 잔액을 증명하는 것입니다.

많은 블록체인 시나리오에서 전 세계의 상태는 거대한 원장입니다. 원장의 각 라인은 특정 사용자의 계정 잔액을 기록합니다.

전 세계의 상태를 보다 편리하게 표현하기 위해 머클 트리를 사용하여 거대한 세계 원장을 일련의 짧고 깔끔한 머클 해시 값으로 변환합니다. 계정의 잔액이 변경될 때마다 이 Merkle 해시가 변경됩니다.

Merkle 트리는 실제로 이진 트리입니다.각 노드는 아래 두 자식 노드의 값을 함께 연결하고 해당 해시 값을 자체 값으로 계산합니다. Merkle 트리의 구축을 용이하게 하기 위해 먼저 가장 원래의 잔액 값에 대해 해시 계산을 수행한 다음 해당 해시 값을 Merkle 트리 하단에 저장합니다.

이런 방식으로 Merkle 트리를 구축하면 출력 Merkle 해시 값을 다음과 같이 처리할 수 있습니다.약속: 약속이 변하지 않는 한 세상의 현 상태도 변하지 않아야 합니다.블록체인에서 긴 데이터 목록의 상태를 기록하려는 경우 일반적으로 공간을 절약하기 위해 데이터 자체를 체인에 저장하는 대신 체인의 모든 데이터에 대한 Merkle 커밋을 기록합니다.

우리가 세계의 상태에 대한 약속을 한 후에 후속 질문은 다음과 같습니다.위 그림에서 A가 계좌 1이면 현재 5위안이 있습니다. A는 전 세계 상태에서 그녀의 잔고가 실제로 5위안이라는 것을 B에게 어떻게 증명합니까?

매우 간단한 방법은 A가 모든 계정의 잔액을 B에게 제출할 수 있고 B가 자체적으로 Merkle 약정 계산을 수행하는 것입니다. B의 계산된 약정이 현재 세계 국가 약정과 동일하고 A가 자신의 계정 잔액이 실제로 5위안이라고 제출하는 한 B는 A가 실제로 5위안을 가지고 있다고 믿을 수 있습니다.

아주 좋은 방법처럼 들리지만, 이 방법의 문제점은 한눈에 명백합니다. 이 세상에는 수억 명의 사용자가 있고 A가 B에게 수억 라인의 예치금을 제출해야 한다면 B가 이 약정을 어떻게 효과적으로 계산할 수 있는지는 말할 것도 없고 네트워크 트래픽만으로도 고갈될 것입니다. 그리고 그러한 증명 방법은 모든 사용자의 잔액 정보를 노출시킬 것이며 모든 사람이 확실히 원하지 않습니다.

그렇다면 계정 1의 잔액이 현재 세계 상태에 속한다는 것을 어떻게 효과적으로 증명할 수 있을까요? 이때 Merkle 트리의 특성을 이용하여 Merkle 증명을 구성할 수 있습니다.

위의 그림에서 가지치기된 머클 트리를 주의 깊게 관찰하면 계정 1의 잔액이 머클 트리의 인접한 노드와 최종 세계 상태 커밋을 형성할 수 있음을 증명하는 한 다음의 잔액도 증명할 수 있음을 알 수 있습니다. 계정 1 세계의 현재 상태에 속합니다.

그것을하는 방법? 계정 1의 잔액부터 시작하겠습니다.Merkle 트리 위로 끝까지 가십시오.

계정 1의 잔액으로 H1을 계산할 수 있습니다. H1을 얻은 후 H0 값을 결합하여 H4를 생성할 수 있는 한 계정 0의 잔액을 알 필요가 없다는 것을 알았습니다. 같은 방식으로 H5의 값과 결합하여 최종적으로 정점 H6의 Merkle Commitment를 생성할 수 있습니다. 결국 이 Merkle 증명을 완료하기 위해 계정 1, H0 및 H5의 잔액 세 가지만 제출하면 됩니다. 나머지 모든 해시 값은 검증 과정에서 계산할 수 있습니다. 이것이 머클 증명입니다.

Merkle 증명을 통해 증명의 양을 크게 줄일 수 있으며, 증명 과정에서 world state에 있는 다른 사용자의 잔액이 노출되지 않도록 할 수도 있습니다. 머클 증명은 암호화에 매우 유용하며, 길이가 N인 목록에 무언가가 있음을 증명하기 위해 n의 크기만 필요합니다. 우리는 종종 Merkle 증명을 사용하여 데이터 집합이 대용량 파일에 속하고 사용자가 대규모 조직에 속한다는 등을 증명합니다.

Merkle 증명의 원리를 이해한 후 A가 개인 거래에서 자신의 잔액을 증명할 수 있음을 증명하는 방법을 살펴보겠습니다.

Merkle 증명의 본질은 우리가 할 수 있다는 것입니다.증명할 값부터 시작하여 끝까지 해시값을 계산하고 인접 노드의 해시값과 지속적으로 병합한다.그러나 우리는 매우 치명적인 문제를 발견했습니다. 우리는 세계 상태에서 다른 사람의 균형을 숨길 수 있지만 여전히잔액을 노출해야 합니다.(그렇지 않으면 첫 번째 해시 값 H1을 계산할 방법이 없습니다). 이것은 우리 개인 거래의 본질에 위배됩니다!

이때 SNARK의 힘을 사용해야 합니다.보조 제목

1단계: 잔액 해시 증명

첫 번째 단계에서 SNARK를 사용하여 계정 1의 잔액이 해시 함수를 통과한 후 해시 값 H1을 얻을 수 있음을 증명합니다.

계정 1의 잔액을 숨기고 싶기 때문에 이 숫자를 w로 표시합니다. SNARK를 적용하기 전에 수학 연산 회로로 표현하기 더 편리하도록 문제의 설명 방법도 변경해야 합니다.

A 자신이 비밀 w = 계정 1의 잔액을 가지고 있다고 가정합니다. A와 B 모두 계정 1 잔액의 해시 값 H1을 미리 알고 있습니다(x로 표시할 수 있음). 수학 연산 회로 C: Hash(w) - x = 0을 구성할 수 있습니다. C(x, w) = 0이면 Hash(w) = x입니다.

표현을 단순화하기 위해 추상 모듈을 사용하여 그래프에서 해시 함수를 나타냅니다. 실제로는 일반적으로 SHA256 해시 함수를 사용합니다. 최종 회로 C를 얻은 후 설정 알고리즘을 사용하여 매개변수를 생성한 다음 Prove 알고리즘을 사용하여 간단한 증명을 생성합니다.

이 단계를 통해,우리는 공개 x와 증명을 얻을 것이며 이 x의 값은 계정 1 잔액의 해시 값입니다.보조 제목

2단계: H1에서 Merkle 증명 완료

이전 단계에서 H1을 얻을 수 있었고 H1이 실제로 원래 세계 상태에서 생성되었다는 증거도 제공했습니다. 이제 우리가 해야 할 일은 H1에서 시작하여 각각 인접한 H0 및 H5와 결합하여 새로운 세계 상태 약속을 생성하는 것입니다. 생성된 커밋을 블록체인에 저장된 이전 커밋과 비교하면 계정 1의 잔액이 실제로 세계 상태에 있다고 믿을 수 있습니다.

요약하면 소유권 증명을 두 단계로 나누었습니다., 첫 번째 단계는 비밀 w가 해시 함수에 의해 x로 변환될 수 있음을 증명한 다음 공개 x가 전 세계 상태의 Merkle 트리에 속함을 증명하는 것입니다.첫 번째 레벨 제목

개인 거래 요약

이를 보면 개인 거래가 어떻게 실현되는지에 대한 전반적인 이해가 있어야 합니다. 이제 A가 B에게 개인 거래를 지불하기를 원하는 경우 A가 해야 할 일을 요약하겠습니다.

  • 첫째, A는 전체 네트워크에 전송해야 합니다.개인 거래 제출, 이 트랜잭션에는 트랜잭션의 개시자와 수취인이 포함되지만 수량이 없습니다.입출력의 원래 수량은 몇 개의 왜곡된 문자열로 대체됩니다.

  • 이 트랜잭션 아래에서 A는 입력 및 출력 숫자의 합이 같다는 것을 증명하기 위해 Pederson 약속을 첨부해야 합니다.

  • 그런 다음 A는 패스를 한 번 더 추가해야 합니다.SNARK에서 생성한 간격 증명(Range Proof), 입력 및 출력 숫자가 모두 0보다 큰 양의 정수임을 증명합니다.

  • 마지막으로 A는소유권 증명, 이것은 그녀가 실제로 돈이 입금되는 계좌 w를 소유하고 있음을 증명합니다. 이 소유권 증명은 두 부분으로 나뉩니다. 하나는 SNARK에서 생성된 해시 값 증명이고 다른 하나는 이전 해시 값이 실제로 세계 상태에 속함을 증명하는 Merkle 증명입니다.

첫 번째 레벨 제목

계속되다

공간상의 이유로 이번에는 여기서 멈추겠습니다. 아마도 모든 사람들이 이것을 보았고 이미 영지식 증명의 "증명" 부분을 이해했을 것입니다. 아마도 수학적 연산 회로가 무엇인지 알고 있을 것이며 실제 문제를 회로로 변환하는 방법을 알고 있을 것입니다.

많은 분들이 궁금해하실 거라 생각하는데 Setup, Prove, Verify 세 가지 알고리즘은 어떻게 작동할까요? 다음 호에서는 SNARK 증명 시스템의 기본 원리에 대한 심도 있는 이해를 얻기 위해 심층 분석을 계속하겠습니다.

더 읽어보기

늘 그렇듯이 읽기 목록의 일부는 기사 끝에 제공되며 관심 있는 친구는 이에 대해 자세히 알아볼 수 있습니다.

安全
Odaily 공식 커뮤니티에 가입하세요