深入理解零知識證明演算法之Zk-stark——FRI協議

買賣虛擬貨幣
前言終於到了“理解零知識證明演算法值Zk-stark”系列的收尾。在前面的三篇文章裡,我們依次介紹了zk-stark演算法的整體結構(技術指南 | 理解零知識證明演算法之Zk-stark)、演算法的第一部分:Arithmetization(技術指南 |理解零知識證明演算法之Zk-stark——Arithmetization)、演算法的第二部分:Low Degree Testing(深入理解零知識證明演算法之Zk-stark:Low Degree Testing)。相信透過這幾篇的閱讀,大家能對zk-stark演算法輪廓有了個整體的認知;在閱讀的過程中,你可能會對文章中的某些語句或者圖片的正確性發出疑問(確實有些內容需要更具體的介紹和說明,否則會產生誤解),歡迎163郵箱留言交流(oceanjune512)。回顧第三篇的文章,我們已經講到,為了確保證明者返回的滿足多項式等式相等的值確實是基於有效的多項式計算得到,我們需要對多項式進行LDT測試;同時為了使驗證者的複雜度達到最優,我們把原始多項式進行變換,變換後,證明者要證明的多項式僅僅是原始多項式的一半,不斷重複這一過程,一直到多項式的度可以直接判斷為止。這其實就是FRI協議的核心思想,下面,讓我們來詳細介紹FRI協議的過程。FRI協議也許,我們應該先說一下FRI協議是什麼?FRI,即Fast RS IOPP,全稱Fast Reed-Solomen Interactive Oracle Proofs of Proximity,是一種更有效的proximiary 測試方法,測試一個點的集合大部分是在一個度小於某個值的多項式上,能達到線性級的證明覆雜度和對數級的驗證複雜度。
在我們正式介紹FRI協議之前,我們先看一個簡單的場景。· 在有限域F上,存在一個乘法群L0,群的階為2^n;· 這時,證明者聲稱碼字f0:L0-->F是滿足RS[F,L0,ρ]編碼引數的一個碼字,即f0的大部分點在一個度d<ρ*2^n的多項式上P(x)上,這裡ρ=2^(-R);因此,當f0=P時,根據IFFT原理,存在P1、P2且deg(P1、P2) < 1/2*ρ*2^n,滿足:f0(x) = P(x) = P1(x^2) + x * P2(x^2) (1)令Q(x, y) = P1(y) + x * P2(y),可以看出Q(x, y)關於x的度d < 2;關於y的度d < 1/2*ρ*2^n;此時,驗證者隨機選取一個值x0傳送給證明者,然後令
f1(y) = Q(x0, y) = P1(y) + x0 * P2(y) (2)對於f1(y),y=x^2,由於x取值範圍是群1裡的元素,因此x^(2^n) = 1 ==> (x^2)(2^(n-1)) = 1 ==> y(2^(n-1)) = 1。令y的作用域為群L1,則L1有以下屬性:· 群的階為2^(n-1);· 群L1的每個元素對應群L0的兩個元素,即群L1的任意y,群L0都有兩個x和(-x)mod F,滿足x^2 mod F = y && (-x)^2mod F = y;因此,問題就轉化為了證明f1(y)的度d < 1/2*ρ*2^n。同時也要保證函式f1和f0的一致性,流程可分為以下幾個步驟:· 驗證者分別從群L1和群L0選取三個點y,s0,s1滿足 s0!=s1 && s0^2 = s1^2 = y
· 證明者返回f0(s0),f0(s1),f1(y)三個值· 驗證者根據f0(s0),f0(s1)插值出一個關於x的d<2的多項式g(x)· 驗證者驗證g(s0) = f1(y),不相等,則失敗可靠性分析:如果函式f1不是由函式f0轉換而來,那麼公式(1)的多項式P1(x^2)和P2(x^2)和公式(2)的多項式P1(y)和P2(y)互不相等。考慮到多項式的度d < 1/2*ρ*2^n,變數的取值範圍為2^(n-1),那麼在這個範圍內隨機選取一個值,多項式相等的概率為1/2*ρ*2^n / 2^(n-1) = ρ。ρ為coderates,如果ρ = 2^(-8),那麼一次校驗成功的概率僅僅為1/256。如果經過多次驗證,那麼作惡成功的概率就無線接近於0。以上可知,對函式f1重複上述的過程,直到fr變成一個可以直接校驗的度,就完成了整個測試驗證過程。

