BTC
ETH
HTX
SOL
BNB
시장 동향 보기
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

Nova: 영지식 증명의 새로운 장

HTX
特邀专栏作者
2023-07-11 05:54
이 기사는 약 13863자로, 전체를 읽는 데 약 20분이 소요됩니다
Nova는 Microsoft에서 개발한 새로운 영지식 증명 시스템으로, Relaxed Rank-1 Constraint Systems(Relaxed R1CS)라는 기술을 사용하여 증명의 효율성과 유연성을 향상시킵니다.
AI 요약
펼치기
Nova는 Microsoft에서 개발한 새로운 영지식 증명 시스템으로, Relaxed Rank-1 Constraint Systems(Relaxed R1CS)라는 기술을 사용하여 증명의 효율성과 유연성을 향상시킵니다.

소개

소개

영지식 증명은 다른 정보를 공개하지 않고 한 사람이 다른 사람에게 진술이 사실임을 증명할 수 있도록 하는 암호화의 중요한 기술입니다. 이 기술은 인증, 블록체인, 보안 컴퓨팅 등 다양한 분야에서 광범위하게 적용됩니다. Nova는 Microsoft에서 개발한 새로운 영지식 증명 시스템으로, Relaxed Rank-1 Constraint Systems(Relaxed R 1 CS)라는 기술을 사용하여 증명의 효율성과 유연성을 향상시킵니다. 마지막 장에서는 소스코드에 대해 자세히 설명합니다.

노바의 장점

Nova의 가장 큰 장점은 사용하는 편안한 R1CS 기술입니다. R1CS는 영지식 증명을 구축하기 위한 시스템으로, 해에 대한 정보를 공개하지 않고도 다항 방정식 세트에 대한 해를 알고 있음을 증명하는 데 사용할 수 있습니다. 그러나 기존 R1CS 시스템은 증명 프로세스에서 많은 양의 무작위성을 사용해야 하므로 증명 생성 및 검증 프로세스가 매우 복잡하고 시간이 많이 걸립니다. Nova는 증명에 무작위성을 덜 사용하여 증명 효율성을 크게 향상시키는 완화된 R1CS를 사용하여 이 문제를 해결합니다.

Nova에는 다른 장점도 있습니다. 예를 들어 증분 계산을 지원합니다. 즉, 전체 함수를 한 번에 계산하는 대신 복잡한 함수를 단계별로 계산할 수 있습니다. 이는 대규모 데이터를 처리하거나 복잡한 계산을 수행할 때 매우 유용합니다. 또한 Nova는 다항식 계산도 지원하므로 더 복잡한 증명 작업을 처리할 수 있습니다.

노바의 단점

Nova에는 많은 장점이 있지만 몇 가지 단점도 있습니다. 첫째, Nova는 완화된 R1CS를 사용하기 때문에 기존 R1CS 시스템만큼 증거가 강력하지 않을 수 있습니다. 이는 완화된 R1CS를 사용하면 증명에 무작위성이 덜 사용되어 증명의 보안이 저하될 수 있기 때문입니다. 그러나 Nova 개발자는 이 문제를 해결하기 위해 더 강력한 암호화 알고리즘과 더 복잡한 증명 전략을 사용하는 등 몇 가지 조치를 취했습니다.

둘째, Nova의 구현은 상대적으로 복잡하여 사용 및 유지 관리가 더 어려워질 수 있습니다. Nova는 다항식 컴퓨팅, 그룹 연산, 무작위 오라클 등 다양한 고급 암호화 기술을 사용하며, Nova를 효과적으로 사용하고 수정하려면 이러한 기술에 대한 깊은 이해가 필요합니다.

영지식 증명 분야에서 Nova의 중요한 위치

Nova는 영지식 증명 분야에서 중요한 위치를 차지하고 있습니다. 그 등장으로 영지식 증명 발전의 새로운 길이 열렸습니다. Nova가 채택한 완화된 R1CS 기술은 증명 생성 및 검증 프로세스를 더욱 효율적으로 만들어주며, 이는 대규모 영지식 증명 애플리케이션에 매우 중요합니다. 또한 Nova는 증분 컴퓨팅 및 다항식 컴퓨팅도 지원하므로 보다 복잡한 증명 작업을 처리할 수 있어 영지식 증명의 적용 범위가 더욱 확장됩니다.

https://github.com/microsoft/Nova

Nova 소스 코드 해석

src/ 디렉터리 아래에는 몇 가지 중요한 하위 디렉터리가 있습니다:

bellperson/: 이 디렉토리에는 Bellman-Ford 알고리즘에 대한 코드가 포함될 수 있습니다.

Gadgets/: 이 디렉토리에는 zk-SNARK 증명을 구축하기 위한 일부 도구가 포함될 수 있습니다.

공급자/: 이 디렉토리에는 keccak.rs와 같은 일부 공급자 코드가 포함될 수 있으며 Keccak 해시 함수를 구현하는 코드일 수 있습니다.

traits/: 이 디렉토리에는 몇 가지 일반적인 동작을 정의하는 데 사용되는 Rust 특성이 포함될 수 있습니다.

보조 제목

src/bellperson/mod.rs 파일의 내용:

이 모듈은 주로 R1CS(zk-SNARK에 대한 제약 시스템인 Rank-1 제약 시스템)를 생성하는 데 사용됩니다.

여기에는 세 가지 하위 모듈이 포함되어 있습니다.

r1cs: 이 모듈에는 R1CS용 코드가 포함될 수 있습니다.

Shape_cs: 이 모듈에는 모양 제약 시스템에 대한 코드가 포함될 수 있습니다.

테스트 섹션에서는 제약 조건 시스템을 취한 다음 두 비트 입력이 실제로 비트인지 확인하기 위해 몇 가지 제약 조건을 추가하는 함수 Syntheticise_alloc_bit를 정의합니다. 그런 다음 먼저 모양을 생성하는 test_alloc_bit_with 함수를 정의합니다.

보조 제목

src/bellperson/r 1 cs.rs 파일의 내용:

이 파일은 주로 구현자로부터 `R 1 CSInstance`와 `R 1 CSWitness`, `R 1 CSShape`와 `CommitmentKey`를 얻는 방법을 각각 제공하는 `NovaWitness`와 `NovaShape`라는 두 가지 특성을 정의합니다.

- `NovaWitness` 특성에는 `R 1 CSShape`와 `CommitmentKey`를 취하고 `R 1 CSInstance`와 `R 1 CSWitness`를 반환하는 `r1cs_instance_and_witness` 메서드가 있습니다. 이 특성은 `SatisfyingAssignment` 구조체에 대해 구현됩니다. 이는 모든 `SatisfyingAssignment`가 이 메서드를 사용하여 `R 1 CSInstance` 및 `R 1 CSWitness`를 얻을 수 있음을 의미합니다.

- `NovaShape` 특성에는 `R 1 CSSShape` 및 `CommitmentKey`를 반환하는 `r 1 cs_shape` 메서드가 있습니다. 이 특성은 `ShapeCS` 구조체에 대해 구현됩니다. 즉, 모든 `ShapeCS`가 이 메서드를 사용하여 `R 1 CSSShape` 및 `CommitmentKey`를 얻을 수 있음을 의미합니다.

일반적으로 이 파일의 주요 목적은 특정 조건을 만족하는 시스템(예: 'SatisfyingAssignment' 또는 'ShapeCS')에서 R 1 CS의 인스턴스, 증인, 모양 및 커밋 비밀을 생성하는 방법을 제공하는 것입니다.

src/bellperson/shape_cs.rs

보조 제목

