1. 程式人生 > >對數字簽名的攻擊

對數字簽名的攻擊

一 中間人攻擊

對數字簽名的中間人攻擊,具體來說就是主動攻擊者Mallory介入傳送者和接收者的中間,對傳送者偽裝成接受者,對接收者偽裝成傳送者,從而能夠在無需破解數字簽名演算法的前提下完成攻擊。

要防止中間人攻擊,就需要確認自己得到的公鑰是否真的屬於自己的通訊物件。例如,我們假設Bob需要確認自己所得到的是否真的是Alice的公鑰,Bob可以給Alice打個電話,問一下自己手上的公鑰是不是真的(如果電話通訊也被Mallory控制,那這個方法就行不通了)。

要在電話中把公鑰的內容都念一遍實在是太難了,這裡有一個簡單的方法,即Alice和Bob分別用單向雜湊函式計算出雜湊值,然後在電話中相互確認雜湊值的內容即可。實際上,涉及公鑰密碼的軟體都可以顯示公鑰的雜湊值,這個雜湊值稱為指紋。指紋的內容就是像下面這樣的一串位元組序列。

二 對單向雜湊函式攻擊

數字簽名中所使用的單向雜湊函式必須具備抗碰撞性,否則攻擊者就可以生成另外一條不同的訊息,是其與簽名繫結的訊息具有相同的雜湊值。

三 利用數字簽名攻擊公鑰密碼

在RSA中,生成簽名的公式是:

簽名 = 訊息的D次方 mod N

這個公式和公鑰密碼的解密操作是等同的,也就是說可以將“請對訊息簽名”這一請求理解為“請解密訊息”。利用這一點,攻擊者可以發動一種巧妙的攻擊,即利用數字簽名來破譯密文。

我們假設現在Alice和Bob正在通訊,主動攻擊者Mallory正在竊聽。Alice用Bob的公鑰加密訊息後傳送給Bob,傳送的密文是用下面公式計算出來的。

密文 = 訊息的E次方 mod N

Mallory竊聽到Alice傳送的密文並將其儲存下來,由於Mallory想要破譯這段訊息,因此它給Bob寫了這樣一封郵件。

Mallory將剛剛竊聽到的密文作為上述郵件的附件一起傳送給Bob,即:

附件資料 = 密文

Bob看到了Mallory的郵件,發現附件中的資料的確只是隨機資料(但其實這是Alice用Bob的公鑰加密的密文)。

於是Bob對附件資料進行簽名

簽名= 附件資料 的D次方 mod N

       = 密文的D次方 mod N

       = 訊息

Bob的本意是對隨機的附件資料施加數字簽名,但結果卻無意中解密了密文。如果不小心將上述簽名的內容(=訊息)傳送給Mallory,那麼Mallory不費吹灰之力就可以破譯密文了。這種誘使接收者本人來解密的方法實在是非常大膽。

對於這樣的攻擊,我們應該採取怎樣的對策呢?首先,不要直接對訊息進行簽名,對雜湊值進行簽名比較安全;其實,公鑰密碼和數字簽名最好分別使用不同的金鑰對。

然而,最重要的是絕對不要對意思不清楚的訊息進行簽名,尤其是對看起來只是隨機資料的訊息進行簽名。從簽名的目的來說,這一點應該是理所當然的,因為誰都不會在自己看不懂的合同上簽字蓋章的。