1. 程式人生 > >數字簽名RSA簡要原理

數字簽名RSA簡要原理

數字簽名是一種給以電子形式儲存的訊息簽名的方法。通過這種方法簽名之後的訊息可以通過網路傳輸。數字簽名基於非對稱金鑰加密演算法,如DSA/RSA演算法。從公鑰系統可以立即取得的一個好處是解決了金鑰的管理問題,公鑰系統中的一個新成員僅需要一張公開金鑰表的拷貝,並把他選擇的加密金鑰公佈給大家就可以了。而在許多應用中給傳送的訊息附上一個數字簽名的能力,則是公鑰系統更加重要的好處。
數字簽名的原理如圖所示:圖中m表示明文。

                                                  

         傳送者首先用自己的私有金鑰對訊息m進行編碼,產生了中間的密碼電文cl。這一步對m未提供任何保護,只不過印上了傳送者本人所特有的標記而已(因為用的是隻有他本人才知道的屬於他本人解密使用的私有金鑰)。接著再來第二次的加密,這次使用接收者的公開金鑰,以產生密碼電文c2,它可在開放的通訊通道上予以傳送。接收者收到c2後,先使用他的私有金鑰對此訊息解密,這和通常的處理過程是一樣的,但所得到的結果不是m而是c1,所以還得再用傳送者的公開金鑰來解密,這樣就得到了原來的訊息m。

         一般而言,所謂的m不應該是所需傳遞的完整資訊,而只是完整資訊的一個摘要。這裡要涉及到一個MD5數字摘要演算法。MD5數字摘要是目前最流行的一個數字摘要演算法,通過一定的運算,將不等長度的資料加密成一個固定長度的數值,該數值就是此資訊的摘要。數字資訊的摘要再加上公鑰系統,就形成一個完整的數字簽名體系。

         MD5(全稱:message digest algorithm 5)演算法是麻省理工學院(MIT)電腦科學實驗室的R.Rvest於上個世紀90年代提出來的,它被網際網路電子郵件保密協議(PEM)指定為訊息壓縮演算法(Message Digest Agorithm)之一,用於數字簽名前對訊息進行安全的壓縮 (secure hashing)。該演算法可以將任意長度的訊息壓縮為128位元

,然後再進行數字簽名。在最初的幾年裡,MD5被認為是安全的,因為當時還沒有可行的方法在有效的時間內計算出兩個有相同壓縮值的訊息,或在有效時間內計算出某個具有給定壓縮值的訊息。

       MD5的典型應用是對一段Message(字串)產生Fingerprint(指紋),以防止被“篡改”。舉個例子,你將一段話寫在一個叫readme.txt檔案中,並對這個readme.txt產生一個MD5的值並記錄在案,然後你可以傳播這個檔案給別人,別人如果修改了檔案中的任何內容,你對這個檔案重新計算MD5值時就會發現它被修改過。如果再有一個第三方的認證機構,用MD5還可以防止檔案作者的“抵賴”,這就是所謂的數字簽名的應用。


        這個過程中重要的是傳送者的簽名防止了冒充和否認!這是因為在第一步中建立起來的cl是一個用傳送者的私有金鑰編碼的簽名訊息。任何第三方,如果他不知道傳送者的私有金鑰,他就不可能偽造聲稱由傳送者傳送的訊息。如果他使用別的金鑰,則在最後再解密的階段將不能工作。同樣,傳送者也無法在事後否認他傳送了訊息m。因為,一個訊息若能成功地使用傳送者的公開金鑰來譯解,則原來就必然是用傳送者的私有金鑰編碼的。許多公鑰演算法都可以用於數字簽名。實際用得最廣泛的演算法是美國國家技術標準局(NlsT)在1991年提出的數字簽名演算法DSA(Digital signature Algorithm)。

在生成RSA數字簽名和驗證RSA數字簽名的時候為什麼需要生成數字摘要? 因為數字摘要就是MD5! ^_^