nonnative
시 라이브러리는 증명 시스템의 비원시 필드에 대한 계산을 확인하기 위한 R1CS 제약 조건을 제공합니다.
라이브러리는 제약 조건 작성 프레임워크인 arkworks-rs를 기반으로 하며 MIT 라이선스 및 Apache v2 라이선스(라이센스 참조)에 따라 릴리스됩니다.
경고: 이것은 학문적 개념 증명 프로토타입입니다. 특히 신중한 코드 검토를 받지 못했습니다. 이 구현은 프로덕션 용도로 사용할 준비가 되지 않았습니다.
이 라이브러리는 p != q
인 다른 소수 필드 Fq
위에 소수 필드 Fp
에 대한 필드 가젯을 구현합니다.
많은 암호화 증명에 대한 제약 조건 시스템을 작성할 때 기본 필드(예: 페어링 친화적 곡선의 스칼라 필드)로 제한됩니다. 이는 불편할 수 있습니다. 예를 들어, 곡선 주기를 통한 재귀적 증명 구성에는 검증자가 비원시 필드에 대해 계산해야 합니다.
라이브러리를 사용하면 기본 필드에 계산을 작성하는 것과 동일한 방식으로 비기본 필드에 계산을 작성할 수 있습니다. 이로 인해 자연스럽게 추가 오버헤드가 발생하고 다양한 최적화를 사용하여 이를 최소화합니다.
비네이티브 필드는 arkworks에서 FieldVar
특성을 구현하기 때문에 이를 네이티브 필드 변수( FpVar
)처럼 처리할 수 있습니다.
+
, -
및 *
와 같은 표준 필드 작업을 수행할 수 있습니다. 다음 예를 참조하세요.
let a = NonNativeFieldVar :: < Fr , Fq > :: new_witness ( ns ! ( cs, "a" ) , || Ok ( a_value ) ) ? ;
let b = NonNativeFieldVar :: < Fr , Fq > :: new_witness ( ns ! ( cs, "b" ) , || Ok ( b_value ) ) ? ;
// add
let a_plus_b = & a + & b ;
// sub
let a_minus_b = & a - & b ;
// multiply
let a_times_b = & a * $b ;
// enforce equality
a . enforce_equal ( & b ) ? ;
각 곱셈 후에 라이브러리는 내부적으로 중간 유형 NonNativeFieldMulResultVar
정규화된 유형 NonNativeFieldVar
로 줄이는 축소 작업을 수행합니다. 이를 통해 사용자는 기본 세부 사항에 대해 걱정하지 않고 일련의 작업을 원활하게 수행할 수 있습니다.
그러나 이 작업은 비용이 많이 들고 때로는 피할 수 있습니다. 추가만 지원하는 이 중간 유형을 사용하면 제약 조건의 수를 줄일 수 있습니다. 곱하려면 NonNativeFieldVar
로 다시 줄여야 합니다. 뼈대 예시는 아래를 참조하세요.
a * b + c * d
계산하기 위한 간단한(그러나 비용이 더 많이 드는) 구현은 다음과 같습니다.
let a_times_b = &a * &b;
let c_times_d = &c * &d;
let res = &a_times_b + &c_times_d;
이는 각 곱셈에 대해 하나씩 총 두 번의 축소 작업을 수행합니다.
다음과 같이 NonNativeFieldMulResultGadget
을 사용하여 한 번의 감소를 저장할 수 있습니다.
let a_times_b = a.mul_without_reduce(&b)?;
let c_times_d = c.mul_without_reduce(&d)?;
let res = (&a_times_b + &c_times_d)?.reduce()?;
축소 작업은 한 번만 수행하며 첫 번째 구현보다 대략 2배 빠릅니다.
라이브러리는 대상 필드의 요소를 표현하기 위해 여러 가지 팔다리를 사용하는 표준 아이디어를 사용합니다. 예를 들어 TargetField의 요소는 세 개의 BaseField 요소(예: 팔다리)로 표현될 수 있습니다.
TargetField -> limb 1, limb 2, and limb 3 (each is a BaseField element)
일부 계산 후에는 팔다리가 압도되어 더 많은 계산을 수행하기 위해 사지를 줄여야 합니다.
우리는 [KPS18]과 [OWWB20]에서 최적화 기술을 많이 사용합니다. 두 작품 모두 xJsnark와 bellman-bignat라는 자체 오픈 소스 라이브러리를 가지고 있습니다. 이에 비해 이 라이브러리는 arkworks 환경에서 작동하며 제약 조건 수 대신 밀도에 최적화되어 있어 Marlin과 같은 홀로그램 영지식 증명에 유용합니다.
라이브러리는 귀하의 재량에 따라 다음 라이센스 중 하나에 따라 라이센스가 부여됩니다.
귀하가 명시적으로 달리 명시하지 않는 한, 귀하가 이 라이브러리에 포함하기 위해 제출한 모든 기여는 추가 이용약관 없이 위와 같이(Apache v2 라이센스에 정의된 대로) 이중 라이센스를 부여받게 됩니다.
[KPS18]: AE Kosba, C. Papamanthou 및 E. Shi. "xJsnark: 효율적인 검증 가능한 계산을 위한 프레임워크", Proceedings of the 39th Symposium on Security and Privacy , ser. S&P '18, 2018, 페이지 944–961.
[OWWB20]: A. Ozdemir, RS Wahby, B. Whitehat 및 D. Boneh. "효율적인 집합 누산기를 사용하여 검증 가능한 계산 확장", 제29회 USENIX 보안 심포지엄 회보 , ser. 보안 '20, 2020.