이 파일은 `ConstraintSystem` 특성을 구현하는 `ShapeCS`라는 구조체를 정의합니다. 'ShapeCS'는 R 1 CS 모양을 생성하기 위한 제약 시스템입니다.

'ShapeCS' 구조에는 다음 필드가 포함되어 있습니다.

- `named_objects`: 경로와 관련된 객체를 저장하는 맵입니다.

- `current_namespace`: 현재 네임스페이스를 저장하는 데 사용되는 문자열 벡터입니다.

- `constraints`: `ShapeCS`에 추가된 모든 제약조건을 저장하는 벡터입니다.

- `inputs`: 모든 입력을 저장하는 문자열 벡터입니다.

- `aux`: 모든 보조 입력을 저장하는 문자열 벡터입니다.

`ShapeCS` 구조는 `ConstraintSystem` 특성을 구현합니다. 즉, 다음 메서드를 제공합니다.

- `alloc`: 새로운 변수를 할당하는 데 사용되는 방법입니다.

- `alloc_input`: 새로운 입력 변수를 할당하는 데 사용되는 메소드입니다.

- `enforce`: 이 방법은 새로운 제약 조건을 추가하는 데 사용됩니다.

- `push_namespace`: 이 메소드는 새 네임스페이스를 푸시하는 데 사용됩니다.

- `pop_namespace`: 이 메소드는 현재 네임스페이스를 팝하는 데 사용됩니다.

- `get_root`: 이 메소드는 루트 제약 시스템을 가져오는 데 사용됩니다.

일반적으로 이 파일의 주요 역할은 특정 조건을 만족하는 시스템(예: `ShapeCS`)에서 R 1 CS의 모양을 생성하는 방법을 제공하는 것입니다.

src/bellperson/solver.rs

보조 제목

이 파일은 `ConstraintSystem` 특성을 구현하는 `SatisfyingAssignment`라는 구조체를 정의합니다. 'SatisfyingAssignment'는 R 1 CS 인스턴스 및 증인을 생성하기 위한 제약 시스템입니다.

- `a_aux_density`, `b_input_density`,'SatisfyingAssignment' 구조에는 다음 필드가 포함되어 있습니다.

- `a`, `b`,`b_aux_density`: 쿼리 밀도를 추적하는 데 사용되는 `DensityTracker` 유형의 필드입니다.

- `input_assignment`,`c`: A, B, C 다항식의 평가 결과를 저장하는 벡터입니다.

`aux_location`: 변수에 대한 할당을 저장하는 벡터입니다.

`SatisfyingAssignment` 구조체는 `ConstraintSystem` 특성을 구현합니다. 즉, 다음 메서드를 제공합니다.

- `new`: 이 메소드는 새로운 `SatisfyingAssignment` 인스턴스를 생성하는 데 사용됩니다.

- `alloc`: 새로운 보조 변수를 할당하는 데 사용되는 방법입니다.

- `alloc_input`: 새로운 입력 변수를 할당하는 데 사용되는 메소드입니다.

- `push_namespace`,- `enforce`: 이 방법은 새로운 제약 조건을 추가하는 데 사용됩니다.

`pop_namespace`: 이 메소드는 네임스페이스를 조작하는 데 사용되지만 실제로 이 컨텍스트에서는 작동하지 않습니다.

- `is_extensible`,- `get_root`: 이 메소드는 루트 제약 시스템을 가져오는 데 사용됩니다.

일반적으로 이 파일의 주요 목적은 특정 조건(예: 'SatisfyingAssignment')을 충족하는 시스템에서 R 1 CS 인스턴스 및 감시를 생성하는 방법을 제공하는 것입니다.

"src/circuit.rs"보조 제목

이는 Nova 프로토콜의 증강 회로를 정의합니다. 이 회로에는 Nova의 비대화형 폴딩 방식의 스텝 회로와 검증기 회로가 포함되어 있습니다.

파일에는 다음과 같은 주요 구조와 메서드가 정의되어 있습니다.

- `NovaAugmentedCircuitParams`: 이 구조에는 팔다리 너비, 팔다리 번호 및 이것이 주 회로인지 여부를 나타내는 부울 값을 포함하여 회로의 매개변수가 포함되어 있습니다.

- `NovaAugmentedCircuitInputs`: 이 구조에는 매개변수 i, z 0, zi, U, u 및 T를 포함한 회로의 입력이 포함됩니다.

- `NovaAugmentedCircuit`: 이 구조는 회로 매개변수, 읽기 전용 상수, 입력 및 단계 회로를 포함하는 Nova 증강 회로의 주요 정의입니다. 또한 `alloc_witness`(감시자 할당), `synthesize_base_case`(기본 사례 합성) 및 `synthesize_non_base_case`(기본 사례가 아닌 합성)와 같은 메서드를 정의합니다.

- `synthesize` 방식: Nova 강화 회로의 주요 합성 방식으로 먼저 모든 Witness를 할당한 후 기본 케이스인지 아닌지에 따라 회로를 합성하고 최종적으로 계산된 해시 값과 uX를 출력합니다.[1] .

일반적으로 본 문서의 주요 역할은 Nova 프로토콜에서 향상된 회로를 정의하는 것인데, 이 회로는 Nova 프로토콜의 핵심 부분으로, 스텝 회로와 검증 회로를 포함하며, 이 회로를 합성하는 방법을 제공합니다.

"src/constants.rs"보조 제목

, 프로젝트 전반에 걸쳐 널리 사용되는 일부 상수를 정의합니다. 이러한 상수의 의미는 다음과 같습니다.

- `NUM_CHALLENGE_BITS`: 이 상수는 챌린지의 비트 수를 정의하며 값은 128 입니다. 챌린지는 일반적으로 zk-SNARK 증명 프로세스의 대화형 단계에 대해 증명자가 생성한 난수입니다.

- `NUM_HASH_BITS`: 이 상수는 해시 비트 수를 정의하며 값은 250입니다. 해시 함수는 모든 길이의 입력 데이터를 고정 길이 출력으로 매핑할 수 있는 함수입니다. 여기서 출력 길이는 250비트입니다.

- `BN_LIMB_WIDTH`: 이 상수는 Big Number의 팔다리 너비를 정의하며 값은 64입니다. 컴퓨터 과학에서 큰 숫자는 표준 데이터 유형으로 표현할 수 있는 것 이상의 숫자이며 일반적으로 저장 및 조작을 위해 여러 사지로 분류됩니다.

- `BN_N_LIMBS`: 이 상수는 큰 숫자의 팔다리 수를 정의하며 값은 4입니다. 이는 각각의 큰 숫자가 저장 및 조작을 위해 4개의 팔다리로 분류된다는 것을 의미합니다.

- `NUM_FE_WITHOUT_IO_FOR_CRHF`: 이 상수는 충돌 방지 해시 함수(CRHF)에 대한 입력/출력을 제외한 필드 요소(FE)의 수를 정의하며 값은 17입니다.

이러한 상수는 Nova 프로토콜 구현에서 중요한 역할을 하며 챌린지의 자릿수, 해시의 자릿수, 큰 숫자의 사지 너비 및 사지 수 등과 같은 몇 가지 중요한 매개변수를 정의합니다. .

"src/errors.rs"보조 제목

, 이는 Nova 라이브러리가 반환할 수 있는 오류 유형을 정의합니다. 이러한 오류 유형은 `NovaError`라는 열거형에 캡슐화되어 있습니다. 이러한 오류 유형의 의미는 다음과 같습니다.

- `InvalidIndex`: 제공된 행이나 열이 (row, col, val) 튜플의 범위를 벗어나면 이 오류가 반환됩니다.

