계산 복잡성을 줄이는 것은 항상 블록체인 기술의 주요 목표 중 하나였습니다. 이를 달성하기 위한 효과적인 방법 중 하나는 계산 필드의 비트 폭을 줄이는 것입니다. 예를 들어, 타원 곡선을 기반으로 하는 SNARK는 256 이상의 비트 폭을 가진 필드에서 산술 연산을 수행하는 반면, STARK는 64비트 골디락스 필드에서 31비트 메르센31 및 베이비베어 필드로 발전했습니다. 모듈러 연산 중 소수의 효율성을 넘어, 비트 폭이 상당히 감소하여 Plonky2는 이전 버전인 Plonky보다 수백 배 더 빨라졌습니다. 이 궤적을 따라가다 보면 필드 폭을 1, 특히 ${\mathbb{F}}_{2}$로 설정할 수 있을까요? Ulvetanna(IRREDUCIBLE) 팀은 이 질문을 Succinct Arguments over Towers of Binary Fields라는 제목의 연구 논문에서 다루었습니다.
Binius는 출시 이후 ZK(Zero-Knowledge) 커뮤니티에서 상당한 주목을 받았습니다. LambdaClass 팀은 여러 가지 기술 분석[4][5][6]을 제공했으며 Vitalik Buterin은 더 접근하기 쉬운 설명을 제공했습니다.
Binius의 구현은 Binary Fields에 기반합니다. Binius에서 Binary Fields는 필드 확장 타워를 사용하여 구성됩니다.
가장 간단한 이진체는 ${{\mathbb{F}}{2}}$
로, 여기에는 두 개의 원소 ${0,1}$
만 포함되고, 모듈로 2로 수행되는 연산이 있습니다.덧셈은 비트 단위 XOR에 해당하고 곱셈은 비트 단위 AND에 해당합니다.기약 다항식 $m(x) = x^{2} + x + 1$ over ${{\mathbb{F}}{2}}$
선택하면, 원소가 최대 1차 다항식의 나머지인 필드 ${{\mathbb{F}}_{{2^{2}}}}$
형성할 수 있습니다.여기서 원소는 최대 1차 다항식의 나머지입니다. $r(x) = ax + b$ (with $a, b \in {0, 1}$
).
필드를 확장하는 한 가지 방법은 기약 다항식을 사용하여 나머지를 취하는 것인 반면, Binius는 더 효율적인 접근 방식을 사용합니다. 타워 확장을 위한 기초로 다중선형 라그랑주 다항식을 사용합니다. 이 방법은 각 확장 필드가 이전 확장 필드 내에 중첩되는 재귀적 필드 확장을 허용합니다.
타워 확장의 구체적인 구현은 다음과 같습니다. 먼저, ${{\tau }{0}} = {{\mathbb{F}}{2}}$
; 그런 다음, ${{\tau }{1}} = \frac{{{\mathbb{F}}{2}}[{{x}{0}}]}{(x{0}^{2} + {{x}_{0}} + 1)}$
; 다음으로, ${{\tau }{k}} = \frac{{{\mathbb{F}}{2}}[{{x}{k-1}}]}{(x{k-1}^{2} + {{x}{k-1}}{{x}{k-2}} + 1)}$.
필드 확장의 구성 과정으로부터 확장이 다음 관계를 만족한다는 것이 분명합니다. ${{\tau }{0}} \subset {{\tau }{1}} \subset {{\tau }{2}} \subset \cdots \subset {{\tau }{m}}$
. $k \ge 0$
의 경우, 필드 확장은 다음과 같이 링의 직접 형식으로도 표현될 수 있습니다. ${{\tau }{k}}={{{\mathbb{F}}{2}}[{{x}{0,}}\ldots ,{{x}{k-1}}]}/{\left( x_{0}^{2}+{{x}{0}}+1,\ldots ,x{k-1}^{2}+{{x}{k-2}}{{x}{k-1}}+1 \right)}$.
이 구현을 기반으로 다음과 같이 다양한 확장을 얻을 수 있습니다.
${{\tau }_{0}}=\left{ 0,1 \right}$
${{\tau }{1}}=\left{ 0+0{{x}{0}},1+0{{x}{0}},0+1{{x}{0}},1+1{{x}{0}} \right}$, or ${{\tau }{1}}=\left{ {{\tau }{0}},0+1{{x}{0}},1+1{{x}_{0}} \right}$
$${{\tau }{2}}=\left{ \begin{align} & 0+0{{x}{0}}+0{{x}{1}}+0{{x}{0}}{{x}{1}},1+0{{x}{0}}+0{{x}{1}}+0{{x}{0}}{{x}{1}},0+1{{x}{0}}+0{{x}{1}}+0{{x}{0}}{{x}{1}}, \ & 1+1{{x}{0}}+0{{x}{1}}+0{{x}{0}}{{x}{1}},\ldots ,1+1{{x}{0}}+1{{x}{1}}+1{{x}{0}}x \ \end{align} \right}$$, Or ${{\tau }{2}}=\left{ {{\tau }{1}},0+0{{x}{0}}+1{{x}{1}}+0{{x}{0}}{{x}{1}},\ldots ,1+1{{x}{0}}+1{{x}{1}}+1{{x}{0}}{{x}{1}} \right}$
확장된 필드에 포함된 원소에서 ${{b}{0}}{{b}{1}}{{b}{2}}\ldots {{b}{{{2}^{k}}-1}}$
${{\tau }{k}}$
에서 유도된 경우 두 부분의 합으로 분해될 수 있음이 분명합니다. ${{b}{lo}} + {{x}{k-1}}{{b}{hi}}$ (where ${{b}{lo}}, {{b}{hi}} \in {{\tau }{k-1}}$)
. 예를 들어, $1100101010001111 = 11001010 + 1000111 \times {{x}{3}}$, where $11001010, 10001111 \in {{\tau }{2}}$
.
반복적으로 분해하면 마침내 다음과 같이 표현할 수 있습니다. $$1100101010001111=1+{{x}{0}}+{{x}{2}}+{{x}{2}}{{x}{1}}+{{x}{3}}+{{x}{2}}{{x}{3}}+{{x}{0}}{{x}{2}}{{x}{3}}+{{x}{1}}{{x}{2}}{{x}{3}}+{{x}{0}}{{x}{1}}{{x}{2}}{{x}{3}}$$
또한, $k > 0$
의 경우 $x_{k}^{2} = {{x}{k}}{{x}{k-1}} + 1$
이므로 이진 확장체에서 덧셈과 곱셈을 효율적으로 구현할 수 있습니다.
Irreducible은 Binius의 오픈 소스 Rust 구현을 제공합니다[3]. 소스 코드에는 Tower of Binary Fields[8,9,10]에 대한 완전한 구현 및 작업이 포함되어 있습니다.
[8]에서 그림 1에 표시된 것처럼 구현에는 이진 필드에 대한 연산의 완전한 정의와 이진 필드 타워의 구성이 포함됩니다. 최대 128비트 이진 필드를 지원하는 이진 필드 타워는 다음과 같이 정의됩니다.
또한 [8]은 Tower of Binary Fields 및 관련 작업에 대한 테스트 및 검증 코드를 제공합니다.
[1]
[2]
[3]
[4] 이진 필드에 대한 SNARK: Binius - 1부(lambdaclass.com)
[5] 이진 필드에 대한 SNARK: Binius - 2부(lambdaclass.com)
[6] Binius가 ZK 산업을 발전시키는 데 어떻게 도움을 주고 있는가 (lambdaclass.com)
[7]
[8] binius/crates/field/src/binary_field.rs at main · IrreducibleOSS/binius · GitHub
[9] binius/crates/field/src/binary_field_arithmetic.rs at main · IrreducibleOSS/binius · GitHub
[10] binius/crates/field/src/extension.rs at main · IrreducibleOSS/binius · GitHub