
最簡單的數字簽名是發送方將整個消息用自己的私鑰加密,接收方用發送方的公鑰解密,解密成功就可驗證簽名的確是發送方。但這種方法存在缺陷,即被簽名的文件或消息可能很長。由於公鑰加密運算速度慢,如果將整個文件都用私鑰加密,則會非常耗時。因此,通常先對消息用散列函數求消息摘要,然後發送方用其私鑰加密該消息摘要,這個被發送方私鑰加密的消息摘要就是發送方的數字簽名,並附在文件後,一起發送給接收方就可以驗證簽名了。
接收方在驗證簽名時,先用發送方的公鑰解密數字簽名,然後將提取到的消息摘要與自已計算的消息摘要相比較,如果相同就表明該簽名是有效的。由於改後消息的消息摘要和該消息的消息摘要是不同的,接收方能顺利获得驗證簽名發現。這樣攻擊者雖然能截獲並閱讀明文消息,但不能將消息篡改。數字簽名的基本過程如下圖所示。

上圖的數字簽名方案雖然解決了公鑰密碼體制加密長消息速度慢的問題,但又產生了一個新的問題,即消息以明文形式傳輸,無法實現消息的保密性。如果對消息有保密性要求,則可以不直接發送明文和數字簽名,而是將明文和數字簽名的組合體用一個對稱密鑰加密,再將加密後的組合體以及對稱密鑰的數字信封發送給接收方。這種方式是將數字簽名與數字信封技術結合在一起,實現了帶有保密性要求的數字簽名。
使用公鑰密碼體製作為數字簽名,則無法同時實現保密性;反之,如果作為加解密使用,則無法同時實現簽名。如果使用公鑰密碼體制同時實現數字簽名和加密,則需要使用兩次公鑰密碼算法,一次用於加密,另一次用於簽名。因此帶有保密性的數字簽名需要兩對公鑰/私鑰才能實現,一對是發送方的,另一對是接收方的。