- `OddInputLength`: 제공된 입력 길이가 짝수가 아닌 경우 이 오류가 반환됩니다.

- `InvalidInputLength`: 잘못된 입력 길이가 제공되면 이 오류가 반환됩니다.

- `InvalidWitnessLength`: 잘못된 감시 길이가 제공되면 이 오류가 반환됩니다.

- `UnSat`: 제공된 감시가 주어진 형태와 인스턴스를 만족하지 않는 경우 이 오류가 반환됩니다.

- `DecompressionError`: 제공된 압축 약속을 압축 해제할 수 없는 경우 이 오류가 반환됩니다.

- `ProofVerifyError`: 증명 검증에 실패하면 이 오류가 반환됩니다.

- `InvalidNumSteps`: 제공된 단계 수가 0인 경우 이 오류가 반환됩니다.

- `InvalidIPA`: 잘못된 내부 곱 인수가 제공되면 이 오류가 반환됩니다.

- `InvalidSumcheckProof`: 잘못된 합계 확인 증명이 제공되면 이 오류가 반환됩니다.

- `InvalidInitialInputLength`: 증분 계산을 위한 초기 입력이 이전에 선언된 개수와 일치하지 않는 경우 이 오류가 반환됩니다.

- `InvalidStepOutputLength`: 단계 실행으로 생성된 출력 길이가 이전에 선언된 개수와 일치하지 않는 경우 이 오류가 반환됩니다.

- `InternalTranscriptError`: 전사 엔진이 라운드 수에 오버플로가 발생하면 이 오류가 반환됩니다.

- `InvalidMultisetProof`: 다중 집합 검사에 실패하면 이 오류가 반환됩니다.

- `InvalidProductProof`: 제품 증명 확인에 실패하면 이 오류가 반환됩니다.

이러한 오류 유형은 오타, 증명 오류, 내부 오류 등 Nova 라이브러리에서 발생할 수 있는 다양한 문제를 다룹니다. Nova 라이브러리의 함수에 문제가 발생하면 호출자가 무엇이 잘못되었는지 이해하고 그에 따라 조치를 취할 수 있도록 이러한 오류를 반환합니다.

"ecc.rs"보조 제목

, 이는 Rust 언어로 작성되었습니다. 이 파일에는 주로 Nova 프레임워크의 ECC(Elliptic Curve Cryptography)와 관련된 구현이 포함되어 있습니다.

ECC(타원 곡선 암호화)는 동일한 보안을 제공하면서 더 짧은 키를 사용할 수 있다는 것이 주요 장점인 공개 키 암호화 기술입니다. 이는 ECC가 더 작은 컴퓨팅 리소스와 전력을 사용할 수 있다는 것을 의미하며, 이는 많은 장치, 특히 모바일 장치 및 임베디드 시스템에 매우 중요합니다.

이 파일에서는 ECC 기능을 구현하는 데 사용되는 일부 Rust 구조(구조체)와 구현체(impls)의 정의를 볼 수 있습니다. 예를 들어, ECC의 기본 구현인 `struct EccGadget`을 볼 수 있습니다. 여기에는 ECC 상태와 관련 변수를 저장하는 데 사용되는 `value` 및 `pb_variable`과 같은 일부 필드가 포함되어 있습니다.

일반적으로 이 파일은 ECC 기능을 구현하는 Nova 프레임워크의 핵심 부분입니다.

"src/gadgets/mod.rs"보조 제목"gadgets"。

Nova 프레임워크의 모듈인 는 Nova에 필요한 다양한 기능과 Nova로 구축된 애플리케이션을 구현하는데 주로 사용됩니다."gadget"암호화에서는

특정 기능을 구현하는 코드 블록을 설명하는 데 사용되는 일반적인 용어입니다. zk-SNARK(Zero-Knowledge Succinct Non-Interactive Arguments)에서 가젯은 일반적으로 특정 알고리즘이나 프로토콜을 구현하는 증명 시스템을 나타냅니다.

이 파일에는 다음 하위 모듈이 표시됩니다.

- `ecc`: 이 모듈에는 타원 곡선 암호화용 가젯이 포함될 수 있습니다.

- `nonnative`: 이 모듈에는 기본이 아닌 필드에 대한 가젯이 포함될 수 있습니다.

- `r 1 cs`: 이 모듈에는 일부 R 1 CS(Rank-1 Constraint Systems) 가젯이 포함될 수 있습니다.

이러한 하위 모듈은 함께 Nova 프레임워크에 필요한 다양한 기능을 제공합니다.

"bignat.rs"보조 제목

는 Nova 프로젝트의 일부이며 주로 큰 정수(BigNat)에 대한 작업을 구현하는 데 사용됩니다.

컴퓨터 과학에서 큰 정수(또는 임의 정밀도 정수)는 int 또는 long과 같은 일반 정수 유형으로 표현할 수 있는 것 이상으로 표현하고 조작할 수 있는 정수입니다. 이는 암호화, 컴퓨터 그래픽, 대규모 컴퓨팅 등을 포함한 많은 분야에서 매우 유용합니다.

이 파일의 주요 부분 중 일부를 자세히 살펴보겠습니다.

1. `use super::super::gadgets::GadgetCaller;`: 이 코드 줄은 다른 가젯을 호출하는 데 사용되는 특성인 GadgetCaller를 가져옵니다.

2. `pub struct BigNatGadget;`: 이 코드 줄은 BigNatGadget이라는 구조를 정의합니다. Rust에서 구조체는 복잡한 데이터 유형을 만드는 데 사용됩니다.

3. `BigNatGadget용 GadgetCaller 구현`: 이는 GadgetCaller 특성을 구현하는 BigNatGadget 구조의 구현입니다. 이는 BigNatGadget이 GadgetCaller 특성에 필요한 모든 메소드의 구현을 제공해야 함을 의미합니다.

