lauren: 我思考了一下,採用訊息認證碼的手套訂單還是有問題。客戶生成訂單,計算hash值,並且給hash值加密。這樣防止了篡改和別人偽造,但是因為密碼是在工廠與客戶之間共享的。客戶和工廠都有生成一模一樣訂單的能力。客戶否認說我沒有發過這個訂單,是工廠自己偽造的訂單。技術上來講,訊息認證碼沒有辦法防止否認。
haorui: 正確,我們在講對稱加密演算法的時候說過,萬一金鑰洩露,通訊雙方都有嫌疑。
lauren: 應該有乙個唯一性的東西,也就是說,能夠證明只有其唯一身份的東西,就像現實社會中的簽名,一旦乙個檔案有某個人的簽名,他就沒有辦法否認這個事情。
haorui: 想起乙個故事,明朝的時候,有位地方**舉報一位**。但是不巧的是,**的奏章被**的同黨給截獲了。
lauren: 我猜**會夥同同黨把奏章銷毀掉。
haorui: 事情並沒有那麼簡單,很多**都知道有這麼乙個奏章存在,只是對內容情況不清楚。
lauren: 那就更改奏章,把原來的奏章銷毀,再偽造一封。
haorui: 這個更難了,這位地方**是相當有名的書法家,他的書法被稱之為------「王氏書法」,他的書法造詣上舉世無雙,偽造他的奏章一眼就被識破。他的筆跡就是最好的簽名。
lauren: 呵呵,因為他的書法「舉世無雙」。他的字跡具備唯一性,見字如見人。可以用來作身份識別。
haorui: 對了。在現代計算機密碼學中,也要解決身份識別的問題。我們學的東西中,什麼具備唯一性呢?
lauren: 只有非對稱密碼系統中的私鑰是唯一的。
haorui: 正確,如果我們把訊息認證碼中的對稱加密換成非對稱加密碼,如何?
lauren: 不行,非對稱密碼演算法用公鑰加密,私鑰解密。而公鑰是可以被公開的,也就是說,可以被多人知道,因此,沒有辦法作身份鑑別。
haorui: 我的意思是倒過來用,即,用私鑰加密,用公鑰解密。
lauren: interesting!私鑰是唯一的,只要用對應的公鑰能解密的檔案,必然說明這個檔案一定是私鑰擁有者加過密的。也就是說,只有看到「王氏書法」就可以推斷這個奏章出去王姓的地方**。
haorui: 這個就是我們今天要講的數字簽名,hash演算法+非對稱加密演算法。注意與非對稱加密演算法不同的是,它用私鑰加密,用公鑰解密。更專業的說法是,用私鑰簽名,用公鑰進行驗證簽名,見圖9-1。
我們再看看具體的流程,與訊息認證碼的流程相相似。見圖9.2:
- 首先,客戶共享公鑰給工廠,私鑰自己保密。
- 客戶生成訂單,計算hash值並用自己的私鑰加密得到簽名,然後將訂單與簽名一起發給工廠。
- 工廠對訂單計算hash值並與通過對接收到的簽名解密得到的hash值對比。
- 兩個hash值相同,則證明訂單發自特定的乙個合法的客戶。
lauren: 數字簽名最大的特性就是利用了私鑰的私密性,所以私鑰一定要保護好。
haorui: 數字簽名使用的私鑰類似於你企業的公章,簽名相當於蓋章。與真實的簽名一樣受法律保護,有相關的立法支援。
lauren: 數字簽名有有效期嗎?
密碼學 什麼是數字簽名
1 場景 傳送方 a 需要給 b 傳送一條訊息,為了保證資料的完整性,a 在訊息的後面新增該訊息的 hash 值。問題 由於訊息是明文的,中間人可以截獲該訊息並生成新訊息的 hash 發給 b。為了解決上述問題,有如下方案 1 這條訊息用 a 和 b 共享的金鑰進行對稱加密。2 hash 值用 a ...
公鑰密碼學 數字簽名與數字證書
a 建立一對公鑰 私鑰對,私鑰自己儲存,公鑰給其他人 例如 b,c,d 公鑰和私鑰都能用於加密和解密。b 給 a 傳送資訊時用 a 的公鑰加密,a 收到之後用私鑰解密。反之,a 給 b 傳送資訊時,用私鑰加密,b 收到之後用 a 的公鑰解密。在上述場景中,非對稱金鑰的作用是加密。參考 公開金鑰加密 ...
密碼學系列 數字簽名
什麼是數字簽名呢?數字簽名其實是訊息摘要和非對稱加密的一起應用。數字簽名是怎麼來的呢?在非對稱加解密中,公鑰方對私鑰方傳送訊息,只需要公鑰方用公鑰加密即可,因為私鑰只有一人持有。那麼私鑰方給公鑰方傳送資料是否可以用私鑰傳送即可呢?當然可以的啊。但是又乙個問題就是私鑰加密後,所有的公鑰都可以解開,那麼...