發信站:BBS水木清華站(FriNov1020:24:102000)
引用請指明原作/譯者fordesign@21cn.com
一加密算法的一些常識
要理解ssl先要知道一些加密算法的常識.
加密算法很容易理解啦,就是把明文變成人家看不懂的東西,然后送給自己想要的送到的地方,接收方用配套的解密算法又把密文解開成明文,這樣就不怕在路世上如果密文給人家截獲而泄密。
加密算法有倆大類,第一種是不基于KEY的,舉個簡單的例子,我要加密"fordesign"這么一串字符,就把每個字符都變成它的后一個字符,那么就是"gpseftjhm"了,這樣的東西人家當然看不明白,接收方用相反的方法就可以得到原文。當然這只是個例子,現在應該沒人用這么搞笑的加密算法了吧。
不基于KEY的加密算法好象一直用到了計算機出現。我記得古中國軍事機密都是用這種方式加密的。打戰的時候好象軍隊那些電報員也要帶著密碼本,也應該是用這種方式加密的。這種算法的安全性以保持算法的保密為前提。
這種加密算法的缺點太明顯了,就是一旦你的加密算法給人家知道,就肯定掛。日本中途島慘敗好象就是密碼給老米破了。設計一種算法是很麻煩的,一旦給人破了就沒用了,這也忑浪費。
我們現在使用的加密算法一般是基于key的,也就是說在加密過程中需要一個key,用這個key來對明文進行加密。這樣的算法即使一次被破,下次改個key,還可以繼續用。
key是一個什么東西呢?隨便你,可以是一個隨機產生的數字,或者一個單詞,啥都行,只要你用的算法認為你選來做key的那玩意合法就行。
這樣的算法最重要的是:其安全性取決于key,一般來說取決于key的長度。也就是說應該保證人家在知道這個算法而不知道key的情況下,破解也相當困難。其實現在常用的基于KEY的加密算法在網絡上都可以找到,很多革命同志(都是老外)都在想辦法破解基于key的加密算法又包括倆類:對稱加密和不對稱加密。對稱加密指的是雙方使用完全相同的key,最常見的是DES.DES3,RC4等。對稱加密算法的原理很容易理解,通信一方用KEK加密明文,另一方收到之后用同樣的KEY來解密就可以得到明文。
不對稱加密指雙方用不同的KEY加密和解密明文,通信雙方都要有自己的公共密鑰和私有密鑰。舉個例子比較容易理解,我們們假設通信雙方分別是A,B.
A,擁有KEY_A1,KEY_A2,其中KEY_A1是A的私有密鑰,KEY_A2是A的公共密鑰。
B,擁有KEY_B1,KEY_B2,其中KEY_B1是B的私有密鑰,KEY_B2是B的公共密鑰。
公共密鑰和私有密鑰的特點是,經過其中任何一把加密過的明文,只能用另外一把才能夠解開。也就是說經過KEY_A1加密過的明文,只有KEY_A2才能夠解密,反之亦然。
通信過程如下:
A-------->;KEY_A2------------>;B
A<--------KEY_B2<------------A
這個過程叫做公共密鑰交換,老外管這叫keyexchange.之后A和B就分別用對方的公共密鑰加密,用自己的私有密鑰解密。
一般公共密鑰是要發布出去的,然后你通過自己的私有密鑰加密明文,人家用你的公共密鑰解密,如果能解開,那么說明你是加密人,這就是SSL使用的驗證機制。
常用的不對稱加密一般有RSA,DSA,DH等。我們一般使用RSA.
數字簽名也是不對稱加密算法的一個重要應用,理解它對于理解SSL很重要的,放在這里一起介紹一下。
簽名是什么大家都很熟悉吧?證明該東西是你寫的,是你發布的,你就用簽名搞定。看看那些重要文件都要頭頭簽名。數字簽名就是數字化的簽名了。記得公用密鑰和私有密鑰的特征嗎?只有你一個人有你自己的私有密鑰。而你的公用密鑰是其他人都知道的了。那么你在寫完一封郵件之后,用自己的私有密鑰加密自己的名字,接收人用你的公共密鑰解開一看,哦,是你發的。這就是你的數字簽名過程了。
上面的解釋是很簡化的了,其實數字簽名比這個復雜多了,但我們沒有了解的必要,知道數字簽名是這么一回事就可以了。
還有一種我們需要知道的加密算法,其實我不覺得那是加密算法,應該叫哈希算法,英文是messagedigest,是用來把任何長度的一串明文以一定規則變成固定長度的一串字符串。它在SSL中的作用也很重要,以后會慢慢提及的。一般使用的是MD5,SHA.
base64不是加密算法,但也是SSL經常使用的一種算法,它是編碼方式,用來把asc碼和二進制碼轉來轉去的。
具體的加密解密過程我們不需要了解,因為SSL根本不關心。但了解加密算法的一些基本原理是必要的,否則很難理解SSL。
對加密算法的細節有興趣的同志,可以去網絡上找這些加密算法的原理的文章和實現的程序來研究,不過先學數論吧。
posted on 2009-11-27 17:29
零全零美 閱讀(268)
評論(0) 編輯 收藏 所屬分類:
安全相關