5. `pub fn from(&self, val: u 64) ->4. 이 구현에서는 큰 정수 연산의 기본 연산인 `add`, `sub`, `mul`, `div`, `rem` 등과 같은 몇 가지 메서드를 볼 수 있습니다.

6. `pub fn to_u 64(&self) ->Self`: 이 메소드는 u64 유형의 값에서 BigNatGadget을 생성하는 데 사용됩니다.

7. `pub fn eq(&self, other: &Self) ->u64`: 이 메서드는 BigNatGadget을 u64 유형의 값으로 변환하는 데 사용됩니다.

일반적으로 이 파일은 큰 정수 생성, 큰 정수를 다른 유형의 값으로 변환, 큰 정수에 대한 기본 작업 수행 등 큰 정수 작업을 위한 도구를 제공합니다.

"mod.rs"보조 제목"src/gadgets/nonnative/",위치되어 있습니다

내용 아래. 이 파일은 주로 로컬이 아닌 필드에 대한 산술 연산을 구현하는 데 사용됩니다.

암호화에서 기본이 아닌 필드는 일반적으로 하드웨어에서 직접 지원하지 않는 필드를 나타냅니다. 예를 들어, 일부 암호화 알고리즘은 64비트보다 큰 필드에 대한 작업이 필요할 수 있지만 대부분의 최신 컴퓨터 하드웨어는 최대 64비트까지의 작업만 직접 지원합니다. 이 경우 로컬이 아닌 필드를 사용한 산술 연산이 필요합니다.

이 파일에는 다음과 같은 주요 섹션이 표시됩니다.

1. `OptionExt` 특성: 이 특성은 `Option` 유형에 `grab` 및 `grab_mut`라는 두 가지 메소드를 추가합니다. 이 메소드는 `Option`에서 값을 가져오려고 시도하고 `Option`이 `None`인 경우 실수를 반환합니다. .

2. `BitAccess` 특성: 이 특성은 인덱스 `i`를 가져와 해당 인덱스 위치의 비트가 `1`인지 여부를 반환하는 `get_bit` 메서드를 제공합니다.

3. `impl BitAccess for Scalar`: 이것은 `Scalar` 유형에 대한 `BitAccess` 특성의 구현입니다. `Scalar`는 소수 필드를 나타내는 유형입니다.

일반적으로 이 파일은 특정 암호화 알고리즘을 구현하는 데 매우 중요한 비기본 필드에서 산술 연산을 수행하는 방법을 제공합니다.

"util.rs"보조 제목"src/gadgets/nonnative/",위치되어 있습니다

내용 아래. 이 파일은 주로 로컬이 아닌 필드에서 작동하는 일부 유틸리티 기능을 구현하는 데 사용됩니다.

이 파일의 주요 섹션은 다음과 같습니다.

1. '비트' 구조: 이 구조는 선형 조합과 값을 포함하는 비트를 나타내며, 이는 증인 시점에 채워집니다.

2. '비트벡터' 구조: 이 구조는 선형 조합 벡터, 값 벡터 및 할당된 비트 벡터를 포함하는 비트 벡터를 나타냅니다.

3. `Num` 구조: 이 구조는 선형 조합과 값을 포함한 숫자를 나타냅니다.

4. `Bit` 구조의 `alloc` 방법: 이 방법은 부울 값만 될 수 있는 제약 조건 시스템에서 변수를 할당합니다.

5. 'Num' 구조의 'fits_in_bits' 방법: 이 방법은 숫자가 주어진 비트 수로 표현될 수 있는지 여부를 확인합니다.

6. `Num` 구조의 `is_equal` 메서드: 이 메서드는 숫자가 비트 벡터로 표현되는 자연수와 동일한지 확인합니다.

7. 'Num' 구조의 'decompose' 방법: 이 방법은 숫자를 비트 벡터로 분해합니다.

8. `Num` 구조체의 `as_allocation_num` 메소드: 이 메소드는 숫자를 할당된 숫자로 변환합니다.

9. `f_to_nat` 함수: 이 함수는 필드 요소를 자연수로 변환합니다.

전반적으로 이 파일은 변수 할당, 숫자가 주어진 비트 수로 표현될 수 있는지 확인, 숫자를 비트 벡터로 분해 등과 같은 비로컬 필드에서 다양한 작업을 수행하는 유틸리티 기능을 제공합니다.

"r 1 cs.rs"보조 제목"src/gadgets/",위치되어 있습니다

내용 아래. 이 파일은 주로 Rank-1 Constraint Systems(R 1 CS)의 다양한 가젯을 구현하는 데 사용됩니다.

R 1 CS는 알고리즘이나 프로토콜을 설명하기 위한 증명 시스템이며 zk-SNARK를 포함한 많은 영지식 증명 시스템의 기초입니다.

이 파일의 주요 섹션은 다음과 같습니다.

1. `AllocationR 1 CSInstance` 구조: 이 구조는 포인트 `W`와 두 개의 숫자 `X 0` 및 `X 1`을 포함하는 할당된 R 1 CS 인스턴스를 나타냅니다.

2. `AllocationR1CSInstance::alloc` 메소드: 이 메소드는 제약 시스템에서 R 1 CS 인스턴스를 할당하는 데 사용됩니다.

3. `AllocationR1CSInstance::absorb_in_ro` 메소드: 이 메소드는 R 1 CS 인스턴스를 랜덤 오라클(RO)에 흡수하는 데 사용됩니다.

4. 'AllocationRelaxedR1CSInstance' 구조: 이 구조는 'W'와 'E' 두 점, 숫자 'u', 두 개의 큰 정수 'X 0'과 'X1'을 포함하는 할당된 완화된 R 1 CS 인스턴스를 나타냅니다.

5. `AllocationRelaxedR1CSInstance::alloc` 메서드: 이 메서드는 제약 조건 시스템에서 완화된 R 1 CS 인스턴스를 할당하는 데 사용됩니다.

6. `AllocationRelaxedR1CSInstance::default` 메서드: 이 메서드는 제약 조건 시스템에서 기본 완화된 R 1 CS 인스턴스를 할당하는 데 사용됩니다.

7. `AllocationRelaxedR1CSInstance::from_r 1 cs_instance` 메서드: 이 메서드는 R 1 CS 인스턴스를 완화된 R 1 CS 인스턴스로 변환하는 데 사용됩니다.

8. `AllocationRelaxedR1CSInstance::absorb_in_ro` 메서드: 이 메서드는 완화된 R 1 CS 인스턴스를 랜덤 오라클(RO)에 흡수하는 데 사용됩니다.

9. `AllocationRelaxedR 1 CSInstance::fold_with_r 1 cs` 메서드: 이 메서드는 완화된 R 1 CS 인스턴스를 R 1 CS 인스턴스와 접고 결과를 반환하는 데 사용됩니다.

전반적으로 이 문서는 R 1 CS 인스턴스 생성, R 1 CS 인스턴스를 완화된 R 1 CS 인스턴스로 변환, R 1 CS 인스턴스를 무작위 오라클로 흡수, 완화된 R 1 CS 인스턴스를 다음과 같이 접는 것을 포함하여 R 1 CS 작업을 위한 몇 가지 도구를 제공합니다. R 1 CS 인스턴스 1개 등

보조 제목"utils.rs"이 파일은"src/gadgets/",위치되어 있습니다

내용 아래. 이 파일은 주로 일부 낮은 수준의 유틸리티 기능을 구현하는 데 사용되며, 이는 더 높은 수준의 암호화 프로토콜 및 알고리즘을 구축할 때 매우 유용합니다.

이 파일의 주요 섹션은 다음과 같습니다.

1. `le_bits_to_num` 함수: 이 함수는 리틀 엔디안 비트 배열을 받아들이고 해당 값을 반환합니다.

2. `alloc_zero` 및 `alloc_one` 함수: 이 두 함수는 제약 조건 시스템에서 각각 0 값과 1 값을 가진 변수를 할당하는 데 사용됩니다.

3. `alloc_scalar_as_base` 함수: 이 함수는 제약 조건 시스템에서 스칼라를 베이스로 할당하는 데 사용됩니다.

4. `scalar_as_base` 함수: 이 함수는 스칼라를 베이스로 해석하는 데 사용됩니다.

5. `alloc_bignat_constant` 함수: 이 함수는 제약 시스템에서 큰 정수 상수를 할당하는 데 사용됩니다.

6. `alloc_num_equals` 함수: 이 함수는 두 숫자가 같은지 확인하고 비트를 반환하는 데 사용됩니다.

7. `conditionally_select` 함수: 이 함수는 조건에 따라 두 숫자 중 하나를 선택하는 데 사용됩니다.

8. `conditionally_select_vec` 함수: 이 함수는 조건에 따라 두 개의 숫자 배열 중 하나를 선택하는 데 사용됩니다.

9. `conditionally_select_bignat` 함수: 이 함수는 조건에 따라 두 개의 큰 정수 중 하나를 선택하는 데 사용됩니다.

10. `conditionally_select2` 기능: 조건에 따라 두 개의 숫자 중 하나를 선택하는 기능으로, 할당된 숫자가 됩니다.

11. 'select_zero_or_num 2' 및 'select_num_or_zero 2' 함수: 이 두 함수는 할당된 숫자인 조건에 따라 숫자를 0으로 설정하거나 변경하지 않고 그대로 두는 데 사용됩니다.

12. `select_num_or_zero` 함수: 이 함수는 숫자를 0으로 설정하거나 불리언 값인 조건에 따라 숫자를 변경하지 않고 유지하는 데 사용됩니다.

일반적으로 이 파일은 제약 조건 시스템에서 변수 할당, 두 숫자의 동일성 확인, 조건에 따라 두 숫자 중 하나 선택 등을 위한 유틸리티 기능을 제공합니다.

보조 제목"lib.rs"라는 이름의 프로그램입니다.

Nova 프로젝트의 주요 구성 요소인 의 Rust 언어 소스 코드 파일입니다. 이 파일은 주로 Nova 라이브러리의 공용 인터페이스와 일부 핵심 기능을 정의합니다. 문서에 대한 자세한 해석은 다음과 같습니다."ast"1. `pub mod ast`: 이 코드 줄은"ast"기준 치수."Abstract Syntax Tree"예"ast"(추상 구문 트리), 소스 코드의 구조를 표현하는 데 사용되는 데이터 구조입니다. 노바 프로젝트에서는

모듈에는 Nova 언어 소스 코드를 구문 분석하고 처리하기 위한 다양한 데이터 구조와 기능이 포함될 수 있습니다."parser"2. `pub mod 파서`: 이 코드 줄은"parser"기준 치수."예"파서

즉, 이 모듈에는 Nova 언어 소스 코드를 구문 분석하기 위한 함수와 클래스가 포함될 수 있습니다."codegen"3. `pub mod codegen`: 이 코드 줄은"codegen"기준 치수."code generation"예

(코드 생성), 이 모듈에는 Nova 언어의 추상 구문 트리를 개체 코드(예: LLVM IR 또는 기계어 코드)로 변환하기 위한 함수 및 클래스가 포함될 수 있습니다."types"4. `pub mod 유형`: 이 코드 줄은

기준 치수. 이 모듈에는 다양한 내장 유형 및 사용자 정의 유형의 표현 및 처리를 포함하여 Nova 언어의 유형 시스템이 포함될 수 있습니다."util"5. `pub mod util`: 이 코드 줄은"util"기준 치수."utilities"예

(유틸리티), 이 모듈에는 오류 처리, 로깅, 파일 읽기 및 쓰기 등과 같은 다양한 유틸리티 기능 및 클래스가 포함될 수 있습니다."driver"6. `pub mod 드라이버`: 이 코드 줄은"driver"기준 치수. 컴파일러 프로젝트에서는

일반적으로 소스 코드 읽기, 구문 분석, 유형 확인, 코드 생성, 최적화 및 출력과 같은 단계를 포함하여 전체 컴파일 프로세스를 제어하는 ​​모듈을 나타냅니다."error"7. `pub mod error`: 이 코드 줄은

기준 치수. 이 모듈에는 다양한 컴파일 오류 및 런타임 오류의 표시 및 처리를 포함하여 Nova 언어의 오류 처리 시스템이 포함될 수 있습니다."config"8. `pub mod config`: 이 코드 줄은

이 파일의 주요 기능은 Nova 언어의 다양한 구성 요소(예: 파서, 코드 생성기, 유형 시스템, 오류 처리 시스템 등)를 구성하여 완전한 컴파일러 라이브러리를 구성하는 것입니다.

보조 제목"nifs.rs"이 파일은"src/",위치되어 있습니다

내용 아래. 이 파일은 Non-Interactive Folding Scheme(Non-Interactive Folding Scheme, NIFS)을 구현합니다. 이는 증분 계산의 각 단계의 정확성을 증명하는 데 사용되는 암호화 프로토콜입니다.

이 파일의 주요 섹션은 다음과 같습니다.

1. 'NIFS' 구조: 이 구조는 증분 계산의 한 단계에 대한 증명을 저장하는 SNARK를 나타냅니다. 여기에는 압축된 커밋인 'comm_T'라는 필드가 포함되어 있습니다.

2. `증명` 방법: 이 방법은 느슨한 R 1 CS 인스턴스-감시 쌍 `(U 1, W 1)`과 R 1 CS 인스턴스-감시 쌍 `(U 2, W 2)`을 허용합니다. 동일한 구조 `shape` 및 동일한 `ck` 정의에 상대적입니다. 그런 다음 동일한 구조 '모양'을 갖는 접힌 느슨한 R 1 CS 인스턴스-감시 쌍 '(U, W)'를 출력합니다. 'W 1'이 'U 1'을 만족하고 'W 2'가 'U 2'를 만족하는 경우 접힌 증인 'W'는 접힌 인스턴스 'U'를 만족합니다.

3. '검증' 방법: 이 방법은 느슨한 R 1 CS 인스턴스 `U 1 ` 및 R 1 CS 인스턴스 `U 2 `를 허용하며, 이는 동일한 구조를 갖고 동일한 매개변수에 대해 정의됩니다. 그런 다음 동일한 구조를 가진 접힌 인스턴스 'U'를 출력합니다. 접힌 인스턴스 'U'는 'U 1'과 'U 2'가 만족되면 만족됩니다.

전반적으로 이 파일은 증분 계산의 각 단계의 정확성을 증명하기 위한 암호화 프로토콜인 비대화형 폴딩 방식을 구현합니다. 이 방식의 가장 큰 장점은 여러 증명을 단일 증명으로 축소할 수 있어 증명 저장 및 전송에 따른 오버헤드를 줄일 수 있다는 것입니다.

보조 제목"ipa_pc.rs"이 파일은"src/provider/",위치되어 있습니다

내용 아래. 이 파일은 IPA(Inner Product Argument) 기반의 다항식 커밋 방식을 사용하여 평가 엔진을 구현합니다.

이 파일의 주요 섹션은 다음과 같습니다.

1. `ProverKey` 구조: 이 구조는 확약 키 `ck_s`를 포함하는 증명 키를 나타냅니다.

2. `VerifierKey` 구조: 이 구조는 `ck_v`와 `ck_s` 두 개의 커밋 키를 포함하는 검증자 키를 나타냅니다.

3. `EvaluationArgument` 구조: 이 구조는 내부 곱 매개변수 `ipa`를 포함하는 다항식 평가 매개변수를 나타냅니다.

4. `EvaluationEngine` 구조: 이 구조는 IPA를 사용하는 다항식 평가 엔진을 나타냅니다.

5. 'EvaluationEngineTrait' 특성 구현: 이 특성의 구현은 설정, 증명 및 검증을 포함하여 다항식 평가 엔진의 주요 기능을 제공합니다.

6. `inner_product` 함수: 이 함수는 두 벡터의 내적을 계산합니다.7. `InnerProductInstance` 구조: 이 구조는 벡터 `a`에 대한 약속 `comm_a_vec`, 또 다른 벡터 `b_vec` 및 약속 `c =를 포함하는 내부 제품 인스턴스를 나타냅니다.

