日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入浅出零知识证明(一):Schnorr协议

發布時間:2024/3/12 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入浅出零知识证明(一):Schnorr协议 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ?最近在學習零知識證明,因為內容很多并且難度也大,想根據自己的學習路線做一系列總結,這是第一篇文章,主要介紹零知識證明的一些重要概念和思想,可以對零知識證明有直觀的理解,然后講解一個經典簡潔的零知識證明安全協議Schnorr協議。

? ? ? ?本篇文章主要包含四個方面,首先來總體介紹一下零知識證明,然后以地圖三染色問題為例,體現零知識證明思想,然后分析交互式Schnorr協議和非交互式Schnorr協議。

1.零知識證明概述

? ? ?·簡介

? ? ? ?零知識證明(Zero-Knowledge Proof),是由S.Goldwasser、S.Micali及C.Rackoff在20世紀80年代初提出的。證明者能夠在不向驗證者提供任何有用的信息的情況下,使驗證者相信某個論斷是正確的。零知識證明實質上是一種涉及兩方或更多方的協議,即兩方或更多方完成一項任務所需采取的一系列步驟。

? ? ·概念

? ? ? “P”表示 “證明者(Proofer)”:作為零知識證明的參與方,他在證明命題真實性的同時,不會泄漏任何相關信息。

? ? ? “V”表示 “驗證者(Verifier)”:作為零知識證明的另一參與方,驗證證明者提出的命題以及對應的證明是不是正確。

? ? ? “承諾階段(Commit)”:證明者針對命題做出承諾,并等待驗證者提出挑戰并進行驗證。

? ? ? “挑戰階段(Challenge)”:驗證者選擇隨機數,對提出的承諾進行挑戰。

? ? ? “回應挑戰階段(Response)”:證明者將收到的隨機數并結合給出的承諾,返回挑戰的回應。

? ? ? “驗證階段(Verify)”:驗證者驗證,挑戰的回應是否正確,錯誤的話那就證明失敗,如果成功就可進行下一次挑戰,直到可以相信的概率達到驗證者接受的條件,這樣就證明成功。

? ? ·性質

? ? ? ?在零知識證明中,需要滿足三個性質:

? ? ? ?正確性。沒有人能夠假冒P使這個證明成功。如果不滿足這條性質,也就是P不知道“知識”,再怎么證明,V也很難相信P擁有正確的知識。

? ? ? ?完備性。如果P和V都是誠實的,并證明過程的每一步都進行正確的計算,那么這個證明一定是成功的。也就是說如果P知道“知識”,那么V會有極大的概率相信P。

? ? ? ?零知識性。證明執行完之后,V只獲得了“P擁有這個知識”這條信息,而沒有獲得關于這個知識本身的任何信息。

? ? ·應用

? ? ? ?數據的隱私保護:在隱私場景中,根據零知識性,不泄漏交易的接收方,發送方,交易余額等細節的前提下,證明區塊鏈上的資產轉移是有效的。再比如買保險的時候,保險公司需要了解是否患有某種疾病,但是我不想讓保險公司知道我的全部病歷信息,那我可以證明給保險公司看,我沒有相關疾病就足夠了。

? ? ? ? 計算壓縮與區塊鏈擴容:在當前的區塊鏈架構中,同樣的計算會被重復多次,比如簽名的校驗,交易合法性校驗,智能合約的執行等等。這些計算過程都可以被零知識證明技術進行壓縮。比如以太坊采用 zkSNARK,帶來幾十倍的性能提升。

? ? ? ? 端到端的通訊加密:用戶可以互相通信,但是消息記錄不會完全暴露在服務器上,同時消息也可以按照服務器的要求,出示相應的零知識證明,比如消息的來源、與發送的目的地。

? ? ? ? 身份認證:用戶可以向網站證明,他擁有私鑰,網站并不需要知道私鑰的內容,可以通過驗證這個零知識證明, 確認用戶的身份。

? ? ? ? 去中心化存儲:服務器可以向用戶證明他們的數據被妥善保存,并且不泄露數據的內容。

2.舉例:地圖三染色問題

? ?·地圖三染色問題

?? ? ? ??三染色問題:假設存在一個地圖,不同城市之間修建一些道路,三染色問題即為是否存在一種染色方式,使得每個城市都用特定的三種顏色之一表示,并且任意有道路相連的兩個城市都不是相同的顏色。

? ? ? ? 下面設計一個交互協議: Alice是「證明者」,Bob是「驗證者」

? ? ? ? Alice擁有一個對特定地圖的三染色方案,希望在不泄漏任何信息的條件下向Bob證明自己擁有該方案。

? ? 1. 承諾階段

