數字簽名與數字證書技術的簡單介紹(二)

2021-12-30 05:29:34 字數 1716 閱讀 3476

現在我們可以繼續我們的場景:

假設有一天,alice收到了乙份署名為bob的檔案。alice希望能夠確認這份檔案一定是來自bob;另外alice希望能夠確信,這份檔案在傳輸過程中並沒有被它人篡改。那麼基於非對稱金鑰演算法我們應該怎麼做?

確認檔案一定來自於bob,其實就是bob無法否認自己傳送過這份檔案。資訊保安中稱作不可抵賴性;另一方面,確信檔案並沒有中途被篡改,則稱作不可篡改性。

在非對稱金鑰演算法中提到,公鑰加密的內容使用私鑰可以解密。同樣的,基於私鑰加密的內容使用公鑰也可以解密,兩者一一對應。因此我們可以很容易想到。如果bob利用自己手裡的私鑰對檔案進行加密後,傳輸給alice。alice再通過公鑰庫中bob的公鑰進行解密,則可以證明檔案一定是由bob發出(由於只有bob持有私鑰)。另外,因為傳輸的是密文,如果能夠使用公鑰解密,同時也證明了檔案並沒有中途被篡改。這樣的做法其實已經同時滿足了不可抵賴性和不可篡改性。

然而,由於傳輸的檔案可能很大,為了證明檔案的不可抵賴性和不可篡改性,需要對整個檔案進行加密,由於非對稱演算法效率較低,這樣做的代價太大。因此常規的做法是用到資訊摘要和數字簽名的方式。

所謂資訊摘要,其實就是某種hash演算法。將資訊明文轉化為固定長度的字元,它具有如下特點:

①無論輸入的訊息有多長,計算出來的訊息摘要的長度總是固定的;

②用相同的摘要演算法對相同的訊息求兩次摘要,其結果必然相同;

③一般地,只要輸入的訊息不同,對其進行摘要以後產生的摘要訊息也幾乎不可能相同;

④訊息摘要函式是單向函式,即只能進行正向的資訊摘要,而無法從摘要中恢復出任何的訊息;

⑤好的摘要演算法,沒有人能從中找到「碰撞」,雖然「碰撞」是肯定存在的。即對於給定的乙個摘要,不可能找到一條資訊使其摘要正好是給定的。或者說,無法找到兩條訊息,是它們的摘要相同。

一般的,我們將資訊的摘要也稱作資訊的指紋。如同指紋的含義,相同的資訊一定會得相同的指紋,而僅通過指紋又無法還原出原始資訊。目前主要的摘要演算法有md5和sha1。

當有了資訊摘要技術以後,基於bob向alice傳送檔案的場景,我們可以進行如下的操作:

第一步:

① bob將原始的資訊進行一次資訊摘要演算法,得到原始資訊的摘要值;

② bob使用自己的私鑰,對該摘要值進行加密。得到資訊摘要的密文;

③ bob將原始檔案和摘要值的密文一起傳送給alice。

④ 一般的,我們將原始檔案和摘要密文稱作bob對原始檔案的簽名結果。

第二步:

① 當alice接收到bob傳輸的資訊(原始檔案,資訊摘要密文)後,使用bob的公鑰將摘要密文解密,得到資訊摘要明文;

② 使用資訊摘要演算法,取原文的摘要資訊,獲取原始檔案摘要資訊;

③ alice比較解密後的摘要資訊和取得的摘要資訊。如果相同,則可以證明檔案一定由bob傳送,並且中途並沒有經過任何篡改。一般將這個過程稱作驗籤。

所謂數字簽名,就是對原始檔案的「指紋」進行了私鑰加密。這樣,即可保證檔案的特徵(摘要值)一定經過了私鑰的加密。同時由於資訊摘要的長度普遍不長(md5為128位,sha1主要為256位),也並沒有帶來太大的開銷。

如同對稱金鑰演算法,在大部分開發語言中,基於非對稱演算法的數字簽名,數字加密演算法。也都進行了一定的封裝。如下鏈結就比較詳細的描述了基於jce如何實現數字簽名、加密、驗證

數字簽名與數字證書

數字簽名 將 報文按雙方約定的hash 演算法計算得到乙個固定位數的 報文摘要。在 數學上保證 只要改動報文中任何一位,重新計算出的 報文摘要值就會與原先的值不相符。這樣就保證了報文的不可更改性。將該報文摘要值用傳送者的私人 金鑰加密,然後連同原報文一起傳送給接收者,而產生的報文即稱 數字簽名 數字...

數字簽名與數字證書

數字簽名 將 報文按雙方約定的hash 演算法計算得到乙個固定位數的 報文摘要。在 數學上保證 只要改動報文中任何一位,重新計算出的 報文摘要值就會與原先的值不相符。這樣就保證了報文的不可更改性。將該報文摘要值用傳送者的私人 金鑰加密 然後連同原報文一起傳送給接收者,而產生的報文即稱 數字簽名 數字...

數字簽名與數字證書

數字簽名 將 報文按雙方約定的hash 演算法計算得到乙個固定位數的 報文摘要。在 數學上保證 只要改動報文中任何一位,重新計算出的 報文摘要值就會與原先的值不相符。這樣就保證了報文的不可更改性。將該報文摘要值用傳送者的私人 金鑰加密,然後連同原報文一起傳送給接收者,而產生的報文即稱 數字簽名 數字...