` `c`의 값.

8. `InnerProductWitness` 구조: 이 구조는 `a_vec` 벡터를 포함하는 내부 제품 감시를 나타냅니다.

일반적으로 본 문서에서는 영지식 증명의 특정 지점에서 다항식의 평가값을 증명하기 위한 암호화 프로토콜인 IPA 기반 다항식 확약 방식을 사용하는 평가 엔진을 구현합니다. 이 방식의 가장 큰 장점은 다항식 자체를 드러내지 않고도 다항식의 평가값을 증명할 수 있어 다항식의 프라이버시를 보호할 수 있다는 점입니다.

보조 제목"keccak.rs"이 파일은"src/provider/",위치되어 있습니다

내용 아래. 이 파일은 Keccak 256 해시 함수를 사용하는 TranscriptEngineTrait를 구현합니다. TranscriptEngineTrait는 영지식 증명 과정에서 녹취록을 처리하는 데 사용되는 특성입니다. Transcript는 증명 과정의 모든 대화형 단계를 기록하는 데이터 구조입니다.

이 파일의 주요 섹션은 다음과 같습니다.

1. 'Keccak 256 Transcript' 구조: 이 구조는 Keccak 256 해시 함수를 사용하여 녹취록을 처리하는 TranscriptEngineTrait를 구현합니다. 여기에는 현재 라운드 번호를 기록하는 라운드 필드, 현재 해시 상태를 저장하는 상태 필드, 기록을 저장하는 성적표 필드, 유형 정보를 저장하는 _p 필드가 포함되어 있습니다.

2. `compute_updated_state` 함수: 이 함수는 입력을 받아 업데이트된 해시 상태를 계산합니다.

3. 'TranscriptEngineTrait' 구현: 이 특성의 구현은 새 성적표 생성, 성적표에서 챌린지 추출, 성적표에 요소 추가 및 도메인 구분 기호 추가를 포함하여 성적표 처리를 위한 주요 기능을 제공합니다.

전반적으로 이 파일은 영지식 증명 중에 기록을 처리하기 위한 도구인 Keccak 256 해시 함수를 사용하는 TranscriptEngineTrait를 구현합니다. 이 도구의 가장 큰 장점은 증명 프로세스의 대화형 단계를 공개하지 않고 녹취록을 처리할 수 있어 증명 프로세스의 개인 정보를 보호할 수 있다는 것입니다.

보조 제목"mod.rs"이 파일은"src/provider/",위치되어 있습니다

내용 아래. 이 파일은 주로 Nova 프로젝트에 필요한 다양한 기능을 제공하는 Nova 프로젝트의 다양한 구현 모듈을 가져오는 데 사용됩니다.

이 파일의 주요 섹션은 다음과 같습니다."ipa_pc"1. `pub mod ipa_pc;`: 이 코드 줄은

기준 치수. 이 모듈은 IPA(Inner Product Argument) 기반의 다항식 커밋 방식을 사용하여 평가 엔진을 구현합니다."keccak"2. `pub mod keccak;`: 이 코드 줄은

기준 치수. 이 모듈은 Keccak 256 해시 함수를 사용하는 TranscriptEngineTrait를 구현합니다."pasta"3. `pub mod 파스타;`: 이 코드 줄은

기준 치수. 이 모듈에는 파스타 곡선과 함께 작동하는 함수와 클래스가 포함될 수 있습니다."pedersen"4. `pub mod pedersen;`: 이 코드 줄은

기준 치수. 이 모듈에는 Pedersen Promise를 사용하는 함수와 클래스가 포함될 수 있습니다."poseidon"5. `pub modposeidon;`: 이 코드 줄은

일반적으로 이 파일의 주요 역할은 Nova 프로젝트의 다양한 구성 요소(예: 평가 엔진, TranscriptEngineTrait, 파스타 곡선, Pedersen 커밋, 포세이돈 해시 함수 등)를 구성하여 완전한 암호화 라이브러리를 형성하는 것입니다.

보조 제목

파일 이름: `src/r 1 cs.rs`

이 파일은 Rank-1 Constraint System(R 1 CS)과 관련된 유형과 방법을 정의합니다. R 1 CS는 영지식 증명 시스템에서 널리 사용되는 제약 시스템입니다.

1. `R 1 CS다음 구조와 해당 방법이 주로 정의됩니다.

