---
# System prepended metadata

title: 隱私信貸應用程式
tags: [NCKU]

---

# 隱私信貸應用程式
###### tags: `NCKU`

## 介紹傳統信貸流程
### KYC
傳統 KYC 可以透過核對使用者身份證、護照或其他相關資訊，以及客戶照片等方式來驗證使用者身份。
![](https://i.imgur.com/cmPVNVY.jpg)

過程中，如果有第三方竊聽或駭入資料儲存的組織，則使用者存在被冒充的風險，因此，銀行資安組織成本也需要持續投入。
![](https://dmifinance.in/images/blogs/kyc-blog-fraud2.jpg)

### 聯合徵信
徵信用紀錄主要包含5個部分：借貸資料、信用卡資料、信用評分分數、聯徵查詢紀錄、通報紀錄資訊…等項目。

* 借貸資料：包含借款餘額、共同債務、其他債務資訊、借款逾期、催收或呆帳紀錄。
* 信用卡資料：包含持卡紀錄、帳款資訊以及帳款總餘額。
* 信用評分分數：信用分數介於200到800之間，一般來說400分以下即視為信用不良。
* 聯徵查詢紀錄：最近1年內的查詢紀錄，包含被查詢紀錄及當事人查詢紀錄。
* 通報紀錄資訊：如果被通報為可疑帳戶或詐騙，也會註記於聯徵紀錄。


### 可以改進的地方
對使用者而言可以更好的地方
* 個人身份的資料洩漏
* 無法得到準確貸款金額，除非完成聯徵
* 流程等待時間很久

對銀行端而言可以更好的地方
* 電話行銷成本
* 審核信用與身份成本
* 時間成本 (從接觸客戶至完成信貸週期較長)

## 隱私信貸應用程式流程
若有人聲稱他為使用者 Alice，此人應掌握了 Alice 相關的重要知識，包含 Alice 擁有的隱私，例如，網路銀行帳號密碼、護照照片、最近一次的消費記錄以及 Alice 的生物數據(e.g. 臉部)...等。

這些隱私知識，極有可能與相關組織共享(身分證號與政府共享、網路銀行密碼與所屬銀行共享...etc)

而 Alice 若聲稱其擁有數種資產，則 Alice 應掌握了與資產購買方共享的秘密，例如，拍賣所商品的購買證明、信用卡刷卡紀錄與存摺數據。

### 零知識 KYC 與資產聲明
KYC 可分成幾個步驟:

* Rules: 零知識證明首先需要遵守一組預定義規則，例如需要提供與護照的合照，並清楚將護照號碼與照片顯示出來。
* zk-circuct generator: 中介透過所定義的 rule，產生可供驗證的方程式，例如，將 **生物資訊變成電路參數**。
* Generate parameters: 中介產生要交給證明密鑰組 $p_k$ 與驗證密鑰組 $v_k$。這邊的密鑰組是類似 Session Key 的存在。
* Proving: 證明者使用 **自身知識帶入 $p_k$ 做隨機處理，產生證明** 並回覆給中介。
* Verification: 驗證者使用 $v_k$ 對證明驗證，確認是否正確且符合規則。

![](https://i.imgur.com/LsyKa3s.png)

當使用者能夠證明身份時，資產證明也跟 KYC 過程類似。

#### 特性
* 快速
* 隱私
* 成本低廉且無人為偏見

## 技術實現 Demo

### 生成包含生物數據與隱私資料的問題
這邊之所要轉為約束是，當帶入正確的輸入時，若計算出的係數滿足下面約束的所有門，代表者每一步驟的計算皆滿足，而當每一步驟計算皆滿足，則視為計算結果滿足正確性。

**1. 透過將生物數據轉換為方程式參數，例如 $\lambda$ 代表生物數據**

| Algebraic Circuit | R1CS |
| -------- | -------- |
| ![](https://i.imgur.com/9uNPIhE.png) | ![](https://i.imgur.com/hsRUQNj.png) |

**2. 將參數作為算數門，並求出一階約束函式 R1CS**
Provided variable: [$one$, $x$, $\overline{y}$, ${\lambda}_1$, ${\lambda}_2$, ${\lambda}_3$]

| First Gate | Second Gate | Third Gate | Fourth Gate |
| -------- | -------- | -------- | -------- |
|  ![](https://i.imgur.com/Tvuhcew.png)    | ![](https://i.imgur.com/X8MvIRJ.png)     | ![](https://i.imgur.com/bj6Gz9J.png)     | ![](https://i.imgur.com/XELDEcG.png)     |

| A | B | C |
| -------- | -------- | -------- |
| ![](https://i.imgur.com/WOoXy6p.png)     | ![](https://i.imgur.com/FU6ptS6.png)     | ![](https://i.imgur.com/zdNQWHN.png)     |

**3. 將 R1CS 轉為二次計算函式**

為了使得計算結果可快速驗證，不需反覆確認每個門的運算，我們可以接約束轉為一個方程式格式。 $R1CS \rightarrow QAP(Quadratic Arithmetic Programs)$

* 生成挑戰
Let $(a, b, c)$ pass through $T(x)=(x-1)(x-2)(x-3)(x-4)$
這邊過點 $(1, 0), (2, 0), (3, 0), (4, 0)$ 是挑戰函式，此函式可以是隨機生成的

* 轉換 $R1CS$ 的矩陣
Use Lagrange polynomials Form:
![](https://i.imgur.com/MeKIJMG.png)
A ![](https://i.imgur.com/WOoXy6p.png) ，我們將 A 的第一行與挑戰函式點帶入拉格朗日插值法公式中，
E.g. Transform $A_{i1}$ $\rightarrow (1, 0), (2, 0), (3, 0), (4, 5) \rightarrow 0.833x^3 - 5x^2 + 9.166x - 5 \rightarrow [-5.0, 9.166, -5.0, 0.833]$ 

* 證明的格式
最終可得三個新的 A, B, C 矩陣
![](https://i.imgur.com/WwCLmLc.png)     ![](https://i.imgur.com/gNex55c.png)      ![](https://i.imgur.com/G90f1Nn.png)

**證明者必須求出一組 S 使得條件成立，S 為對應的係數，在此情況，唯有帶入正確的 $x$ (生物數據與 ID 雜湊...) 才能找出正確的 S 使得條件成立**

![](https://i.imgur.com/0ay92Iq.png)

$S . A(x) * S . B(x) - S . C(x) = H(x)T(x)$
為了簡化這邊以 $P(x)=H(x)T(x)$ 表示

### 證明與驗證
![](https://i.imgur.com/jUIqMEO.png)

零知識部分以 $\color{magenta}{此顏色}$ 表示，這邊採用精簡過的 Pinocchio Protocol (https://ieeexplore.ieee.org/document/6547113)

* **Setup**
    - sample random values $s, \alpha$
    - calucalate encryptions $g^{\alpha}$ and $\{g^{s^i}\}_{i \in [d]}, \{g^{\alpha s^i}\}_{i \in [d]}$
    - generate $p_k: (\{g^{s^i}\}_{i \in [d]}, \{g^{\alpha s^i}\}_{i \in [d]})$ , $v_k: (g^{\alpha}, g^{t(s)})$

* **Compute (Proving)**
    * assign coeffients $\{c_i\}_{i \in \{0,...,d\}}, p(x) = c_dx^d + ... + c_1x^1 + c_0x^0$ 
    and find $h(x)=\frac {p(x)}{t(x)}$
    * using $\{g^{s^i}\}_{i \in [d]}, \{g^{\alpha s^i}\}_{i \in [d]}$ to evaluate encrypted polynomials 
    $g^{p(s)}, g^{h(s)}$ and $g^{\alpha p(s)}$
    * sample random $\color{magenta}{\delta}$ and make the randomized proof 
    $\color{magenta}{\pi = (g^{\delta p(s)}, g^{\delta h(s)}, g^{\delta \alpha p(s)})}$

* **Verify**
    * parse proof $\pi$ as $(g^p, g^h, g^{p'})$
    * check polynomial restriction $e(g^{p'}, g) = e(g^p, g^{\alpha})$
    * check polynomial cofactors $e(g^p, g) = e(g^{t(s)}, g^h)$

### 總結
1. TP 中介協助生成算數電路函式 $F'$, 證明密鑰$p_k$ 與驗證密鑰 $v_k$，$F'$ 是由影像辨識與使用者和秘密儲存單位(e.g. 政府機構) 作為係數。
2. 證明者透過使用中介的軟體，在本地端設備取得正確的生物數據(e.g. 臉部辨識數據)並輸入正確的隱私資訊(e.g. 身分證號)，計算出 $F'$ 的係數知識，並透過 $p_k$ 與係數知識生成證明 $\pi$
3. 驗證者透過 $v_k$ 驗證 $\pi$，檢查是否為合法證明

在數據交換過程中，驗證者與證明者有共享秘密資料(身分證照片的生物數據)，中介提供 SDK 讓驗證者與證明者在其本地端生成 **問題 $F'$** 與 **證明 $\pi$**，並協助轉交。並選擇隨機數生成證明與驗證的密鑰 $p_k, v_k$，讓證明者與驗證者在 **不傳遞隱私數據** 的情況下驗證身份或資產。而對於中介(銀行端或智能合約而言，由於不知道正確輸入，也無法得知確切係數。並且在證明生成過程中，由於加入了隨機數，也難以取得證明數據)

#### 採用這個應用程式帶來的業務改善
* **對使用者而言可以更好的地方**
    - [x] 個人身份的資料洩漏 (零知識數據交換)
    - [x] 無法得到準確貸款金額，除非完成聯徵 (資產證明可快速由驗證者確認)
    - [x] 流程等待時間很久 (可自動化的資產驗證過程)

* **對銀行端而言可以更好的地方**
    - [x] 電話行銷成本 (網路應用的無成本準確試算)
    - [x] 審核信用與身份成本 (可自動化的資產驗證過程)
    - [x] 時間成本 (自動化與程式化的審核流程)
---

### 細節備考 (非報告內容)
驗證過程大綱
![](https://i.imgur.com/jUIqMEO.png)


| 1. 設置 | 2. 證明 | 3. 驗證 |
| ----------- | ------------------------- | ------------------------- |
電路生成 $\rightarrow$ 電路轉換為約束多項式 $\rightarrow$ 約束多項式生成 $p_k$ 與 $v_k$  | 計算電路方程式取得係數知識 $\rightarrow$ 選擇隨機數 $\delta$ $\rightarrow$ 透過 $p_k$, $\delta$ 產生係數知識的證明 $\pi_y$     | 用 $v_k$ 確認證明依照約束 $\rightarrow$ 用 $v_k$ 驗證使用了正確的輸入 $\rightarrow$ 用 $v_k$ 做有效計算檢查     |

零知識部分以 $\color{magenta}{顏色}$ 表示

|     | 1. 設置 | 2. 證明 | 3. 驗證 |
| --- | ------- | ------- | ------- |
| 步驟內容    | 1. 選擇生成元 $g$ 和加密配對 $e$ <br><br> 2. 將變量總數為 $n$ 其中輸入/輸出變量數位 $m$ <br> 的函數 $f(u) = y$，轉換為階數為 $d$ 大小為 <br> $n+1$ 的多項式形式 $\{l_i(x), r_i(x), o_i(x)\}_{i \in \{0, ..., n\}}, t(x)$ <br><br> 3. 選擇隨機數 $s, \rho_l, \rho_r, \alpha_l, \alpha_r, \alpha_o, \beta, \gamma$<br><br> 4. 設置 $\rho_o = \rho_l \cdot \rho_r$ 和操作數生成元 $g_l=g^{\rho_l}, g_r = g^{\rho_r}, g_o = g^{\rho_o}$ <br><br> 5. 設置 proving key $p_k$: <br>$(\{g^{s^k}\}_{k \in [d]}, \\ \{g_l^{l_i(s)},g_r^{r_i(s)},g_o^{o_i(s)}\}_{i \in {0,…,n}}\}, \\ \{g_l^{\alpha_ll_i(s)},g_r^{\alpha_rr_i(s)}, g_o^{\alpha_oo_i(s)}, g_l^{\beta l_i(s)},g_r^{\beta r_i(s)},g_o^{\beta o_i(s)}\}_{i \in \{m+1,…,n\}}, \\ \color{magenta}{{g_l^{t(s)}, g_r^{t(s)}, g_o^{t(s)}, g_l^{\alpha_l t(s)}, g_r^{\alpha_r t(s)}, g_o^{\alpha_o t(s)}, g_l^{\beta t(s)},g_r^{\beta t(s)}, g_o^{\beta t(s)}}})$ <br><br> 6. 設置 verification key $v_k$: <br> $(g^1, {g_o}^{t(s)}, \{ {g_l}^{l_i(s)}, {g_r}^{r_i(s)}, {g_o}^{o_i(s)} \}_{i \in \{0, ..., m\}}, g^{\alpha_l}, g^{\alpha_r}, g^{\alpha_o}, g^{\gamma}, g^{\beta})$     |   1. 以輸入 $u$，計算 $f(u)$ 獲取所有的電路係數 <br> $\{v_i\}_{i \in \{m+1,……，n\}}$ <br><br> 2. 把電路係數賦值給 $L(x) = l_0(x) + \sum_{i=1}^n {v_i l_i(x)}$，similarly $R(x), O(x)$ <br><br> 3. 選擇隨機數 $\delta_l, \delta_r, \delta_o$ <br><br> 4. 計算 $h(x) = \frac{L(x)R(x)-O(x)}{t(x)} \color{magenta}{+ \delta_r L(x) + \delta_lR(x) + \delta_l \delta_r t(x) - \delta_o}$ <br><br> 5. 將 prover 的變量值賦值給加密的可變多項式 $\color{magenta}{並進行零知識的\delta-轉換}\quad g_l^{L_p(s)}= \color{magenta}{(g_l^{t(s)})^{\delta_l}} \cdot \prod_{i=m+1}^n{(g_l^{l_i(s)})^{v_i}}$<br>, similarly $g_r^{R_p(s)}$ 和 $g_o^{O_p(s)}$ <br><br> 6. 為其 $\alpha -$ 變換賦值 $g_l^{L_p'(s)}= \color{magenta}{(g_l^{\alpha _l t(s)})^{\delta_l}} \cdot \prod_{i=m+1}^n{(g_l^{\alpha _l l_i(s)})^{v_i}}$, similarly  $g_r^{R_p'(s)}, g_o^{O_p'(s)}$ <br><br> 7. 為變量值一致性多項式賦值 <br> $g^{Z(s) = \color{magenta}{(g_l^{\beta t(s)})^{\delta_l}(g_r^{\beta t(s)})^{\delta_r}(g_o^{\beta t(s)})^{\delta_o}}} \cdot \prod_{i=m+1}^n{(g_l^{\beta l_i(s)}g_r^{\beta r_i(s)}g_o^{\beta o_i(s)})^{v_i}}$ <br><br> 8.計算證明 $(g_l^{L_p(s)}, g_r^{R_p(s)}, g_o^{O_p(s)}, g^{h(s)}, g_l^{L_p'(s)}, g_r^{R_p'(s)}, g_o^{O_p'(s)}, g^Z)$      |   1. 解析提供的證明為 $(g_l^{L_p},g_r^{R_p},g_o^{O_p},g^h,g_l^{L_p'},g_r^{R_p'},g_o^{O_p'},g^Z)$ <br><br> 2. 將輸入/輸出值賦值給 verifier 的加密多項式並加 1， $g_l^{L_v(s)} = g_l^{l_o(s)} \cdot \prod_{i=1}^m{(g_l^{l_i(s)})^{v_i}}$, similarly $g_r^{R_v(s)}, g_o^{O_v(s)}$ <br><br> 3. 可變多項式約束檢查，$e(g_l^{L_p}, g^{\alpha_l}) = e(g_l^{L'_p}, g)$, similarly $g_r^{R_p}, g_o^{O_p}$ <br><br> 4. 變量值一致性檢查，$e(g_l^{L_p},g_r^{R_p},g_o^{O_p},g^{\beta \gamma}) = e(g^Z, g^{\gamma})$ <br><br> 5. 有效的計算檢查，$e(g_l^{L_p}g_l^{L_v(s)},g_r^{R_p}g_r^{R_v(s)}) = e(g_o^{t(s)},g^h) \cdot e(g_o^{O_p}g_o^{O_v(s)},g)$      |


規則轉換為函數
Algebraic Circuit $\rightarrow$ R1CS

$F(x) = x^3+x+5$, input $u = 3$, output $y = 35$
| Algebraic Circuit | R1CS |
| -------- | -------- |
| ![](https://i.imgur.com/9uNPIhE.png) | ![](https://i.imgur.com/hsRUQNj.png) |

Provided variable: [$one$, $x$, $\overline{y}$, ${\lambda}_1$, ${\lambda}_2$, ${\lambda}_3$]

| First Gate | Second Gate | Third Gate | Fourth Gate |
| -------- | -------- | -------- | -------- |
|  ![](https://i.imgur.com/Tvuhcew.png)    | ![](https://i.imgur.com/X8MvIRJ.png)     | ![](https://i.imgur.com/bj6Gz9J.png)     | ![](https://i.imgur.com/XELDEcG.png)     |

First Gate: 
${\lambda}_1 = x * x \rightarrow x * x - {\lambda}_1 = 0$
$a_1 = \begin{vmatrix}
0 & 1 & 0 & 0 & 0 & 0
\end{vmatrix}$
$b_1 = \begin{vmatrix}
0 & 1 & 0 & 0 & 0 & 0
\end{vmatrix}$
$c_1 = \begin{vmatrix}
0 & 0 & 0 & 1 & 0 & 0
\end{vmatrix}$

Second Gate: 
${\lambda}_2 = {\lambda}_1 * x \rightarrow {\lambda}_1  * x - {\lambda}_2 = 0$ 
$a_2 = \begin{vmatrix}
0 & 0 & 0 & 1 & 0 & 0
\end{vmatrix}$
$b_2 = \begin{vmatrix}
0 & 1 & 0 & 0 & 0 & 0
\end{vmatrix}$
$c_2 = \begin{vmatrix}
0 & 0 & 0 & 0 & 1 & 0
\end{vmatrix}$

Third Gate: 
The addition gate needs to be converted
${\lambda}_3 = {\lambda}_2 + x \rightarrow (x+{\lambda}_2)*1-{\lambda}_3 = 0$ 
$a_3 = \begin{vmatrix}
0 & 1 & 0 & 0 & 1 & 0
\end{vmatrix}$
$b_3 = \begin{vmatrix}
1 & 0 & 0 & 0 & 0 & 0
\end{vmatrix}$
$c_3 = \begin{vmatrix}
0 & 0 & 0 & 0 & 0 & 1
\end{vmatrix}$

Fourth Gate: 
$\overline{y} = {\lambda}_3 + 5 \rightarrow ({\lambda}_3 + 5)*1 - \overline{y} = 0$
$a_4 = \begin{vmatrix}
5 & 0 & 0 & 0 & 0 & 1
\end{vmatrix}$
$b_4 = \begin{vmatrix}
1 & 0 & 0 & 0 & 0 & 0
\end{vmatrix}$
$c_4 = \begin{vmatrix}
0 & 0 & 1 & 0 & 0 & 0
\end{vmatrix}$

Final
$A = \begin{vmatrix}
0 & 1 & 0 & 0 & 0 & 0 \\
0 & 0 & 0 & 1 & 0 & 0 \\
0 & 1 & 0 & 0 & 1 & 0 \\
5 & 0 & 0 & 0 & 0 & 1 \\
\end{vmatrix}$, 

$B = \begin{vmatrix}
0 & 1 & 0 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 & 0 & 0 \\
1 & 0 & 0 & 0 & 1 & 0 \\
1 & 0 & 0 & 0 & 0 & 0 \\
\end{vmatrix}$, 

$C = \begin{vmatrix}
0 & 0 & 0 & 1 & 0 & 0 \\
0 & 0 & 0 & 0 & 1 & 0 \\
0 & 1 & 0 & 0 & 0 & 1 \\
0 & 0 & 1 & 0 & 0 & 0 \\
\end{vmatrix}$

R1CS $\rightarrow$ QAP(Quadratic Arithmetic Programs)

Let $(a, b, c)$ pass through $T(x)=(x-1)(x-2)(x-3)(x-4)$

Use Lagrange polynomials Form:
![](https://i.imgur.com/MeKIJMG.png)

E.g. Transform $A_{i1}$ $\rightarrow (1, 0), (2, 0), (2, 0), (4, 5) \rightarrow 0.833x^3 - 5x^2 + 9.166x - 5 \rightarrow [-5.0, 9.166, -5.0, 0.833]$ 

![](https://i.imgur.com/WwCLmLc.png)     ![](https://i.imgur.com/gNex55c.png)      ![](https://i.imgur.com/G90f1Nn.png)

---

TP Setup:
1. 選擇生成元 $g$ 和加密配對 $e$

2. 將變量總數為 $n$ 其中輸入/輸出變量數位 $m$ 的函數 $f(u) = y$，轉換為階數為 $d$ 大小為$n+1$ 的多項式形式 $QAP \rightarrow [ \{l_i(x), r_i(x), o_i(x)\}_{i \in \{0, ..., n\}}, t(x) ]$

3. 選擇隨機數 $s, \rho_l, \rho_r, \alpha_l, \alpha_r, \alpha_o, \beta, \gamma$

4. 設置 $\rho_o = \rho_l \cdot \rho_r$ 和操作數生成元 $g_l=g^{\rho_l}, g_r = g^{\rho_r}, g_o = g^{\rho_o}$

5. 設置 proving key $p_k$：$(\{g^{s^k}\}_{k \in [d]}, \\
\{g_l^{l_i(s)},g_r^{r_i(s)},g_o^{o_i(s)}\}_{i \in {0,…,n}}\}, \\
\{g_l^{\alpha_ll_i(s)},g_r^{\alpha_rr_i(s)},  g_o^{\alpha_oo_i(s)},g_l^{\beta l_i(s)},g_r^{\beta r_i(s)},g_o^{\beta o_i(s)}\}_{i \in \{m+1,…,n\}}, \\
\color{magenta}{{g_l^{t(s)}, g_r^{t(s)}, g_o^{t(s)}, g_l^{\alpha_l t(s)}, g_r^{\alpha_r t(s)}, g_o^{\alpha_o t(s)}, g_l^{\beta t(s)},g_r^{\beta t(s)}, g_o^{\beta t(s)}}})$

6. 設置 verification key $v_k$: $(g^1, {g_o}^{t(s)}, \{ {g_l}^{l_i(s)}, {g_r}^{r_i(s)}, {g_o}^{o_i(s)} \}_{i \in \{0, ..., m\}}, g^{\alpha_l}, g^{\alpha_r}, g^{\alpha_o}, g^{\gamma}, g^{\beta})$


Alice Proving:

1. 代入輸入值 $u$，執行 $f(u)$ 計算獲取所有的電路係數 $\{v_i\}_{i \in \{m+1,……，n\}}$

2. 把所有未加密的係數多項式賦值給 $L(x) = l_0(x) + \sum_{i=1}^n {v_i l_i(x)}$
, similarly $R(x), O(x)$

3. 選擇隨機數 $\delta_l, \delta_r, \delta_o$

4. 計算 $h(x) = \frac{L(x)R(x)-O(x)}{t(x)} \color{magenta}{+ \delta_r L(x) + \delta_lR(x) + \delta_l \delta_r t(x) - \delta_o}$

5. 將 prover 的變量值賦值給加密的可變多項式 $\color{magenta}{並進行零知識的\delta-轉換}\quad g_l^{L_p(s)}= \color{magenta}{(g_l^{t(s)})^{\delta_l}} \cdot \prod_{i=m+1}^n{(g_l^{l_i(s)})^{v_i}}$, 
similarly $g_r^{R_p(s)}$ 和 $g_o^{O_p(s)}$

6. 為其 $\alpha -$ 變換賦值 $g_l^{L_p'(s)}= \color{magenta}{(g_l^{\alpha _l t(s)})^{\delta_l}} \cdot \prod_{i=m+1}^n{(g_l^{\alpha _l l_i(s)})^{v_i}}$
, similarly $g_r^{R_p'(s)}$ 和 $g_o^{O_p'(s)}$

7. 為變量值一致性多項式賦值
$g^{Z(s) = \color{magenta}{(g_l^{\beta t(s)})^{\delta_l}(g_r^{\beta t(s)})^{\delta_r}(g_o^{\beta t(s)})^{\delta_o}}} \cdot \prod_{i=m+1}^n{(g_l^{\beta l_i(s)}g_r^{\beta r_i(s)}g_o^{\beta o_i(s)})^{v_i}}$

8. 計算證明 $(g_l^{L_p(s)}, g_r^{R_p(s)}, g_o^{O_p(s)}, g^{h(s)}, g_l^{L_p'(s)}, g_r^{R_p'(s)}, g_o^{O_p'(s)}, g^Z)$

 
Bob Verification:
1. 解析提供的證明為 $(g_l^{L_p},g_r^{R_p},g_o^{O_p},g^h,g_l^{L_p'},g_r^{R_p'},g_o^{O_p'},g^Z)$

2. 將輸入/輸出值賦值給 verifier 的加密多項式並加 1， 
$g_l^{L_v(s)} = g_l^{l_o(s)} \cdot \prod_{i=1}^m{(g_l^{l_i(s)})^{v_i}}$, similarly $g_r^{R_v(s)}, g_o^{O_v(s)}$

3. 可變多項式約束檢查，$e(g_l^{L_p}, g^{\alpha_l}) = e(g_l^{L'_p}, g)$, similarly $g_r^{R_p}, g_o^{O_p}$

4. 變量值一致性檢查，$e(g_l^{L_p},g_r^{R_p},g_o^{O_p},g^{\beta \gamma}) = e(g^Z, g^{\gamma})$

5. 有效的計算檢查，$e(g_l^{L_p}g_l^{L_v(s)},g_r^{R_p}g_r^{R_v(s)}) = e(g_o^{t(s)},g^h) \cdot e(g_o^{O_p}g_o^{O_v(s)},g)$


|          | 1. 設置                              | 2. 證明                              | 3. 驗證 |
| -------- | ------------------------------------ | ------------------------------------ | ------- |
| 步驟內容 | ![](https://i.imgur.com/cqWeBVf.png) | ![](https://i.imgur.com/r2JBW3e.png) | ![](https://i.imgur.com/cXQgb2d.png)    |