?? ? ? ?首先,在承諾階段,Alice 先要對染過色的圖進行一些「變換」,把顏色進行置換,例如把所有的藍色變成綠色,綠色變成橙色,橙色變成藍色。這樣 Alice 得到了一個新的染色答案,這時候她把新圖的每一個頂點都用紙片蓋上,然后出示給 Bob 看。

? ? ? 2. 挑戰階段

? ? ? ?下面進入挑戰階段,bob要挑戰Alice是否真的知道答案,但是他不能直接打開所有信封,只能隨機選擇任意一條邊,要求Alice打開相鄰兩個節點的紙片進行驗證兩個頂點的顏色是否相同。

? ? ? 3. 回應挑戰階段

?? ? ? ? 然后進入回應挑戰階段,假設 Bob 挑選的是最下面的一條邊。Alice打開Bob指定的兩個節點,作為對挑戰的回應,讓 Bob 檢查,發現這兩個頂點的顏色是不同的,那么 Bob 認為這次檢驗正確。但是Bob 只看到了圖的局部,一次挑戰不能讓他信任,但是多次挑戰可能讓Bob獲取到Alice全部的染色方案,極端情況就是Bob查看了所有邊的相鄰節點顏色,從而完全重構出染色方案。

? ? ? 4. 重復過程

? ? ? ?所以要對上述三個階段進行多次重復,每次在承諾階段Alice都會將染色方案進行一次隨機置換,使得Bob每次驗證,只能得到指定的兩個相鄰節點染色是否相等的信息。隨著重復的次數足夠多,Bob有極大概率相信Alice擁有一個正確的染色方案。但是Bob 每次看到的局部染色情況,都是 Alice 變換過后的結果,無論 Bob 看多少次,都不能拼出一個完整的三染色答案出來。Bob 在這個過程中,雖然獲得了很多「信息」,但是卻沒有獲得真正的「知識」。

? ? ? ?通過這個例子,對零知識證明可以有直觀的了解。接下來,介紹一個簡潔,用途廣泛的零知識證明系統 —— Schnorr 協議。

?3.交互式Schnorr協議

? ? ? ? Schnorr機制是一種基于離散對數難題的零知識證明機制。證明者聲稱知道一個密鑰x的值,通過使用Schnorr加密技術,可以在不揭露x的情況下,向驗證者證明對x的知情權。可用于證明你有一個私鑰但是不披露私鑰的內容。

? ? ? ?原始的Schnorr機制是一個交互式的機制。Schnorr中涉及到的技術有哈希函數的性質、橢圓曲線的離散對數難題。

? ? (橢圓曲線的離散對數難題是指,已知橢圓曲線E和點G,隨機選擇一個整數d,容易計算橢圓曲線上另一點Q=d*G,但是給定的Q和G來計算d就非常困難。)

? ? ? ?假設Alice 擁有一個秘密數字,a,我們可以把這個數字當成「私鑰: sk」,然后把它「映射」到橢圓曲線群上的一個點 a*G,簡寫為 aG。這個點我們把它當做「公鑰: PK」。

? ? ? ?Schnorr 協議充分利用了有限域和循環群之間單向映射,實現了簡潔的零知識證明安全協議:Alice 向 Bob 證明她擁有 PK 對應的私鑰 sk,那么如何證明呢。

??? ? ? 交互式Schnorr協議的流程分為三步:

? ? ? ? 第一步:為了保證零知識,Alice 需要先產生一個隨機數r,這個隨機數是用來保護私鑰無法被 Bob 抽取出來,會映射到橢圓曲線群上的點rG上,記為R發送給Bob。

? ? ? ? 第二步:Bob 要提供一個隨機數進行挑戰,把它稱為 c。

? ? ? ? 第三步:Alice 根據挑戰數計算 z = r + a * c,然后把 z 發給 Bob,Bob通過式子進行檢驗:z*G ?= R + c*PK

? ? ? ? 由于z=r+c*sk,等式兩邊添加相同的生成元可得:z*G= rG + c*(aG)=c*PK+R。就可以驗證Alice確實擁有私鑰sk,但是驗證者Bob并不能得到私鑰sk的值,因此這個過程是零知識的,并且是交互式的。

? ? ? ? 由于橢圓曲線上的離散對數問題,知道R和G的情況下通過R=r*G解出r是不可能的,所以保證了r的私密性。

? ? ? ? 但是,整個過程是在證明者和驗證者在私有安全通道中執行的。這是由于協議存在交互過程,只對參與交互的驗證者有效,其他不參與交互的驗證者,無法判斷整個過程是否存在串通的舞弊行為,一旦兩個驗證者相互串通,交換自己得到的值,便可以推出私鑰。因此,是無法公開驗證的。