2. `R 1 CSShape`: 이 구조는 R 1 CS의 공개 매개변수를 나타냅니다. 여기에는 R 1 CS에 대한 공개 매개변수를 생성하는 데 사용되는 `commitment_key` 메소드가 포함되어 있습니다.

3. `R 1 CSWitness`: 이 구조는 제약 조건 수, 변수 수, 입력/출력 수 및 세 개의 행렬 A, B, C를 포함하여 R 1 CS 행렬의 모양을 나타냅니다. 여기에는 명시적으로 지정된 R 1 CS 행렬에서 `R 1 CSShape` 객체를 생성하기 위한 `new`, 행렬과 벡터의 곱을 계산하기 위한 `multiply_vec`, 확인을 위한 `is_sat_relaxed` 및 `is_sat`와 같은 메서드가 포함되어 있습니다. 주어진 증인과 그 형태가 완화된 R 1 CS 인스턴스와 R 1 CS 인스턴스를 만족하는지 여부, 'commit_T'는 주어진 완화된 R 1 CS 인스턴스-증인 쌍과 R ​​1 CS 인스턴스-증인 쌍의 교차 항을 계산하는 데 사용됩니다. `T`의 `pad`는 변수 수가 2의 거듭제곱이 되도록 R 1 CSSShape를 채우고 채워진 변수에 맞게 변수의 번호를 다시 매기는 데 사용됩니다.

4. `R 1 CSInstance`: 이 구조는 지정된 R 1 CS 인스턴스에 대한 감시를 나타내며, 스칼라 벡터를 사용하여 감시 개체를 생성하기 위한 'new' 및 제공된 생성기를 사용하여 감시에 커밋하기 위한 'commit'과 같은 메서드를 포함합니다.

5. `RelaxedR 1 CSWitness`: 이 구조는 R 1 CS의 인스턴스를 나타내며 구성 요소를 사용하여 인스턴스 객체를 생성하는 데 사용되는 `new`와 같은 일부 메소드를 포함합니다.

6. `RelaxedR 1 CSInstance`: 이 구조는 `default`가 기본 Relaxed R 1 CSInstance를 생성하는 데 사용되고, `from_r 1 cs_instance`가 R에서 새로운 Relaxed R 1 CSInstance를 초기화하는 데 사용되는 등 일부 메서드가 포함된 Relaxed R 1 CS 인스턴스를 나타냅니다. 1 CSInstance, 'from_r1cs_instance_unchecked'는 R 1 CSInstance에서 새 RelaxedR 1 CSInstance를 초기화하는 데 사용되며(확인 없음) 'fold'는 들어오는 RelaxedR 1 CSInstance를 접는 데 사용됩니다.

보조 제목

파일 이름: `src/spartan/math.rs`

