1. 程式人生 > >多重數字簽名演算法

多重數字簽名演算法

什麼是數字簽名?

數字簽名就是附加在資料單元上的一些資料,或是對資料單元所作的密碼變換。

這裡的數字簽名,不是簡單的把紙質的簽名改為電子簽名,我們需要知道的是,數字簽名包含兩點:一是保證資訊傳輸的完整性,防止其在途中被篡改;二是保證傳送者的身份認證,防止其抵賴。在學習數字簽名之前,我們先介紹幾個概念:

Hash(雜湊)函式

Hash函式,音譯為雜湊函式,又叫雜湊函式或雜湊函式。它可以將任意長度的訊息M對映為固定長度的摘要H(M),也叫雜湊值,雜湊值或雜湊值。雜湊函式有三大特點:

1. M1不等於M2,則H(M1)不等於H(M2);

2.單向性,即已知H和H(M),反推出M在計算上是不可行的;

3.無碰撞性,即對於M1和H(M1),找到M2使H(M2)=H(M1)在計算上不可行(弱碰撞性);任意兩個M1,M2(不相等),使得H(M1)=H(M2)在計算上不可行(強碰撞性)。

所謂計算上不可行,是由計算複雜度理論來說的,即對於該運算不存在一個多項式時間演算法,計算不可行是雜湊函式的安全性基礎。

公鑰(私鑰)

公鑰與私鑰是通過某種密碼學演算法得到的一個金鑰對(即一個公鑰和一個私鑰),公鑰是金鑰對中公開的部分,私鑰則是非公開的部分,通過這種演算法得到的金鑰對能保證在世界範圍內是唯一的。使用這個金鑰對的時候,如果用其中一個金鑰加密一段資料,必須用另一個金鑰解密。

數字簽名演算法

接下來,我們再來看數字簽名的過程:由傳送者把要簽名的資訊作雜湊運算,得到一段別人無法偽造的並且長度固定的資料摘要。傳送者用自己的私鑰把資料摘要加密成數字簽名,並將其與資訊一起傳送給接收者。接收者收到資訊和數字簽名後,對資訊作Hash運算得到報文的資料摘要,用公鑰把數字簽名解密為資料摘要。比較這兩份資料摘要,如果相同則簽名有效,否則簽名無效,這樣就可以確定資訊的真實來源。

多重數字簽名演算法

多重簽名技術(multisig)就是多個使用者同時對一個數字資產進行簽名。可以簡單的理解為,一個賬戶多個人擁有簽名權和支付權。

如果一個地址只能由一個私鑰簽名和支付,表現形式就是1/1;而多重簽名的表現形式是m/n,也就是說一共n個私鑰可以給一個賬戶簽名,而當m個地址簽名時,就可以支付一筆交易。所以,m一定是小於等於n的。

多重簽名技術的原理並不是很複雜,但它增加了第三方的介入保障,可以實現現實場景中需要第三方介入的很多的應用場景。

近日,密碼學頂級網站eprint上發表了兩篇最新的多重簽名演算法文章,首先是1月15日由比特幣核心開發者Gregory Maxwell等人首次提交的基於Schnorr的多重簽名演算法(MuSig)在比特幣網路中的應用,隨後,該演算法在5月10號被Manu Drijvers等人指出了存在安全性漏洞並提出了DG-CoSi多重簽名演算法,5月20日,Gregory Maxwell等人重新提交了修正過的論文。我們可以看到,多重簽名方案的研究之火熱。

現在的比特幣區塊鏈中,一個區塊中包含幾千個交易,比如2000個,則這個區塊包含了2000條被不同人簽名的2000條訊息,所有這些資訊都需要儲存在一個區塊中。Schnorr的多重簽名演算法支援“本地多簽名”,它可以將多個簽名合併為一個單一的簽名,同時使各自輸入的金鑰總和有效,即多重簽名和簽名匯聚。也就是說,一個區塊現在包含2000個交易,但只需要一個簽名,且我們只需要對這個簽名進行驗證。

上面提到,Maxwell等人提出了第一個運用於比特幣的可以在普通公鑰模型中證實安全的多重簽名方案,且允許金鑰聚合,該方案被稱作MuSig簽名演算法。它有兩個優勢:(i)它簡單而有效,與標準Schnorr簽名具有相同的金鑰和簽名大小;(ii)它允許金鑰聚合,這意味著聯合簽名可以完全驗證為一個標準的Schnorr簽名,與單個“匯聚”公鑰有關,可以從簽名者的個人公鑰中計算出來。

接著是由Manu Drijvers等人提出的基於Okamoto(多)簽名方案的雙發生器變體DG-CoSi簽名方案,並在隨機預言模型中的離散對數假設下可證明安全性。文中指出,與CoSi相比,DG-CoSi中的第二臺發生器幾乎沒有影響可擴充套件性,允許8192個簽名者在1.5秒內協作簽名一條訊息(Cosi簽名方案允許8000個簽名者在2秒內協作簽名一條訊息),使其成為大規模部署的高度實用且可證明安全性的多重簽名替代方案。

除此之外,早在2016年,斯坦福的Dan Boneh教授就介紹了比特幣的BLS短簽名演算法。Boneh提到,相比於Schnorr多重簽名演算法,BLS只需要一個元素,而Schnorr需要兩個元素,因此它更短,這將節約很大的空間,同時LBS也有匯聚的特徵。

使用多重簽名可以節約大約80%的空間,從而提高區塊鏈的容量。