數碼簽署(英語:Digital Signature,又稱公鑰數碼簽署)是一種功能類似寫在紙上的普通簽章、但是使用了公鑰加密領域的技術,以用於鑑別數碼訊息的方法。一套數碼簽署通常會定義兩種互補的運算,一個用於簽章,另一個用於驗證。法律用語中的電子簽章與數碼簽署代表之意義並不相同。電子簽章指的是依附於電子檔案並與其相關連,用以辨識及確認電子檔案簽署人身份、資格及電子檔案真偽者;數碼簽署則是以數學演算法或其他方式運算對其加密而形成的電子簽章。意即並非所有的電子簽章都是數碼簽署。
![]() | 此條目可參照英語維基百科相應條目來擴充。 |
![](http://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Gnome-mime-text-x-copying.svg/150px-Gnome-mime-text-x-copying.svg.png)
數碼簽署不是指將簽章掃描成數碼圖像,或者用觸控板取得的簽章,更不是落款。
數碼簽署了的檔案的完整性是很容易驗證的(不需要騎縫章、騎縫簽章,也不需要筆跡鑑定),而且數碼簽署具有不可抵賴性(即不可否認性),不需要筆跡專家來驗證。
![](http://upload.wikimedia.org/wikipedia/commons/thumb/5/57/Digital_Signature_diagram_zh-tw.svg/640px-Digital_Signature_diagram_zh-tw.svg.png)
歷史
1976年,Whitfield Diffie和Martin Hellman首次描述了數碼簽署體系,他們根據陷門單向排列的功能推測了這種體系的存在。[1][2]不久之後,Ronald Rivest, Adi Shamir和Len Adleman發明了RSA演算法,該演算法可以用來生成原始的數碼簽署(因「普通」的RSA簽章並不安全[3],這僅僅為概念驗證)。1989年,使用了RSA演算法的Lotus Notes 1.0是第一個被廣泛推廣的提供數碼簽署的軟件套件。[4]
在RSA演算法之後,其他數碼簽署方案被很快開發出來——最早的三個分別為Lamport簽章[5]、Merkle簽章(也被稱為「Merkle trees」或「Hash trees」)[6]、和Rabin簽章[7]。
1988年,Shafi Goldwasser、Silvio Micali和Ronald Rivest成為第一個嚴格定義數碼簽署安全要求的人。[8]他們描述了簽章的攻擊模型的階層,還提出了GMR簽章方案——第一種被證明可防止偽造選定訊息的數碼簽署,與現今能被接受的數碼簽署安全定義一致。[8]
使用
用戶可以對其發出的每一封電子郵件進行數碼簽署。這不是指落款或簽名檔(普遍把落款訛誤成簽章)。
在中國大陸,數碼簽署是具法律效力的,正在被普遍使用。2000年,中華人民共和國的新《合同法》首次確認了電子合同、電子簽章的法律效力。2005年4月1日起,中華人民共和國首部《電子簽章法》正式實施。
在台灣,2001年公佈實施《電子簽章法》做為數碼簽署的法源依據及規範,並且製發中華民國自然人證書及工商證書。
每個人都有一對「鑰匙」(數碼身份),其中一個只有本人知道(私鑰),另一個公開的(公鑰)。簽章的時候用私鑰,驗證簽章的時候用公鑰。又因為任何人都可以落款申稱他就是用戶本人,因此公鑰必須向接受者信任的人(身份認證機構)來註冊。註冊後身份認證機構給用戶發一數碼證書。對檔案簽章後,用戶把此數碼證書連同檔案及簽章一起發給接受者,接受者向身份認證機構求證是否真地是用用戶的金鑰簽發的檔案。
訊息發佈者可以使用數碼簽署:訊息發佈的目的是讓人們知道訊息,雖然沒必要對訊息進行加密,但是必須排除有人偽裝訊息發佈者發佈假訊息的風險,這時訊息發佈者就可以使用數碼簽署。而對明文訊息施加的簽章,稱為明文簽章(clearsign)。[9]
軟件的作者可以加上數碼簽署,以便用戶下載後對簽章進行驗證。[10]
認證機構(CA)也可以為用戶的公鑰加上數碼簽署生成證書,以便人們確認用戶公鑰的合法性。[11]
SSL/TLS使用伺服器證書(加上了數碼簽署的伺服器公鑰)認證伺服器身份是否合法。[11]
原理
通常會使用公鑰加密,用私鑰解密。而在數碼簽署中,會使用私鑰加密(相當於生成簽章),公鑰解密(相當於驗證簽章)。[12]
可以直接對訊息進行簽章(即使用私鑰加密,此時加密的目的是為了簽章,而不是保密),驗證者用公鑰正確解密訊息,如果和原訊息一致,則驗證簽章成功。但通常會對訊息的雜湊值簽章,因為通常雜湊值的長度遠小於訊息原文,使得簽章(非對稱加密)的效率大大提高。注意,計算訊息的雜湊值不是數碼簽署的必要步驟。[13]
在實際使用中,我們既想加密訊息,又想簽章,所以要對加密和簽章組合使用,比如TLS就組合了加密和簽名。[14]
數碼簽署應用了公鑰密碼領域使用的單向函數原理。單向函數指的是正向操作非常簡單,而逆向操作非常困難的函數,比如大整數乘法。這種函數往往提供一種難解或懷疑難解的數學問題。目前,公鑰密碼領域具備實用性的三個懷疑難解問題為:質數分解,離散對數和橢圓曲線問題。
數碼簽署就是將公鑰密碼反過來使用。簽章者將訊息用私鑰加密(這是一種反用,因為通常公鑰密碼中私鑰用於解密),然後公佈公鑰;驗證者使用公鑰將加密訊息解密並比對訊息(一般簽章對象為訊息的雜湊值。本節為了講解方便,假設數碼簽署直接將訊息而非雜湊值簽章)。
因此,可靠的公鑰密碼演算法均能構建出可靠的數碼簽署。下面講解為何反用公鑰密碼演算法能夠構建出安全的數碼簽章。
Alice是簽名者,假設她要對訊息A進行簽名。現在, Alice生成了其公私鑰密碼對,公佈該公鑰,然後將訊息用私鑰加密後發佈。
現在,希望Alice的簽名演算法具有如下特性:1,確認訊息在傳輸過程中沒有丟位,沒被篡改(完整性). 2,確認訊息的傳送者是發佈公鑰的Alice(認證). 3,確認Alice的確發佈過該訊息(不可否認性)
實現
數碼簽署演算法是依靠公鑰加密技術來實現的。在公鑰加密技術里,每一個用戶有一對金鑰:一把公鑰和一把私鑰。公鑰可以自由發佈,但私鑰則秘密儲存;還有一個要求就是要讓通過公鑰推算出私鑰的做法不可能實現。
普通的數碼簽署演算法包括三種演算法:
- 一種密碼生成演算法
- 標記演算法
- 驗證演算法
參考文獻
外部連結
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.