? ? ? ? 進一步分析,為什么需要驗證者回復一個隨機數c呢?這是為了防止Alice造假。

? ? ? ? 如果Bob不回復一個c,就變成一次性交互。由于橢圓曲線上的離散對數問題,知道PK和G的情況下通過PK = a * G接觸a是不可能的,所以保證了a的私密性。

? ? ? ? 但是這種方案是存在問題的,a和r都是Alice自己生成的,她知道Bob會用PK和R相加然后再與z * G進行比較。所以她完全可以在不知道a的情況下構造:R = r * G - PK 和 z = r。 這樣Bob的驗證過程就變成:z * G ?== PK + R ==> r * G ?== PK + r * G - PK。這是永遠成立的,所以這種方案并不正確。

? ? ? ? 所以在交互式Schnorr協議中存在的私鑰泄露問題,使得算法無法在公開的環境下使用。

? ? ? ? 可以將原始的交互式協議轉變為非交互式協議來解決這個問題!

? ? ? ?下面來看,如何把一個三步的 Schnorr 協議變成一步。

?4.非交互式Schnorr協議

? ? ? ? ?回顧一下交互式Schnorr 協議的第二步,Bob 需要給出一個隨機的挑戰數 c,這里我們可以讓 Alice 用下面這個式子來計算這個挑戰數,從而達到去除協議第二步的目的。

? ? ? ? ?c = Hash(PK, R) 。

? ? ? ? ?其中 R 是 Alice 發給 Bob 的橢圓曲線點,PK 是公鑰。

? ? ? ? ?這個式子達到了兩個目的:
? ? ? ? ?第一個,Alice 在產生承諾 R 之前,沒有辦法預測 c,即使 c 最終是 Alice 生成的。

? ? ? ? ?第二個,c 通過 Hash 函數計算,會均勻分布在一個整數域內,可以作為一個隨機數。

? ? ? ? ?Hash 函數是「單向」的,這樣一來,雖然 c 是 Alice 計算的,但是 Alice 并沒有能力實現通過挑選 c 來作弊。因為只要 Alice 一產生 R, c 就相當于固定下來了。

? ? ? ? ?這樣,就把三步Schnorr協議合并為一步。Alice可直接發送(R,z),因為Bob擁有Alice的公鑰PK,于是Bob可自行計算出c。然后驗證z*G?=R+c*PK。

? ? ? ?如圖,利用 Hash 函數,把三步 Schnorr 協議合并為了一步。Alice 可以直接發送:(R, c, z)。又因為 Bob 擁有 PK,于是 Bob 可以自行計算出 c,于是 Alice 可以只發送 (R, z) 即可。

?? ? ??·Alice:均勻隨機選擇r,并依次計算 R=r*G c=Hash(R,PK) z=r+c*sk

? ? ? ?·Alice:生成證明(R,z)

? ? ? ?·Bob(或者任意一個驗證者):計算e=Hash(PK,R)

? ? ? ?·Bob(或者任意一個驗證者):驗證z*G?==R+c*PK

?5.Schnorr用于數字簽名

? ? ? ? Schnorr 協議可以用于數字簽名。

? ? ? ? 首先,為了保證攻擊者不能隨意偽造簽名,使用離散對數難題Hash函數滿足抗第二原象(防碰撞)作為安全假設。

? ? ? ? 提出數字簽名的出發點有兩個:

? ? ? ? 一是,接收方希望證實消息在傳遞過程中沒有被篡改;

? ? ? ? 二是,希望確認發送者的身份,可以理解為發送者有一個私鑰,并且私鑰和這條消息進行關聯計算。

? ? ? ? 首先要證明發送者的身份,這正是Schnorr協議的功能,能夠向對方證明「我擁有私鑰」這個陳述。并且這個證明過程是零知識的,不泄露關于「私鑰」的任何知識。而c=Hash(m,R)可以保證發送者與信息相關聯。

? ? ? ? 上圖就是Schnorr簽名方案。在這里還有一個優化,Alice發給Bob的內容不是(R,z)而是(c,z),這是因為R可以通過c,z計算出來。

? ? ? ? 分析下優化的原理,令n是有限域大小的位數。假設采用了非常接近2^256的有限域,也就是說z是256bit,那么橢圓曲線群的大小也差不多要接近256bit,這樣一來,把2^256開平方根后就是2^128,所以說256bit橢圓曲線群的安全性只有128bit。那么,挑戰數c也只需要128bit就足夠了。這樣Alice發送c要比發送R要更節省空間,而后者至少需要256bit。c只需要128bit。相比ECDSA簽名方案來說,可以節省1/4的空間。

總結

以上是生活随笔為你收集整理的深入浅出零知识证明(一):Schnorr协议的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。