如今我們能夠繼續我們的場景:
如果有一天。alice
收到了乙份署名為
bob的檔案。
alice
希望可以確認這份檔案一定是來自
bob;另外
alice
希望可以確信。這份檔案在傳輸過程中並沒有被它人篡改。那麼基於非對稱金鑰演算法我們應該怎麼做?
確認檔案一定來自於bob
,事實上就是
bob無法否認自己傳送過這份檔案。資訊保安中稱作不可抵賴性。還有一方面,確信檔案並沒有中途被篡改,則稱作不可篡改性。
在非對稱金鑰演算法中提到,公鑰加密的內容使用私鑰能夠解密。相同的,基於私鑰加密的內容使用公鑰也能夠解密,兩者一一相應。
因此我們能夠非常easy想到。假設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
怎樣實現數字簽名、加密、驗證等:
數字簽名和數字證書
到底什麼是 數字簽名 digital signature 和 數字證書 digital certificate 對這些問題的理解,一直模模糊糊,很多細節搞不清楚。今天,讀完一篇 通俗易懂的文章後,思路豁然開朗。為了加深記憶,這篇文章的翻譯版記錄如下。1.鮑勃有兩把鑰匙,一把是公鑰,另一把是私鑰。2....
數字簽名和數字證書
其實數字簽名的概念很簡單。大家知道,要確保可靠通訊,必須要解決兩個問題 首先,要確定訊息的 確實是其申明的那個人 其次,要保證資訊在傳遞的過程中不被第三方篡改,即使被篡改了,也可以發覺出來。所謂數字簽名,就是為了解決這兩個問題而產生的,它是對前面提到的非對稱加密技術 與數字摘要 技術的乙個具體的應用...
數字簽名和數字證書
英文 為 到底什麼是 數字簽名 digital signature 和 數字證書 digital certificate 對這些問題的理解,一直模模糊糊,很多細節搞不清楚。今天,讀完一篇 通俗易懂的文章後,思路豁然開朗。為了加深記憶,這篇文章的翻譯版記錄如下。1.鮑勃有兩把鑰匙,一把是公鑰,另一把是...