區塊鏈基礎技術大剖析之數字簽名

買賣虛擬貨幣

導語:本課堂用通俗易懂的系列內容為大家呈現區塊鏈與密碼學領域相關知識。這裡有知識也有故事,從感興趣到有樂趣,全民課堂等你來學。

這個系列中的課程內容首先從比特幣著手進行入門介紹,再延伸至區塊鏈的相關技術原理與發展趨勢,然後深入淺出地依次介紹在區塊鏈中應用的各類密碼學技術。歡迎大家訂閱本公眾號,持續進行學習。

【本課堂內容全部選編自PlatON首席密碼學家、武漢大學國家網路安全學院教授、博士生導師何德彪教授的《區塊鏈與密碼學》授課講義、教材及網際網路,版權歸屬其原作者所有,如有侵權請立即與我們聯絡,我們將及時處理。】

2.4.2

數字簽名

昨天我們講到區塊鏈基礎技術之一的雜湊函式,今天這一講我們來認識另一個區塊鏈的基礎技術——數字簽名。

數字簽名從字面上理解,是數字化簽名。簽名由來已久,用途極廣。早在中國古代簽名便已經廣泛應用。我們最熟悉的可能是電視劇中,官老爺升堂斷案,對堂下貧民,私用大刑,屈打成招。最後簽字畫押,按上紅手印,這人就天牢見了。

其實古代文人墨客也極喜歡簽名,花押又稱“押字”,始於唐,興於宋,盛於元,故又稱“元押”。元押多為長方,一般上刻楷書姓氏,下刻八思巴文或花押。

從實用意義上說歷代印章大都有防奸辨偽的作用,作為個人任意書寫,變化出來的“押字”(有些已不是一種文字,只作為個人專用記號),自然就更難以摹仿而達到防偽的效果,因而這種押字一直沿用到明清時代。花押不是日本語,此名詞在中國早有使用,其意思是個人化的署名。

宋徽宗趙佶是著名的書畫家,他的“簽名檔”被人稱為“絕押”,其外形有點像寫得鬆散的“天”字,實際上趙佶玩的是拆字遊戲,把“天下一人”四字連貫在一起,來表明自己不僅是君臨天下的皇帝,且在藝術造詣上也是天下第一。乾隆皇帝更是在自己喜愛的書畫作品上蓋上數百個印章,來表達物品的歸屬權。

由此可見,在古代簽名就逐漸衍生出一些作用,如:防偽認證,表明主權等等。

時間挪移到現代,簽名已經廣泛應用到方方面面:購物刷信用卡時,需要簽名;友人互達書信時需要簽名;公司雙方簽署合同或協議時也需要簽名。而這些基本都是手寫簽名。

在網路時代,人們透過網路支付費用、買賣股票,為了保證網上商務活動的安全,需要一個很重要的安全機制——數字簽名。

數字簽名是手寫簽名數字化的產物,但又有著顯著的區不同訊息的簽名不同,甚至相同訊息也有不同的簽名,否則簽名就會被獲取並複製到另外的檔案中。數字簽名的基礎是公鑰密碼學。

數字簽名(又稱公鑰數字簽名)是隻有資訊的傳送者才能產生的別人無法偽造的一段數字串,這段數字串同時也是對資訊的傳送者傳送資訊真實性的一個有效證明。

它是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領域的技術來實現的,用於鑑別數字資訊的方法。一套數字簽名通常定義兩種互補的運算,一個用於簽名,另一個用於驗證。數字簽名是非對稱金鑰加密技術與數字摘要技術的應用。

數字簽名原理

數字簽名的檔案的完整性是很容易驗證的(不需要騎縫章,騎縫簽名,也不需要筆跡專家),而且數字簽名具有不可抵賴性(不可否認性)。

簡單地說,所謂數字簽名就是附加在資料單元上的一些資料,或是對資料單元所作的密碼變換。這種資料或變換允許資料單元的接收者用以確認資料單元的來源和資料單元的完整性並保護資料,防止被人(例如接收者)進行偽造。

它是對電子形式的訊息進行簽名的一種方法,一個簽名訊息能在一個通訊網路中傳輸。基於公鑰密碼體制和私鑰密碼體制都可以獲得數字簽名,主要是基於公鑰密碼體制的數字簽名。

包括普通數字簽名和特殊數字簽名。普通數字簽名演算法有RSA、ElGamal、Fiat-Shamir、Guillou- Quisquarter、Schnorr、Ong-Schnorr-Shamir數字簽名演算法、Des/DSA,橢圓曲線數字簽名演算法和有限自動機數字簽名演算法等。特殊數字簽名有盲簽名、代理簽名、群簽名、不可否認簽名、公平盲簽名、門限簽名、具有訊息恢復功能的簽名等,它與具體應用環境密切相關。

顯然,數字簽名的應用涉及到法律問題,美國聯邦政府基於有限域上的離散對數問題制定了自己的數字簽名標準(DSS)。

我們透過一個例子來了解數字簽名的應用,先看下圖:

這裡面會產生兩個問題:

這麼大一筆資金,這訊息是愛麗絲髮送的嗎,如果是別人呢?怎麼確定?

要是過後愛麗絲不承認這筆轉賬怎麼辦?

數字簽名是運用雜湊演算法和非對稱加密演算法實現的,要解決上面的兩個問題,愛麗絲首先要寫一個小紙條“我愛麗絲要向鮑勃轉100萬”並在下面簽名,確保內容認可。

然後將“我愛麗絲要向鮑勃轉100萬”的小紙條用雜湊演算法運算一次,會得到一串“天書”般的文字——看不懂且不可逆的字串。

之後對方用私鑰給這段字元加密,加密後是一段密文。這段密文就是雙方的數字簽名了。雙方公佈了文字內容,和加密私鑰對應的公鑰,但兩方的私鑰不告訴任何人。

我們如何知道筆跡是愛麗絲的呢?這裡就涉及到筆跡的鑑別,首先鑑別方要把“我愛麗絲要向鮑勃轉100萬”雜湊處理換算一下,因為雜湊演算法的性質,會得出一樣的結果。之後用公開金鑰來解密,如果雙方內容完全一致。那麼就可以證明,這段文字確實是由儲存私鑰的人簽署的。

並且如果當事人不承認的話,比如事後愛麗絲說我想給鮑勃1萬,請他退回99萬,如果文字有所改動,就算是私鑰正確,雜湊處理後的內容也會改變,內容就不是原有雜湊值。

這裡可以看到數字簽名方案一般包括三個過程:

系統初始化過程:產生數字簽名方案中的所有系統和使用者引數(公開的+秘密的)。

簽名過程:使用者利用給定的簽名演算法對訊息簽名,簽名過程可以公開也可以不公開,但一定包含僅簽名者才擁有的秘密資訊(簽名金鑰)。

驗證過程:驗證者利用公開的驗證方法對給定訊息的簽名進行驗證。

圖:數字簽名工作流程示意圖

所以數字簽名具有以下目的和要求

數字簽名的目的:保證資訊的完整性和真實性,即訊息沒有被篡改,而且簽名也沒有被篡改,訊息只能始發於所聲稱的一方。

一個完善的簽名方案應滿足以下三個條件:

不可偽造性:其他任何人均不能偽造簽名,也不能對接收或傳送的資訊進行篡改、偽造和冒充。

不可否認性:簽名者事後不能否認或抵賴自己的簽名。

公正的仲裁:若當事雙方對簽名真偽發生爭執時,能透過公正的仲裁者驗證簽名來確定其真偽。

免責聲明:

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

推荐阅读

;