下面,我們看一下FRI協議的具體內容,如圖1所示:

FRI協議分為兩個階段:Commit階段和Query階段。從前面簡單的場景可以看出,一次簡單的迴圈,需要

1. 驗證者傳送隨機數x0
2. 後證明者生成新函式f1,
3. 進行一致性校驗。

FRI協議把每一迴圈前2步歸類到Commit階段,把第3步歸類到了Query階段。即在Commit階段,生成所有的函式f0~fr,r為迴圈的次數,然後在Query階段,統一校驗。

下面,先分別介紹Commit和Query協議裡各引數和各個步驟的意義,然後總結一下相關的流程。

Commit:

· Common input

  · R RS編碼比率
  · i 迴圈次數索引,取值{0~r}
  · r 迴圈次數 取值k0-R/η
  · η空間對映引數 x-->x^(2^η)
  · L0群的階 2^k0
  · RS[F,Li,ρ] 編碼引數[ 有限域,作用域,編碼比率 ]
  · q0(x) = x^(2^η)(實際實現的定義,和圖中不一致),L(i+1) = q0(Li),表示群Li到群L(i+1)的2^η --> 1對映

· Prover input

  · fi 第i次迴圈的函式輸入
  · Li 第i次迴圈的群,階位2^(n-i)
  · RSi fi對應的編碼引數

· LOOP i <= r

  · 定義f(i+1) 按照第2步的計算方式
  · 儲存f(i+1)的值,在群L(i+1)
  · 進入下一步迴圈
  · 定義fr 第2步的輸出
  · 插值出P(x)
  · d是多項式P(x)的度
  · 儲存d+1個多項式P(x)的係數 a0~ad
  · Commit 階段終止
  · Sy 群L(i+1)的每一個元素對應於群Li的元素的集合
  · f(i+1)(y) 計算f(i+1)在群L(i+1)上的所有取值
  · xi 驗證者傳送的隨機數
  · 1
  · 2
  · 3 i==r
  · 4 i < r

Query

· verifier input

  · R /η /Li /RSi /xi /fi /P(x) 見Commit
  · l query次數

·重構fr

  · 獲取a0~ad,重構P`(x)
  · 計算P`(x)在群Lr上的所有取值,並賦值給fr,注fr滿足RSr

· repeat l times

  · f(i+1)(s(i+1)) = Pi(xi)
  · 在Si上,插值出Pi(x)
  · Si 滿足s(i+1) = q0(x)的x的集合
  · i = {0~r-1}
  · i = {0~r-1}
  · round consistency check i = {0~r-1}
  · 都成功,則驗證透過

下面,以η = 1(即,q0(x) = x^2)為例,FRI協議的兩個階段的過程如圖2所示:

由以上流程可以看出:

· 針對每一輪的一致性的校驗,確保了原始多項式f0的確滿足d < ρ*2^n
· 上述協議重複l次,可以大大降低作惡者成功的概率

總結

以上就是FRI協議的具體過程,可以看出,驗證複雜度滿足對數關係r = Log2(ρ*2^n)。演算法保證了,當且僅當原始多項式f0是小於ρ*2^n時,所有的round consistency 校驗才會透過。真正的實現可能略有差別,具體的可以參考DEEP-FRI論文,相對於FRI,DEEP-FRI在保持證明和驗證的最優複雜度的同時,提高了系統的可靠性。

結合本系列的前三篇的文章,總結ZK-STARK的演算法如下:

演算法分為兩部分:算術化和LDT
算術化把問題轉換位多項式相等以及多項式的LDT問題
LDT階段使用FRI協議,保證線性級的證明覆雜度和對數級的驗證複雜度
零知識屬性保證驗證者不能訪問軌跡多項式裡的點,軌跡多項式裡儲存著隱私值
同時為了保證零知識屬性,需要對軌跡多項式附加數行隨機值,由驗證者和證明者協商確定
整個過程,不需要第三方的CRS
整個過程,不依賴任何數學難題

附錄

官方FRI的簡單介紹 https://medium.com/starkware/low-degree-testing-f7614f5172db

FRI paper https://eccc.weizmann.ac.il/report/2017/134/

DEEP-FRI paper chrome-extension://cdonnmffkdaoajfknoeeecmchibpmkmg/assets/pdf/web/viewer.html?file=https%3A%2F%2Farxiv.org%2Fpdf%2F1903.12243.pdf

Reed-Solomen WIKI https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;