數位簽章是一種利用密碼學技術模擬傳統手寫簽名的機制,用於確保數位訊息的真實性、完整性及不可否認性。在數位化時代,Digital Signature
廣泛應用於電子合約、電子郵件及網路交易,具備與傳統簽名相同的法律效力。
數位簽章需滿足3條件:
- 真實性:接收端能透過發送端的公開鑰匙驗證其身份,確認訊息來源。
- 不可否認性:發送端無法否認曾發送訊息,因簽章由其私鑰生成。
- 防偽造性:接收端無法偽造有效的數位簽章,保護發送端的訊息完整性。
運作流程
目前主流的Digital Signature
是非對稱加密簽章,也稱公共鍵值簽章,運作分為簽署和驗證兩個階段,以下是詳細步驟:
步驟 1:生成訊息摘要(發送端)
- 發送者對要簽署的訊息(例如一份文件、一段文字)使用單向雜湊函數(如 SHA-256)計算一個
message digest
。 message digest
是一個固定長度的字串(例如 SHA-256 產生 256 位元/64 字元的摘要),代表訊息的「指紋」。- 目的:縮短訊息長度(簽署長訊息效率低),並確保任何改動都會導致摘要完全不同。
- 範例:
- 訊息:”轉帳1000元給帳戶12345″
- 雜湊函數:SHA-256
- 訊息摘要:5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
步驟 2:簽署訊息摘要(發送端)
- 發送者用自己的
Private Key
對message digest
進行加密,生成Digital Signature
。 - 加密過程使用非對稱加密演算法(如 RSA、DSA、ECDSA)。
Digital Signature
是獨一無二的,只有持有Private Key
的人才能生成。- 範例:
- 使用 RSA 私密金鑰加密摘要 5e884898…,生成簽章:xyz789abc…(假設值,實際為一串密文)。
- 結果:發送者得到原始訊息和
Digital Signature
。
步驟 3:發送訊息與簽章
- 發送者將原始訊息和
Digital Signature
一起傳送給接收者。 - 注意:訊息本身可以是明文(不加密),因為
Digital Signature
已提供真實性和完整性保護。若需保密,可額外用接收者的公開金鑰加密訊息。
步驟 4:驗證簽章(接收端)
- 接收者執行以下操作來驗證簽章:
- 解密簽章:
- 用發送者的
Public Key
解密收到的Digital Signature
,得到原始的message digest
。 - 例如:用 RSA 公開金鑰解密 xyz789abc…,還原摘要 5e884898…。
- 用發送者的
- 重新計算訊息摘要:
- 對收到的原始訊息(”轉帳1000元給帳戶12345″)使用相同的雜湊函數(SHA-256)重新計算
message digest
。 - 結果:5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8。
- 對收到的原始訊息(”轉帳1000元給帳戶12345″)使用相同的雜湊函數(SHA-256)重新計算
- 比對摘要:
- 比較解密的
message digest
(從簽章得到)和重新計算的message digest
:- 一致:證明訊息未被篡改(完整性),且來自持有私密金鑰的發送者(真實性)。
- 不一致:訊息可能被改動或簽章無效。
- 比較解密的
- 解密簽章:
數位簽章常見技術
- 非對稱加密簽章(公共鍵值簽章):
- RSA:業界標準演算法,廣泛應用於 SSL/TLS、電子郵件簽署等。現代要求金鑰長度至少 2048 位元。
- DSS(數位簽章標準):1991 年 NIST 提出,採用 DSA(數位簽章演算法)結合 SHA-1 或 SHA-256。金鑰長度建議 2048 位元以上。
- 運作流程:發送者用私鑰簽署訊息摘要,接收者用公開鑰匙驗證。
- 訊息摘要生成:
- 使用單向雜湊函數(如 SHA-256、SHA-3)將訊息轉為固定長度的訊息摘要,確保訊息完整性。
- 注意:MD5 和 SHA-1 已不安全,不建議用於新系統。
- 範例:對文件計算 SHA-256 摘要,然後用私鑰簽署。
- 對稱鍵簽章(較少見):
- 透過可信任的第三方機構(CA),使用者和機構共享秘密金鑰生成簽章。
- 缺點:第三方可讀取訊息,需高度信任機構;實務中多用於 MAC 而非數位簽章。
- 特殊數位簽章:
- 例如,不可否認簽章,盲目簽章,代理簽章
undeniable signature(不可否認簽章)
Chaum & Antwerpen於1989年所提出,驗證簽章時需要原簽署者參與
blind signature(盲目簽章)
Chaum於1982年所提出的方法
Signer用Private Key加密後再交由User使用,而當這些Message收回後,Signer僅可知道這些Message是由自己發出,而無法確定User是誰。
特色是unlinkable,也就是說Signer並無法明確的知道使用者的行蹤,因此可以確保使用者的隱密性。
可以運用在Electric Voting(不記名投票),Digital Cash(商家不必和銀行連線,僅需依據儲值而予以交易),犯罪通報系統等。
同時,由於Blind Signature可以是off-line的,因此雖不能降低Server端的load,卻也對Client端的負荷有所助益。
因Blind Signature是untraceable,故若是被歹徒用在不好的方面,如洗錢,或者是負贖金,可能會導致這些錢的來源無法確定,而使得檢查機關無線索可循。因此想要有隱私和安全並存,就必須要有類似認證的機關來負責雙方的交易。
盲簽章的種類:
門檻式盲簽章
應用群體導向簽章觀念所設計的盲簽章
局部盲簽章
簽章者在簽章中加入一些訊息c,如時戳,而c是不可偽造的
簽章者產生S(x, c, B(m, r))
欲得簽章者計算得最後之簽章S(x, c, m)
公平盲簽章
加入一個公證人負責追蹤有問題的簽章
proxy signature(代理簽章):
Mambo,Usuda,&Okamoto,於1996年提出
參與角色包含original signer(原始簽署者)、proxy signer(代理簽署者)與驗證者,代理簽署者在原始簽署者的授權下,可以代表原始簽署者執行簽署任務。授權可區分三種類型:
full delegation(完全授權):代理簽署者握有與原始簽署者相同的私鑰,其產生的代理簽章與原始簽署者的簽章相同。
partial delegation(部份授權):代理簽署者所持有的私鑰是由原始簽署者依自己的私鑰計算而得,代理簽署者的私鑰並不可以推導出原始簽署者的私鑰,故代理簽署者與原始簽署者所簽署的簽章是有所不同。此類簽章又區分成兩種類型:
proxy-unprotected(無保護代理的代理簽章)除原始簽署者及代理簽署者以外,無任何第三者可以產生出代理簽署者的有效代理簽章
proxy-protected(保護代理的代理簽章)只有代理簽署者能產生出自己的有效代理簽章。
delegation by warrant(授權書授權):由原始簽署者簽署一份授權書以證明該代理簽署者確實是在原始簽署者的授權之下執行簽署工作。