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