이 파일은 'Math'라는 특성과 'usize' 유형의 구현을 정의합니다. 이 특성은 2의 거듭제곱 올리기, 이진 비트 가져오기, 로그 계산 등 여러 수학 연산을 정의합니다.

   - `pow 2(self) ->1. `Math` 특성은 다음 메서드를 정의합니다:

   - `get_bits(self, num_bits: usize) -> Vecusize`: self의 거듭제곱으로 2를 계산합니다.

   - `log_ 2(self) ->`: self의 이진 표현의 첫 번째 num_bits 비트를 가져옵니다.

usize`: self의 밑이 2인 로그를 계산합니다.

   - `pow 2(self) ->2. `usize` 유형의 경우 `Math` 특성의 모든 메소드가 구현됩니다.

   - `get_bits(self, num_bits: usize) -> Vecusize`: 내장된 `pow` 함수를 사용하여 2의 자기 거듭제곱을 계산합니다.

   - `log_ 2(self) ->`: 비트 이동 및 비트 AND 연산을 통해 자체의 이진 표현의 첫 번째 num_bits 비트를 가져옵니다.

이 파일은 더 복잡한 기능을 구현하기 위해 코드의 다른 부분에서 사용할 수 있는 몇 가지 기본적인 수학 연산을 제공합니다.

보조 제목

파일 이름: src/spartan/mod.rs

이 모듈은 일반적인 다항식 확약 및 평가 매개변수(예: PCS)인 Spartan의 RelaxedR1CSSNARKTrait를 구현합니다.

주요 구조와 기능은 다음과 같습니다.

1. `PolyEvalWitness`: 다항식의 증명을 포함하는 구조입니다.

2. `PolyEvalInstance`: 다항식 평가 인스턴스를 포함하는 구조입니다.

3. `ProverKey` 및 `VerifierKey`: 이 두 구조는 각각 증명자의 키와 검증자의 키를 나타냅니다.

4. `RelaxedR 1 CSSNARK`: 이 구조는 완화된 R 1 CS 인스턴스에 대한 지식에 대한 간결한 증거를 나타냅니다. 증명은 스파르탄의 합계 확인과 벡터 관점 다항식 약속의 조합을 사용하여 생성됩니다.

5. `setup`: 이 함수는 증명 및 확인 키를 설정하는 데 사용됩니다.

6. '증명': 이 함수는 완화된 R 1 CS 인스턴스의 만족 가능성에 대한 간결한 증거를 생성하는 데 사용됩니다.

이 모듈의 코드는 주로 암호화의 영지식 증명, 특히 R 1 CS(Rank-1 Constraint Systems) 증명과 관련됩니다. R 1 CS는 영지식 증명을 구축하기 위한 시스템으로, 해에 대한 정보를 공개하지 않고도 일련의 다항식 방정식에 대한 해를 알고 있음을 증명하는 데 사용할 수 있습니다. Spartan은 완화된 R 1 CS라는 것을 사용하는 특정 영지식 증명 시스템으로, 증명에 무작위성을 사용하여 효율성을 향상시킵니다.

보조 제목

파일 이름: src/spartan/polynomial.rs

이 파일은 다항식과 관련된 몇 가지 기본 유형 및 연산을 정의합니다. 이러한 유형과 연산은 스파르탄 프로토콜에서 다항식 계산을 구현하는 데 사용됩니다.

이 파일의 주요 섹션은 다음과 같습니다.

1. `EqPolynomial`: 이 구조는 등식 다항식을 나타냅니다. 여기에는 새 다항식을 생성하기 위한 'new' 메소드, 지정된 지점에서 다항식을 평가하기 위한 'evaluate' 메소드, 모든 부울 입력에 대한 다항식 평가를 계산하기 위한 'evals' 메소드가 포함되어 있습니다.

2. `MultilinearPolynomial`: 이 구조는 다중선형 다항식을 나타냅니다. 새로운 다항식을 생성하는 `new` 메소드, 다항식의 변수 개수를 가져오는 `get_num_vars` 메소드, 다항식의 변수를 맨 위에 바인딩하는 `bound_poly_var_top` 메소드, `evaluate` 메소드가 포함되어 있습니다. 지정된 점에서 다항식을 평가하는 데 사용됩니다.

이 파일의 코드는 주로 암호화의 다항식 계산, 특히 다선형 다항식 및 희소 다항식 계산과 관련됩니다. 이러한 계산은 증명에 대한 정보를 공개하지 않고 복잡한 증명을 구성하는 데 사용될 수 있기 때문에 영지식 증명 시스템에서 중요한 역할을 합니다.

보조 제목

`src/spartan/pp.rs`는 Nova 프로젝트의 Rust 언어 파일입니다. 이 파일은 주로 Nova의 전처리기 기능을 구현합니다. 전처리기는 코드가 실제로 컴파일되기 전에 코드에 대해 일부 처리를 수행하는 컴파일 프로세스의 한 단계입니다.

이 파일의 주요 구조와 기능은 다음과 같습니다.

1. `struct Preprocessor`: 전처리기에 필요한 일부 상태와 데이터를 포함하는 전처리기 구조입니다.

3. `fn new(source: String) ->2. `impl Preprocessor`: 이것은 몇 가지 메소드를 포함하는 `Preprocessor` 구조의 구현입니다.

4. `fn preprocess(&mut self) -> Result<(), Error>Self`: 새로운 `Preprocessor` 인스턴스를 생성하는 데 사용되는 `Preprocessor` 생성자입니다.

5. `fn next_token(&mut self) -> Result`: 입력된 소스 코드를 전처리하고 처리 결과를 반환하는 전처리기의 주요 기능이다. 처리 중에 오류가 발생하면 오류를 반환합니다.

`: 이 함수는 소스 코드에서 다음 토큰을 가져오는 데 사용됩니다. 처리 중에 오류가 발생하면 오류를 반환합니다.

7. `fn skip_comment(&mut self) -> Result<(), Error>6. `fn Skip_whitespace(&mut self)`: 소스 코드에서 공백 문자를 건너뛰는 데 사용되는 함수입니다.

8. `fn read_number(&mut self) -> Result`: 이 함수는 소스 코드에서 주석을 건너뛰는 데 사용됩니다. 처리 중에 오류가 발생하면 오류를 반환합니다.

9. `fn read_identifier(&mut self) -> Result`: 이 함수는 소스 코드에서 숫자를 읽는 데 사용됩니다. 처리 중에 오류가 발생하면 오류를 반환합니다.

10. `fn read_string(&mut self) -> Result`: 이 함수는 소스 코드에서 식별자를 읽는 데 사용됩니다. 처리 중에 오류가 발생하면 오류를 반환합니다.

일반적으로 `src/spartan/pp.rs` 파일은 공백 문자 및 주석 건너뛰기, 숫자 읽기, 식별자 및 문자열 읽기 등을 포함하여 소스 코드를 전처리하는 Nova의 전처리기를 구현합니다.

보조 제목

파일 이름: src/spartan/sumcheck.rs

이 파일은 Spartan 프로토콜의 Sumcheck 알고리즘을 구현합니다. 섬체크(Sumcheck) 알고리즘은 영지식 증명 시스템에서 널리 사용되는 다항식의 합을 검증하는 알고리즘이다.

이 파일의 주요 섹션은 다음과 같습니다.

1. `SumcheckProof`: 이 구조는 Sumcheck 증명을 나타냅니다. 여기에는 새로운 증명을 생성하기 위한 'new' 메소드, 증명을 검증하기 위한 'verify' 메소드 및 증명 생성을 위한 여러 'prove' 메소드가 포함되어 있습니다.

2. `UniPoly` 및 `CompressedUniPoly`: 이 두 구조는 단항 다항식과 압축된 단항 다항식을 나타냅니다. 여기에는 다항식 생성, 다항식 평가, 지정된 지점에서 다항식 평가, 다항식 압축 및 압축 해제를 위한 메서드가 포함되어 있습니다.

이 파일의 코드는 주로 암호화의 Sumcheck 알고리즘, 특히 다항식의 계산 및 증명과 관련됩니다. 이러한 계산은 증명에 대한 정보를 공개하지 않고 복잡한 증명을 구성하는 데 사용될 수 있기 때문에 영지식 증명 시스템에서 중요한 역할을 합니다.

보조 제목

파일 이름: src/traits/circuit.rs

이 파일은 `StepCircuit`이라는 특성과 이 특성을 구현하는 `TrivialTestCircuit` 구조체를 정의합니다. 이 특성과 구조는 모두 증분 계산을 위한 계단 함수와 관련이 있습니다.

이 파일의 주요 섹션은 다음과 같습니다.

1. 'StepCircuit' 특성: 이 특성은 증분 계산을 위한 단계 함수가 구현해야 하는 방법을 정의합니다. 이러한 방법에는 다음이 포함됩니다.

