基礎(chǔ)知識(shí)
對(duì)稱加密與非對(duì)稱加密
概述
在現(xiàn)代密碼學(xué)誕生以前柿估,就已經(jīng)有很多的加密方法了川慌。例如驹饺,最古老的斯巴達(dá)加密棒,廣泛應(yīng)用于公元前7世紀(jì)的古希臘最仑。16世紀(jì)意大利數(shù)學(xué)家卡爾達(dá)諾發(fā)明的柵格密碼藐俺,基于單表代換的凱撒密碼、豬圈密碼泥彤,基于多表代換的維吉尼亞密碼欲芹,二戰(zhàn)中德軍廣泛使用的恩格瑪加密機(jī)….但最終都找到了有效的破解算法。
現(xiàn)代密碼學(xué)的誕生標(biāo)志是1977年1月由美國(guó)國(guó)家標(biāo)準(zhǔn)局公布的數(shù)據(jù)加密標(biāo)準(zhǔn)(Data Encryption Standard吟吝,DES)菱父。
在經(jīng)過20多年之后,為適應(yīng)現(xiàn)代的安全要求剑逃,2000年美國(guó)國(guó)家和標(biāo)準(zhǔn)技術(shù)協(xié)會(huì)篩選和評(píng)測(cè)出了被稱為AES(Advanced Encryption Standard)的加密算法作為新的加密標(biāo)準(zhǔn)浙宜。目前,AES已被廣泛使用蛹磺,且未發(fā)現(xiàn)致命缺陷粟瞬。到目前為止,AES是一個(gè)安全的加密算法萤捆。
然而亩钟,在加密算法之外,面臨一個(gè)問題鳖轰,那就是:秘鑰的分發(fā)。就是說扶镀,解密方如何獲得加密方的秘鑰呢蕴侣? 從而出現(xiàn)了:對(duì)稱加密和非對(duì)稱加密。
對(duì)稱加密
對(duì)稱加密指的就是加密和解密使用同一個(gè)秘鑰臭觉,所以叫做對(duì)稱加密昆雀。對(duì)稱加密只有一個(gè)秘鑰辱志,作為私鑰。
常見的對(duì)稱加密算法:DES狞膘,AES揩懒,3DES等等。
非對(duì)稱加密
非對(duì)稱加密指的是:加密和解密使用不同的秘鑰挽封,一把作為公開的公鑰已球,另一把作為私鑰。公鑰加密的信息辅愿,只有私鑰才能解密智亮。私鑰加密的信息,只有公鑰才能解密点待。
常見的非對(duì)稱加密算法:RSA阔蛉,ECC
區(qū)別
對(duì)稱加密算法相比非對(duì)稱加密算法來說,加解密的效率要高得多癞埠。但是缺陷在于對(duì)于秘鑰的管理上状原,以及在非安全信道中通訊時(shí)克懊,密鑰交換的安全性不能保障劣摇。所以在實(shí)際的網(wǎng)絡(luò)環(huán)境中缩挑,會(huì)將兩者混合使用.
數(shù)字摘要
數(shù)字摘要是將任意長(zhǎng)度的消息變成固定長(zhǎng)度的短消息护侮,它類似于一個(gè)自變量是消息的函數(shù)巧勤,也就是Hash函數(shù)腊凶。數(shù)字摘要就是采用單向Hash函數(shù)將需要加密的明文“摘要”成一串固定長(zhǎng)度(128位)的密文這一串密文又稱為數(shù)字指紋涨共,它有固定的長(zhǎng)度庐椒,而且不同的明文摘要成密文测暗,其結(jié)果總是不同的央串,而同樣的明文其摘要必定一致。
數(shù)字簽名
1.鮑勃有兩把鑰匙碗啄,一把是公鑰质和,另一把是私鑰。
鮑勃把公鑰送給他的朋友們----帕蒂稚字、道格饲宿、蘇珊----每人一把。
3.
蘇珊要給鮑勃寫一封保密的信胆描。她寫完后用鮑勃的公鑰加密瘫想,就可以達(dá)到保密的效果。
鮑勃收信后昌讲,用私鑰解密国夜,就看到了信件內(nèi)容。這里要強(qiáng)調(diào)的是短绸,只要鮑勃的私鑰不泄露车吹,這封信就是安全的筹裕,即使落在別人手里,也無法解密窄驹。
5.
鮑勃給蘇珊回信朝卒,決定采用"數(shù)字簽名"。他寫完后先用Hash函數(shù)乐埠,生成信件的摘要(digest)抗斤。
6.
然后,鮑勃使用私鑰饮戳,對(duì)這個(gè)摘要加密豪治,生成"數(shù)字簽名"(signature)。
7.
鮑勃將這個(gè)簽名扯罐,附在信件下面负拟,一起發(fā)給蘇珊。
8.
蘇珊收信后歹河,取下數(shù)字簽名掩浙,用鮑勃的公鑰解密,得到信件的摘要秸歧。由此證明厨姚,這封信確實(shí)是鮑勃發(fā)出的。
9.
蘇珊再對(duì)信件本身使用Hash函數(shù)键菱,將得到的結(jié)果谬墙,與上一步得到的摘要進(jìn)行對(duì)比。如果兩者一致经备,就證明這封信未被修改過拭抬。
10.
復(fù)雜的情況出現(xiàn)了。道格想欺騙蘇珊侵蒙,他偷偷使用了蘇珊的電腦造虎,用自己的公鑰換走了鮑勃的公鑰。此時(shí)纷闺,蘇珊實(shí)際擁有的是道格的公鑰算凿,但是還以為這是鮑勃的公鑰。因此犁功,道格就可以冒充鮑勃氓轰,用自己的私鑰做成"數(shù)字簽名",寫信給蘇珊浸卦,讓蘇珊用假的鮑勃公鑰進(jìn)行解密戒努。
11.
后來,蘇珊感覺不對(duì)勁,發(fā)現(xiàn)自己無法確定公鑰是否真的屬于鮑勃储玫。她想到了一個(gè)辦法,要求鮑勃去找"證書中心"(certificate authority萤皂,簡(jiǎn)稱CA)撒穷,為公鑰做認(rèn)證。證書中心用自己的私鑰裆熙,對(duì)鮑勃的公鑰和一些相關(guān)信息一起加密端礼,生成"數(shù)字證書"(Digital Certificate)。
12.
鮑勃拿到數(shù)字證書以后入录,就可以放心了蛤奥。以后再給蘇珊寫信,只要在簽名的同時(shí)僚稿,再附上數(shù)字證書就行了凡桥。
13.
蘇珊收信后,用CA的公鑰解開數(shù)字證書蚀同,就可以拿到鮑勃真實(shí)的公鑰了缅刽,然后就能證明"數(shù)字簽名"是否真的是鮑勃簽的。
C/S模型
主要原理分為兩部分:
- 第一步是客戶端驗(yàn)證并獲取服務(wù)器公鑰蠢络,然后客戶端生成對(duì)稱加密的私鑰發(fā)送給服務(wù)器衰猛。
- 第二步就是服務(wù)器和客戶端通過對(duì)稱加密的私鑰對(duì)通訊內(nèi)容進(jìn)行加解密。
詳細(xì)步驟:
- 首先刹孔,客戶端(瀏覽器)向服務(wù)器發(fā)出加密請(qǐng)求啡省。
- 服務(wù)端預(yù)先計(jì)算出一對(duì)秘鑰pub/pri。將私鑰保密髓霞,將公鑰公開卦睹。
- 服務(wù)器會(huì)將自己的公鑰用CA證書的私鑰加密,然后將數(shù)字證書發(fā)送給客戶端酸茴。
- 客戶端(瀏覽器)的"證書管理器"分预,有"受信任的根證書頒發(fā)機(jī)構(gòu)"列表⌒胶矗客戶端會(huì)根據(jù)這張列表笼痹,查看解開數(shù)字證書的公鑰是否在列表之內(nèi)。
- 如果數(shù)字證書記載的網(wǎng)址酪穿,與你正在瀏覽的網(wǎng)址不一致凳干,就說明這張證書可能被冒用,瀏覽器會(huì)發(fā)出警告被济。
- 如果這張數(shù)字證書不是由受信任的機(jī)構(gòu)頒發(fā)的救赐,瀏覽器會(huì)發(fā)出另一種警告。
- 如果數(shù)字證書是可靠的,客戶端就可以使用列表中的公鑰解密證書经磅,獲取服務(wù)器公鑰(pub)泌绣,如果能解密證書,則驗(yàn)證了獲取的公鑰是來自服務(wù)器的预厌。
- 接下來客戶端會(huì)通過AES計(jì)算出一個(gè)對(duì)稱加密的秘鑰X阿迈。 然后使用服務(wù)器公鑰(pub)將X進(jìn)行加密。
- 客戶端將加密后的密文發(fā)送給服務(wù)端轧叽。服務(wù)端通過私鑰(pri)解密獲得X苗沧。
- 然后兩邊的通訊內(nèi)容就通過對(duì)稱密鑰X以對(duì)稱加密算法來加解密。
數(shù)字摘要與數(shù)字簽名炭晒、加密等技術(shù)結(jié)合使用的過程如下:
發(fā)送方S將原文信息進(jìn)行Hash運(yùn)算待逞,得到Hash值,即數(shù)字摘要MD网严;
發(fā)送方S用自己的私鑰PVS识樱,采用非對(duì)稱加密算法RSA,對(duì)數(shù)字摘要MD進(jìn)行加密屿笼,得到數(shù)字簽名DS牺荠;
發(fā)送方S用對(duì)稱算法DES的對(duì)稱密鑰SK對(duì)原文信息、數(shù)字簽名DS及發(fā)送方證書的公鑰PBS采用對(duì)稱算法加密驴一,得到加密信息E休雌;
發(fā)送方S用接收方R的公鑰PBR,采用RSA算法對(duì)對(duì)稱密鑰SK進(jìn)行加密肝断,形成數(shù)字信封DE杈曲。該過程就像將對(duì)稱密鑰SK,裝進(jìn)了一個(gè)用接收方的公鑰加密的信封里胸懈。
發(fā)送方S將加密信息E和數(shù)字信封DE一起發(fā)送給接收方R担扑;
接收方R將收到的數(shù)字信封DE用自己的私鑰PVR解密,取出對(duì)稱密鑰SK趣钱;
接收方R用對(duì)稱密鑰SK通過DES算法對(duì)接收到的加密信息E進(jìn)行解密涌献,還原出原文信息、數(shù)字簽名DS以及發(fā)送方證書的公鑰PBS首有;
接收方R用發(fā)送方S的公鑰PBS解密數(shù)字簽名燕垃,得到數(shù)字摘要MD;
接收方R將原文信息用同樣的Hash算法井联,求得一個(gè)新的數(shù)字摘要MD1卜壕;
比較兩個(gè)數(shù)字摘要MD和MD1,若一致烙常,則認(rèn)為收到的就是未被篡改的原文轴捎,否則,認(rèn)為原文被篡改,拒絕該簽名侦副。