如果你的朋友給你傳送了一封郵件,老朋友多日未見說了些寒暄的話,最後你的朋友又來了一句,今天晚上六點我請你到北京飯店吃飯吧,怎麼樣?你可能對這句話比較懷疑,這小子今天頭腦是不是有問題?在看看這封郵件的位址,還真是他的郵件位址,但認識這小子很多年了,從來沒請我吃過飯。今天???一連串的問號在你的頭腦中。如果你對這樣的問題比較感興趣,那麼讓我幫你慢慢的解開謎底吧?
實際上產生這樣的問題,原因很簡單,你朋友發的郵件資訊是很容易被人竊取到的,竊取人竊取到郵件資訊後做適當的修改,然後再傳送給你。你看到的郵件實際上已經是被其他人修改過的郵件了,他可能只是給了你乙個小的惡作劇而已,更大的問題可能在你的生活中就會遇到了。如果是這樣的話,那麼不是太可怕了嗎?其實解決這樣的問題也不難,請跟我看訊息摘要是如何解決以上問題的?
一、訊息摘要
我們可以將我們要傳送的訊息,通過某種數學上的安全雜湊演算法計算出乙個值(這個值後面我們就稱之為訊息摘要)。訊息摘要我們可以把它比喻成指紋,指紋大家都知道每個人都不一樣,甚至乙個人的不同手指也不一樣。這就是說只要我們的訊息不同,那麼通過這種安全雜湊演算法計算出的訊息摘要肯定是不同的,相同的概率是非常低的,到底有多低呢?根據james walsh的敘述,乙個人死於雷擊的概率為三萬分之一,現在你選出9個人,比如你非常討厭的9個人,你和這9個人同時死於雷擊的概率,你想想有多低,所以你忽略不計吧。姑且認為是不太可能重複的(當然,有可能有10個人是同時死於雷擊的,但這10個人不會都是你非常討厭的人吧 )。
md5和sha1都是常見的安全雜湊演算法,當然我們不必關心這些演算法的具體細節,我們只需要知道他們要解決什麼問題就可以了。最好不要再去使用md5演算法,因為這個演算法已經在2023年被山東大學王小雲教授破解。
知道了訊息摘要是什麼,那麼我們到底怎麼解決如上問題呢?我們來看,如果將你朋友要發給你的訊息我們稱之為a,通過安全雜湊演算法計算出的訊息摘要我們稱之為as,然後你的朋友將a和as一起傳送給你。如果竊取者竊取了資訊a,然後將其改為b,再傳送給你。這時你接收到的肯定是訊息b,之後你計算b的訊息摘要我們稱之為bs,現在bs和as的值肯定不一樣,所以你就會知道了,這個訊息b一定是被修改過的訊息,已經非原版了。
訊息摘要看似很簡單就解決了問題,但是你要小心了,如果竊取者在竊取到了訊息a後,將其改為b,如果他還是將訊息摘要as傳送給你的話,那麼這個竊取者就是個十足的笨蛋,他的水平充其量也就是孫老師這樣的水平。他完全可以再重新計算b的訊息摘要,這時我們稱之為bs,然後將b和bs傳送給你。當你收到訊息b後,你再計算b的訊息摘要,那肯定是bs,那你就可以相信這個訊息了嗎?很明顯,非也。那麼我們究竟該怎麼辦呢?答案是借助數字簽名。
二、數字簽名
剛剛我們已經知道了如果訊息改變了,那麼改變後的訊息與原訊息的訊息摘要一定是不同的。我們將訊息和訊息摘要分別傳送,如果訊息摘要沒有被截獲那麼我們還是可以知道訊息是否被更改了,但是如果訊息和訊息摘要都被截獲的話,那麼我們也不會知道訊息是否被篡改了。下面我們看一下數字簽名如何解決這個問題。
為了了解數字簽名的工作原理,我們有必要先了解一下公共金鑰加密技術。公共金鑰加密技術是基於公共金鑰和私有金鑰這兩個概念的。它的設計思想是你可以將公共金鑰告訴世界上的任何人,但是只有你才擁有私有金鑰,最重要的是你一定要保護好你的私有金鑰,不要將它告訴任何人。公共金鑰和私有金鑰是有數學關係的,那你可能會擔心,很多人都知道我的公共金鑰,他們根據公鑰金鑰會不會推斷出我的私有金鑰呢?你的擔心是有道理的,但是你大可放心,幾乎是不可能的?這似乎令人難以相信,但直至今日,還沒有人能夠找到一種能夠通過公共金鑰來推斷私有金鑰的方法。所以在目前看來這種技術是絕對安全的,應該完全去信任它。那麼我們怎麼去使用這兩個金鑰呢?非常簡單,如果訊息用公共金鑰去加密,那麼只能通過私有金鑰去解密。如果訊息用私有金鑰去加密,那麼只能通過公有金鑰去解密。看起來非常簡單,的確它就是這麼簡單。基於這兩句話,公共金鑰加密技術有兩個非常有用的應用:
1、資料加密
如果某人給你傳送資料,他用你的公共金鑰加密資料,那麼這個資料就只有你能夠看得懂,因為只有你才擁有私有金鑰。其他人根本無法解密資料。
2、資料認證
如果你用私有金鑰加密乙個資料,那麼任何持有你公有金鑰的人都可以解密資料,當然這個時候並不是為了保密資料,而是為了證明這個資料是不是你傳送的。你想想看,如果某人用你的公共金鑰解開了資料,他就會知道這個資料一定是你傳送的,因為通過其他人的公共金鑰是不可能解開資料的。
通過上面的介紹你應該知道了公共金鑰加密技術的用途了,那麼怎麼產生公共金鑰和私有金鑰呢?有很多的演算法,其中比較有名的是rsa和dsa。
好了,現在我們就可以通過使用公共金鑰加密技術的數字簽名來徹底解決上面的問題了,我們還是用剛才的字母來舉例
1) 你的朋友通過某種軟體產生一對金鑰(公共金鑰和私有金鑰)。
2)然後你的朋友和你聯絡,將他的公共金鑰告訴你和其他的人。
3)通過產生的私有金鑰對a加密,產生加密資料,這個加密的資料我們就稱之為數字簽名,我們用as表示。
4)你的朋友將a和as傳送給你,如果傳送過程中被竊取了,竊取者將a改為了 b,現在戲劇性的事情發生了,我們來看看這個竊取者怎麼偽造數字簽名?數字簽名是用私有金鑰來加密資料產生的,這個竊取者根本就沒有你朋友的私有金鑰,因為私有金鑰沒有在網路上傳送。如果竊取者也通過乙個軟體產生了一對金鑰,然後用他的私有金鑰對b加密產生了新的簽名bs,然後他將b和bs一起傳送給你。
5)這時我們就能夠完全判斷出這個資料的真偽了。怎麼辦?很簡單,我們用你朋友的公共金鑰去解密資料?結果呢?不能解密?因為這個資料是用竊取者的私有金鑰加密的,要解密當然得使用竊取者的公共金鑰了。
6)如果a和as沒有被竊取,那麼你用你朋友的公共金鑰解密,應該是能夠順利解密的,如果不能解密,那麼資料肯定是已經被修改了。
通過上面的說明大家應該知道,要想安全的傳輸資料,其實也並不是什麼難的事情,所以我們應該大膽的去使用數字簽名。
基於數字簽名的應用還有很多,各種網上銀行使用的數字證書,國家出台的電子簽名等等。如果有機會後面給大家介紹。
from:
公有金鑰 私有金鑰加密
如果你的朋友給你傳送了一封郵件,老朋友多日未見說了些寒暄的話,最後你的朋友又來了一句,今天晚上六點我請你到北京飯店吃飯吧,怎麼樣?你可能對這句話比較懷疑,這小子今天頭腦是不是有問題?在看看這封郵件的位址,還真是他的郵件位址,但認識這小子很多年了,從來沒請我吃過飯。今天?一連串的問號在你的頭腦中。如果...
公有金鑰 私有金鑰加密
如果你的朋友給你傳送了一封郵件,老朋友多日未見說了些寒暄的話,最後你的朋友又來了一句,今天晚上六點我請你到北京飯店吃飯吧,怎麼樣?你可能對這句話比較懷疑,這小子今天頭腦是不是有問題?在看看這封郵件的位址,還真是他的郵件位址,但認識這小子很多年了,從來沒請我吃過飯。今天?一連串的問號在你的頭腦中。如果...
簽名金鑰和加密金鑰
簽名金鑰和加密金鑰 由於公鑰所具有的兩種不同用途,在實際應用中,需要分別配置用於數字簽名 驗證的 金鑰對和用於資料加密 解密的金鑰對,這裡分別稱為簽名金鑰對和加密金鑰對 這兩對密 鑰由於用途不同,因此,對於金鑰的管理也就有著不同的要求 1 簽名金鑰對的管理 簽名金鑰對由簽名私鑰和驗證公鑰組成 簽名私...