數位簽章(英語:Digital Signature,又稱公鑰數位簽章)是一種功能類似寫在上的普通簽名、但是使用了公鑰加密領域的技術,以用於鑑別數字訊息的方法。一套數字簽名通常會定義兩種互補的運算,一個用於簽名,另一個用於驗證。法律用語中的電子簽章與數位簽章代表之意義並不相同。電子簽章指的是依附於電子文件並與其相關連,用以辨識及確認電子文件簽署人身分、資格及電子文件真偽者;數位簽章則是以數學演算法或其他方式運算對其加密而形成的電子簽章。意即並非所有的電子簽章都是數位簽章。

數字簽名不是指將簽名掃描成數字圖像,或者用觸摸板獲取的簽名,更不是落款

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

簡單的數字簽名原理

歷史

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]

使用

使用者可以對其發出的每一封電子郵件進行數字簽名。這不是指落款或簽名檔英語Signature block(普遍把落款訛誤成簽名)。

中國大陸,數字簽名是具法律效力的,正在被普遍使用。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的確發布過該消息(不可否認性)

實現

數字簽名算法是依靠公鑰加密技術來實現的。在公鑰加密技術里,每一個使用者有一對密鑰:一把公鑰和一把私鑰。公鑰可以自由發布,但私鑰則秘密保存;還有一個要求就是要讓通過公鑰推算出私鑰的做法不可能實現。

普通的數字簽名算法包括三種算法:

  • 一種密碼生成算法
  • 標記算法
  • 驗證算法

RSAECDSA等算法可以實現數字簽名。[15]常用的密碼雜湊函數SHA家族

參考文獻

外部連結

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.