在現實社會中,簽名作為簽名者身份的一種證明,簽名代表對簽名文件的認可,不可抵賴。理論上簽名是可信、不可偽造的。現在網絡環境越來越廣泛,有大量的信息通過網絡傳播,并且會保存在上面。這些電子數據顯然無法人工簽名,數字簽名就孕育而生。本文將介紹什么是數字簽名、數字簽名的特性與相關技術。
數字簽名(英語:Digital Signature,又稱公鑰數字簽名)是一種功能類似寫在紙上的普通簽名、但是使用了公鑰加密領域的技術,以用于鑒別數字信息的方法。一套數字簽名通常會定義兩種互補的運算,一個用于簽名,另一個用于驗證。法律用語中的電子簽章與數字簽名代表之意義并不相同。電子簽章指的是依附于電子文件并與其相關聯,用以辨識及確認電子文件簽署人身份、資格及電子文件真偽者;數字簽名則是以數學算法或其他方式運算對其加密而形成的電子簽章。意即并非所有的電子簽章都是數字簽名。
數字簽名不是指將簽名掃描成數字圖像,或者用觸摸板獲取的簽名,更不是落款。
數字簽名了的文件的完整性是很容易驗證的(不需要騎縫章、騎縫簽名,也不需要筆跡鑒定),而且數字簽名具有不可抵賴性(即不可否認性),不需要筆跡專家來驗證。
原理
通常我們使用公鑰加密,用私鑰解密。而在數字簽名中,我們使用私鑰加密(相當于生成簽名),公鑰解密(相當于驗證簽名)。
我們可以直接對消息進行簽名(即使用私鑰加密,此時加密的目的是為了簽名,而不是保密),驗證者用公鑰正確解密消息,如果和原消息一致,則驗證簽名成功。但通常我們會對消息的散列值簽名,因為通常散列值的長度遠小于消息原文,使得簽名(非對稱加密)的效率大大提高。注意,計算消息的散列值不是數字簽名的必要步驟。
在實際使用中,我們既想加密消息,又想簽名,所以要對加密和簽名組合使用,比如TLS就組合了加密和簽名。
數字簽名應用了公鑰密碼領域使用的單向函數原理。單向函數指的是正向操作非常簡單,而逆向操作非常困難的函數,比如大整數乘法。這種函數往往提供一種難解或懷疑難解的數學問題。目前,公鑰密碼領域具備實用性的三個懷疑難解問題為:質數分解,離散對數和橢圓曲線問題。
操作
數字簽名就是將公鑰密碼反過來使用。簽名者將信息用私鑰加密(這是一種反用,因為通常公鑰密碼中私鑰用于解密),然后公布公鑰;驗證者使用公鑰將加密訊息解密并比對消息(一般簽名對象為消息的散列值。本節為了講解方便,假設數字簽名直接將消息而非散列值簽名)。
因此,可靠的公鑰密碼算法均能構建出可靠的數字簽名。下面講解為何反用公鑰密碼算法能夠構建出安全的數字簽名。
Alice是簽名者,假設她要對消息A進行簽名。現在, Alice生成了其公私鑰密碼對,公布該公鑰,然后將消息用私鑰加密后發布。
現在,我們希望Alice的簽名算法具有如下特性:1,確認消息在傳輸過程中沒有丟位,沒被篡改(完整性). 2,確認消息的發送者是發布公鑰的Alice(認證). 3,確認Alice的確發布過該消息(不可否認性)
如果您想深入了解更多的區塊鏈的知識,馭凡教育“區塊鏈項目管理咨詢師” 課程是您的最佳選擇。