schnorr本質上是一種零知識的技術,即證明方(prover)聲稱知道乙個金鑰x
的值,通過使用schnorr加密技術,可以在不揭露x的值情況下向驗證方(verifier)證明對x
的知情權。
注意,接下來講解schnorr過程中提到的關於雜湊函式的性質、橢圓曲線上的離散對數難題和加密解密過程就不做過多的敘述。
一般會通過乙個遊戲過程來闡述schnorr的流程:證明方為alice,驗證方為bob。bob要在不知道x
的情況下驗證alice知道它。
方案一的過程如下所述,這是一種僅支援乙個驗證者進行驗證的方案
alice : 提交乙個證明(x,s,r)
bob : 將s
轉換為橢圓曲線上的點
由於橢圓曲線上的離散對數問題,知道x
和g
的情況下通過x = x * g
接觸x
是不可能的,所以保證了x的私密性。但是這種方案是存在問題的,x
和r
都是alice自己生成的,她知道bob會用x
和r
相加然後再與s * g
進行比較。所以她完全可以在不知道x
的情況下構造
r = r * g - x 和 s = r
這樣bob的驗證過程就變成
s * g ?== x + r
==> r * g ?== r * g - x + x
這是永遠成立的,所以這種方案並不正確。為了不讓alice能夠構造r
,提出了下面兩種解決方案,值得一提的是,第一種解決方案仍然是只支援乙個驗證者進行驗證的方案;而第二種方案是一種單向的非互動協議,即證明方提交證明之後,所有人都可以作為驗證方對證明的合法性進行驗證,即這種方案是可以公開驗證的。
這是一種互動式的方案,需要證明方和驗證方進行互動,過程如下:
與一步解決問題(alice單方面傳送一些資訊給bob)不同,整個協議變成了三步:
這個三步驗證看起來很像希臘字母sigama(∑),故這個協議也叫做"sigma協議"(sigma protocol)。但是由於協議存在互動過程,那麼就無法防止證明方和驗證方進行串通,所以這種方案只對參與互動的驗證者有效,其他不參與互動的驗證者無法判斷整個過程是否存在串通的舞弊行為。所以,這種簽名是無法公開驗證的。
為了增強簽名的可用性,並適用於數字簽名,需要將它修改為單向的(non-interactive)。
從上乙個方案可以看到,為了不讓alice進行造假,需要bob傳送乙個e
值,並將e
值構造進公式中。所以,如果alice選擇乙個無法造假並且大家公認的e
值並將其構造進公式中,問題就解決了。生成這個公認無法造假的e
的方法是使用雜湊函式。
具體過程如下:
可以看到,如果alice用e = hash(r)
來構造e
,那麼她無法通過構造r
來將e * x
從式子中減去。她若要這麼做的話,則必須反覆嘗試
r = r * g - e * x 即 r = r * g - hash(r) * x
並使等式成立。但是我們知道,hash函式的性質是輸入儘管改動很小,輸出也會完全改變。反應在式子中即r
稍有變化,e
就改變了,所以這是乙個極難嘗試成功的式子。因此alice無法作惡。
上述過程其實只是乙個零知識證明的過程,要把schnorr運用到簽名也是很簡單的。只需要把需要簽名的訊息嵌入計算e
的公式中即可。
最終的schnorr簽名過程如下:
在mimble-wimble中,使用schnorr多簽技術可以使得交易雙方在不知道對方私鑰的情況下對一筆交易進行多重簽名,確保一筆交易的合法性。利用schnorr多簽技術,還可以實現無指令碼的指令碼(scriptless script)功能,例如實現一些合約功能,如原子交換等。
這裡簡單提一下運用schnorr完成多簽的原理。若a和b想在不了解對方私鑰的情況下共同對一筆交易進行簽名,只需要利用橢圓曲線上加法同態加密的思想就可以了。
可以看到,schnorr的整個過程,包括加密和解密都是乙個加法的驗證過程,我們觀察簽名過程的核心公式
s * g == r + e * x
先說結果,若要實現a和b的多籤,只需要將公式寫成如下
(sa + sb) * g == (ra + rb) + e * (xa + xb)
可以看到,只要簽名的雙方共用乙個e
值,就可以在不透露私鑰的情況下,通過橢圓曲線上的加法同態加密即可進行簽名和驗證了。
具體的實現細節,可以看我的另一篇文章區塊鏈上的隱私技術——mimble-wimble,其中介紹了利用schnorr多簽進行聯合簽名的細節。
tips : 文章同步更新至我的github :
kingsley-sun的github
Schnorr簽名介紹
schnorr簽名演算法是由德國數學家 密碼學家claus schnorr提出。並於1990年申請了專利,u.s.patent 4,995,082,該專利與2008年2月失效。目前該演算法可以自由使用。schnorr簽名演算法幾乎在各個層面均優於位元幣現有的簽名演算法ecdsa 效能,安全,體積,擴...
traits技術詳解
stl模版庫非常強調軟體的復用,traits技術是採用的重要手段。traits提取不同類的共性,以便能統一處理。traits技術依靠顯示模版特殊化來把 中因型別不同而發生變化的片段拖出來,用統一的介面來包裝。這個介面可以包含乙個c 類所能包含的任何東西,如內嵌型別 成員函式 成員變數。作為客戶的模版...
藍芽技術詳解
在物聯網中物與網相連的最後數公尺,發揮關鍵作用的是短距離無線傳輸技術,目前有多種短距離無線傳輸技術可以應用在物聯網中,在我國,除已得到大規模應用的rfid之外,還有wifi zigbee 藍芽 nfc等 1 rfid 無線射頻識別技術,是一種通訊技術,可以通過無線電訊號識別特定目標並讀寫相關資料 r...