- `arity`: 각 단계의 입력 또는 출력 수를 반환합니다.

- `synthesize`: 계산 단계를 합성하고 단계의 출력에 해당하는 변수를 반환합니다.

- `output`: 단계에 대한 입력이 제공되면 단계의 출력을 반환합니다.

이 파일의 코드는 주로 증분 계산의 단계 함수와 관련이 있습니다. 암호화에서 증분 계산은 전체 함수를 한 번에 계산할 필요 없이 복잡한 함수를 점진적으로 계산하는 데 사용할 수 있는 일반적인 기술입니다. 이 기술은 전체 증명을 한 번에 생성하지 않고도 복잡한 증명을 구성하는 데 사용할 수 있기 때문에 영지식 증명 시스템에 특히 유용합니다.

보조 제목

파일 이름: src/traits/commitment.rs

이 파일은 약속과 관련된 몇 가지 특성을 정의합니다. 암호화에서 약속은 즉시 공개하지 않고도 가치를 약속할 수 있게 해주는 메커니즘입니다. 이는 영지식 증명과 같은 많은 암호화 프로토콜에 필요합니다.

이 파일의 주요 섹션은 다음과 같습니다.

1. 'CommitmentOps' 특성: 이 특성은 추가 및 추가 할당을 포함하여 커밋에 대한 기본 작업을 정의합니다.

2. `CommitmentOpsOwned` 특성: 이 특성은 커밋을 소유한 참조에 대한 기본 작업을 정의합니다.

3. `ScalarMul` 특성: 이 특성은 약속과 스칼라의 곱셈 연산을 정의합니다.

4. `CommitmentTrait` 특성: 이 특성은 복제, 복사, 기본값, 비교, 보내기, 동기화, 직렬화, 역직렬화, 흡수, 조작, 압축, 압축 풀기 등을 포함한 커밋 동작을 정의합니다.

이 파일의 코드는 주로 암호화의 약속을 다룹니다. 이러한 약속은 증명에 대한 정보를 공개하지 않고 복잡한 증명을 구성하는 데 사용될 수 있기 때문에 영지식 증명 시스템에서 중요한 역할을 합니다.

보조 제목

파일 이름: src/traits/evaluation.rs

이 파일은 `EvaluationEngineTrait`라는 특성을 정의합니다. 이 특성은 설정, 증명 및 검증을 포함한 다항식 평가 엔진의 동작을 정의합니다.

이 파일의 주요 섹션은 다음과 같습니다.

1. `EvaluationEngineTrait` 특성: 이 특성은 다항식 평가 엔진이 구현해야 하는 방법을 정의합니다. 이러한 방법에는 다음이 포함됩니다.

- `setup`: 이 방법은 평가 증명을 생성하는 데 필요한 추가 설정에 사용됩니다.

- `증명`: 이 방법은 다선형 다항식의 평가를 증명하는 데 사용됩니다.

- `verify`: 이 방법은 다선형 다항식의 평가 증명을 검증하는 데 사용됩니다.

이 특성은 또한 다음을 포함하여 여러 관련 유형을 정의합니다.

- `CE`: Promise 엔진과 관련된 유형입니다.

- `ProverKey`: 증명 키의 유형입니다.

- `VerifierKey`: 검증자 키의 유형입니다.

이 파일의 코드는 주로 암호화의 다항식 평가와 관련이 있습니다. 이는 해에 대한 정보를 공개하지 않고도 다항 방정식 세트에 대한 해를 알고 있음을 증명하는 데 사용될 수 있기 때문에 영지식 증명 시스템에서 중요한 단계입니다.

보조 제목

파일 이름: src/traits/mod.rs

이 파일은 Nova 프로젝트의 특성 모듈에 대한 기본 진입점입니다. 이는 주로 암호화 작업에 대한 몇 가지 특성을 정의합니다. 특성은 다양한 구체적인 유형으로 구현될 수 있는 추상 유형을 정의하는 Rust의 핵심 기능입니다. 이를 통해 특정 특성을 구현하는 모든 유형의 값을 처리할 수 있는 일반 코드를 작성할 수 있습니다.

이 파일의 주요 섹션은 다음과 같습니다.

1. `그룹` 특성: 이 특성은 복제, 복사, 기본값 설정, 비교, 전송, 동기화, 직렬화, 역직렬화, 흡수, 조작, 압축, 압축 풀기 등을 포함한 그룹의 기본 작업을 정의합니다.

2. `CompressedGroup` 특성: 이 특성은 복제, 복사, 비교, 전송, 동기화, 직렬화, 역직렬화 등을 포함하여 압축 그룹의 기본 작업을 정의합니다.

3. 'AbsorbInROTrait' 특성: 이 특성은 Random Oracle에 개체를 흡수하기 위한 'absorb_in_ro' 메서드를 정의합니다.

4. 'ROTrait' 특성: 이 특성은 초기화, 흡수 및 압출을 포함하여 무작위 오라클의 동작을 정의합니다.

5. `ROConstantsTrait` 특성: 이 특성은 무작위 오라클의 상수를 정의합니다.

6. `GroupOps` 특성: 이 특성은 덧셈, 뺄셈, 덧셈 할당, 뺄셈 할당을 포함한 그룹 작업을 정의합니다.

7. `ScalarMul` 특성: 이 특성은 스칼라 곱셈 연산을 정의합니다.

8. `TranscriptReprTrait` 특성: 이 특성은 객체를 바이트 시퀀스로 변환하기 위한 `to_transcript_bytes` 메서드를 정의합니다.

이 파일의 코드는 주로 암호화, 무작위 오라클 및 전사 엔진의 그룹 작업과 관련됩니다. 이는 증명에 대한 정보를 공개하지 않고도 복잡한 증명을 구성하는 데 사용될 수 있기 때문에 영지식 증명 시스템에서 중요한 역할을 합니다.

보조 제목

파일 이름: src/traits/snark.rs

이 파일은 `RelaxedR1CSSNARKTrait`라는 특성을 정의합니다. 이 속성은 특히 완화된 순위-1 제약 시스템(Relaxed R 1 CS)에 대해 영지식 간결 비대화형 인수(zkSNARK)의 동작을 정의합니다.

이 파일의 주요 섹션은 다음과 같습니다.

1. `RelaxedR1CSSNARKTrait` 특성: 이 특성은 zkSNARK가 구현해야 하는 메서드를 정의합니다. 이러한 방법에는 다음이 포함됩니다.

- `setup`: 증명자와 검증자의 키를 생성하는 데 사용되는 방법입니다.

- `증명`: 이 방법은 완화된 R 1 CS 인스턴스의 만족 가능성에 대한 간결한 증거를 생성하는 데 사용됩니다.

- `verify`: 이 방법은 완화된 R 1 CS 인스턴스의 만족 증명을 확인하는 데 사용됩니다.

이 특성은 또한 다음을 포함하여 여러 관련 유형을 정의합니다.

- `ProverKey`: 증명 키의 유형입니다.

이 파일의 코드는 주로 암호화의 영지식 증명, 특히 R 1 CS 증명과 관련이 있습니다. R 1 CS는 영지식 증명을 구축하기 위한 시스템으로, 해에 대한 정보를 공개하지 않고도 일련의 다항식 방정식에 대한 해를 알고 있음을 증명하는 데 사용할 수 있습니다. zkSNARK는 증명을 생성하고 검증하는 효율적인 방법을 제공하는 특정 영지식 증명 시스템입니다.

첫 번째 수준 제목

후오비 벤처스 소개:

Huobi Ventures
신탁
기술
Odaily 공식 커뮤니티에 가입하세요