一、密碼學(xué)的起源
密碼學(xué)的出現(xiàn)主要是因?yàn)閼?zhàn)爭姚炕,有了戰(zhàn)爭摊欠,就有了密碼學(xué)的應(yīng)用環(huán)境丢烘。在戰(zhàn)爭中,對(duì)陣雙方要保護(hù)自己的通信安全并竊取凄硼、破譯對(duì)方的情報(bào)铅协,就出現(xiàn)了密碼學(xué)。
為了保證通信的安全摊沉,出現(xiàn)了下面3種保密方法:
1狐史、對(duì)傳遞的數(shù)據(jù)進(jìn)行加密,使用的方法包括:對(duì)稱加密算法说墨、非對(duì)稱加密算法骏全。
2、雖然對(duì)數(shù)據(jù)進(jìn)行了加密尼斧,但是會(huì)存在加密的數(shù)據(jù)被破壞的情況姜贡,因此使用散列函數(shù)來驗(yàn)證數(shù)據(jù)的完整性。通過散列函數(shù)棺棵,可以為數(shù)據(jù)創(chuàng)建一個(gè)散列值楼咳,散列值通常是一個(gè)短的隨機(jī)字母和數(shù)字組成的字符串,收發(fā)雙方提前約定要使用的散列算法烛恤,如果消息被篡改母怜,數(shù)據(jù)前后所得的散列值就會(huì)不同。散列函數(shù)常用的算法有MD--消息摘要算法缚柏,SHA--安全散列算法苹熏、MAC--消息認(rèn)證碼算法。
3币喧、除此之外還需要保證數(shù)據(jù)來源的可認(rèn)證性和數(shù)據(jù)發(fā)送行為的不可否認(rèn)性轨域,就需要通過數(shù)字簽名來保證,數(shù)字簽名可以保證簽名者任何時(shí)候都無法否認(rèn)自己曾經(jīng)簽發(fā)的數(shù)字簽名杀餐,信息接受者能夠驗(yàn)證和確認(rèn)收到的數(shù)字簽名干发,但任何人無法偽造發(fā)送者的數(shù)字簽名,當(dāng)收發(fā)雙方對(duì)數(shù)字簽名真?zhèn)萎a(chǎn)生爭議時(shí)史翘,可進(jìn)行仲裁枉长。數(shù)字簽名使用非對(duì)稱密碼體制,簽名算法受私鑰控制恶座,由簽名者保密搀暑,驗(yàn)證算法受公鑰控制沥阳,對(duì)外公開跨琳,也就是說私鑰用于簽名,公鑰用于驗(yàn)證桐罕。常用的數(shù)字簽名算法有:RSA(即可用于非對(duì)稱加密算法脉让,也可用于簽名算法)桂敛、DSA(屬于非對(duì)稱加密算法但不具備數(shù)據(jù)加解密功能)
Tips:
雙向認(rèn)證:
甲方用私鑰對(duì)數(shù)據(jù)做簽名發(fā)送給乙方,數(shù)據(jù)是可以保證安全的溅潜,但是如果乙方想發(fā)送消息給甲方术唬,由于公鑰,算法都是公開的滚澜,竊聽者可以截獲乙方的消息替換成自己的粗仓,而甲方無法辨別消息是否來源于乙方,也就是說上述的認(rèn)證消息是單向的设捐,屬于單向認(rèn)證借浊。如果有兩套公私鑰,甲乙雙方都對(duì)數(shù)據(jù)做簽名及驗(yàn)證就可以避免這個(gè)問題萝招,這就是雙向認(rèn)證蚂斤。
二、密碼學(xué)分類
1、按時(shí)間劃分
A、古典密碼:以字符為基本加密單元诺苹,通過移位(也稱錯(cuò)位须眷,將字符的順序重新排列,如:將“12345”變?yōu)椤?2165”)酒来,替代(也稱置換,將明文中的一組字符替代成其他字符,如:將“encryption”變?yōu)椤癴odszqujpo”每個(gè)字母用下一個(gè)字母替代)達(dá)到加密的目的师倔。
B、現(xiàn)代密碼:以信息塊為基本加密單元
2周蹭、按保密內(nèi)容劃分
A趋艘、受限制算法:算法的保密性給予保持算法的秘密,算法由專業(yè)機(jī)構(gòu)開發(fā)凶朗,驗(yàn)證瓷胧,確保其算法的安全性,是古典密碼學(xué)的主要特征棚愤。
B搓萧、基于密鑰算法:算法的保密性基于對(duì)密鑰的保密。這樣做的好處是:算法的公開有助于算法安全性的驗(yàn)證宛畦,算法的漏洞得以及時(shí)修正瘸洛,避免留下后面,這是先打密碼學(xué)的主要特征次和。
3反肋、按密碼體制劃分
A、對(duì)稱密碼體制(單鑰密碼體制/私鑰密碼體制):加密與解密的密鑰相同踏施,即加密與解密的過程中使用同一套密鑰石蔗。
B罕邀、非對(duì)稱密碼體制(雙鑰密碼體制/公鑰密碼體制):加密與解密的密鑰不同,分為公鑰與私鑰养距,公鑰對(duì)外公開诉探,私鑰對(duì)外保密。
這兩種密碼體制對(duì)應(yīng)的算法為對(duì)稱密碼算法和非對(duì)稱密碼算法棍厌。
A肾胯、對(duì)稱密碼算法(單鑰密碼算法/私鑰密碼算法):DES,AES
B耘纱、非對(duì)稱密碼算法(雙鑰密碼算法/公鑰密碼算法):RSA阳液,這種算法有更高的安全性,但是加密解密的耗時(shí)較長揣炕。
4帘皿、按明文的處理方法劃分
A、分組密碼:加密時(shí)將明文分成固定長度的租畸陡,用同一密鑰和算法對(duì)每一塊加密鹰溜,輸出的也是固定長度的密文,多用于網(wǎng)絡(luò)加密丁恭。分組長度越長曹动,密碼分析越困難,分組長度越短牲览,操作運(yùn)算越簡單墓陈。代表算法:DES,AES第献。
分組密碼工作模式:
1)電子密碼本模式--ECB:是最基本贡必、最易理解的工作模式。每次加密均產(chǎn)生獨(dú)立的密文分組庸毫,每組的加密結(jié)果不影響其他分組仔拟,相同明文加密后產(chǎn)生相同密文。適用于加密密鑰飒赃,隨機(jī)數(shù)等短數(shù)據(jù)利花。(如果密文較長,重復(fù)的內(nèi)容較多载佳,則密文也會(huì)重復(fù)炒事,密文容易被篡改)
2)密文鏈接模式--CBC:應(yīng)用最廣泛。明文加密前先與前面的密文進(jìn)行異或再加密蔫慧,因此只要選擇不同的初始向量挠乳,相同的明文加密后產(chǎn)生的密文也不相同。但如果在加密過程中發(fā)生錯(cuò)誤,則錯(cuò)誤會(huì)被無限放大欲侮,最終導(dǎo)致加密失敗。適用于檢車數(shù)據(jù)完整性的消息認(rèn)證碼MAC肋联。
3)密文反饋模式--CFB:初始化一個(gè)向量威蕉,加密后與第一個(gè)分組進(jìn)行異或產(chǎn)生第一組密文,之后對(duì)第一組密文加密后再與第二個(gè)分組進(jìn)行異或取得第二組密文橄仍,以此類推韧涨。這種作法,即使明文相同侮繁,產(chǎn)生的密文也不同虑粥,但也會(huì)誤差傳遞。用于檢查發(fā)現(xiàn)明文密文的篡改宪哩。
4)輸出反饋模式--OFB:與CFB類似娩贷,無誤差傳送問題,對(duì)明文的主動(dòng)攻擊是可能的锁孟,安全性較CFB差彬祖,適用于加密冗余性較大的數(shù)據(jù),如語音和圖像品抽。
B储笑、流密碼(序列密碼):加密時(shí)每次加密一位或一個(gè)字節(jié)的明文,對(duì)系統(tǒng)資源要求極低圆恤,常用于手機(jī)應(yīng)用平臺(tái)突倍,它的實(shí)現(xiàn)簡單,便于硬件技術(shù)盆昙,加解密速度快羽历,錯(cuò)誤傳播率低,但對(duì)錯(cuò)誤的產(chǎn)生不夠敏感淡喜。常用算法有RC4窄陡,SEAL。
流密碼分為:
1)同步流密碼:信息在發(fā)送和接收時(shí)拆火,同步進(jìn)行加解密操作跳夭,明文與密文一一對(duì)應(yīng),密文內(nèi)容如果被篡改们镜,會(huì)導(dǎo)致同步失敗币叹,則密文解密失敗。同步流密碼的重要特點(diǎn)就是模狭,如果一個(gè)密文位發(fā)生變化颈抚,只會(huì)影響這一位密文的恢復(fù),對(duì)后續(xù)密文無影響。這樣也會(huì)導(dǎo)致攻擊者選擇性的對(duì)密文進(jìn)行改動(dòng)贩汉,因此同步流密碼具有同步性驱富、無錯(cuò)誤傳遞性、主動(dòng)攻擊性三種特征匹舞。適用于對(duì)音頻褐鸥、視頻提供版權(quán)保護(hù)。
2)自同步流密碼:是一種由記憶變換的密碼赐稽,每個(gè)密鑰與已產(chǎn)生的固定數(shù)量的密文位有關(guān)叫榕,密鑰由已生成的密文決定。如果一個(gè)密文位發(fā)生變化姊舵,這個(gè)變化會(huì)影響后續(xù)有限位(如n位)的密文位的正確解密晰绎。所以,自同步流密碼有錯(cuò)誤傳遞的現(xiàn)象括丁。但是荞下,在接收了n為正確密文字符后,密碼自身又會(huì)實(shí)現(xiàn)重新同步史飞。自同步流密碼的密碼分析更困難锄弱,安全性更高。有自同步性祸憋,錯(cuò)誤傳遞有限性会宪,主動(dòng)攻擊性及明文統(tǒng)計(jì)擴(kuò)散性四種特征。
三蚯窥、算法介紹
1掸鹅、Base64
Base64是一種基于64個(gè)字符的編碼算法,是一種以任意8位字節(jié)序列組合的描述形式拦赠,這種形式不易被人直接識(shí)別巍沙。Base64算法的轉(zhuǎn)換類似于古典加密算法中的電表置換算法,通過一個(gè)字符映射表對(duì)原數(shù)據(jù)進(jìn)行轉(zhuǎn)換荷鼠。經(jīng)過Base64編碼后的數(shù)據(jù)會(huì)比原始數(shù)據(jù)略長句携,為原來的4/3倍,經(jīng)過Base64編碼后的字符串的字符數(shù)是以4位單位的整數(shù)倍允乐。如果編碼后的字符數(shù)不足4的整數(shù)倍矮嫉,需要補(bǔ)位,Base64的字符映射表中用于補(bǔ)位的符號(hào)是“=”牍疏,因此看到字符串末尾有等號(hào)蠢笋,就會(huì)聯(lián)想到Base64的算法。
Base64算法的編碼鳞陨、解碼操作可以作為加解密操作昨寞,字符映射表可以作為密鑰,為什么他不能叫做加密算法呢?因?yàn)锽ase64的算法公開沒有問題援岩,但是充當(dāng)密鑰的字符映射表也公開了歼狼,相當(dāng)于把密鑰進(jìn)行公開了,自然無法作為加密算法了享怀,而且Base64算法的加密強(qiáng)度并不高羽峰。雖然Base64不能作為加密算法,但他常作為密鑰凹蜈、密文、證書的一種通用存儲(chǔ)編碼格式忍啸,與加密算法形影不離仰坦。
2、消息摘要算法(驗(yàn)證數(shù)據(jù)完整性)
散列函數(shù)的單向性(通過散列函數(shù)可以獲得對(duì)應(yīng)的散列值计雌,但不可通過該散列值反推其原始信息)使其能夠用于校驗(yàn)數(shù)據(jù)的完整性悄晃,任何消息經(jīng)過散列函數(shù)處理后,都會(huì)獲得唯一的散列值凿滤,這一過程稱為“消息摘要”妈橄,其散列值稱為“數(shù)字指紋”,其算法稱為“消息摘要算法”翁脆。數(shù)字簽名是使用消息摘要算法獲得數(shù)字指紋眷蚓。
消息摘要算法主要分為三大類:MD(Message Digest,消息摘要算法)反番、SHA(Secure Hash Algorithm沙热,安全散列算法)和MAC(Message Authentication Code,消息認(rèn)證碼算法)
A罢缸、MD算法家族
MD5是典型的消息摘要算法篙贸,其前身有MD2,MD3枫疆,MD4爵川,它由MD4,MD3息楔,MD2算法改進(jìn)而來寝贡。這種算法需要獲得一個(gè)隨機(jī)長度的信息,并產(chǎn)生一個(gè)128位的信息摘要值依,并將這個(gè)128位的二進(jìn)制摘要信息換算成十六進(jìn)制兔甘,就得到一個(gè)32位的字符串,所以大部分MD5算法的數(shù)字指紋都是32位的十六進(jìn)制字符串鳞滨。
B洞焙、SHA算法家族
SHA算法家族有SHA-1,SHA-224,SHA-256澡匪,SHA-384熔任,SHA-512(通常將后四種算法稱為SHA-2算法)。SHA算法是在MD4算法基礎(chǔ)上演進(jìn)而來唁情,通過SHA算法能獲得一個(gè)固定長度的摘要信息疑苔,但若輸入的消息不同,則與其相對(duì)應(yīng)的摘要信息的差異概率很高甸鸟,因此要找到兩組不同的信息對(duì)應(yīng)相同的消息摘要惦费,從理論上來說很困難。與MD算法相比抢韭,摘要長度更長薪贫,安全性更高。
C刻恭、MAC算法家族
MAC算法結(jié)合了MD5和SHA算法的優(yōu)勢(shì)瞧省,并加入密鑰的之處,是一種更為安全的消息摘要算法鳍贾。
3鞍匾、循環(huán)冗余校驗(yàn)(奇偶校驗(yàn)碼)算法--CRC算法
CRC(Cyclic Redundancy Check,循環(huán)冗余校驗(yàn))是可以根據(jù)數(shù)據(jù)產(chǎn)生簡短固定位數(shù)的一種散列函數(shù)骑科,主要用于檢測(cè)/校驗(yàn)數(shù)據(jù)傳輸/保存后出現(xiàn)的錯(cuò)誤橡淑。生成的散列值在傳輸或存儲(chǔ)之前計(jì)算出來并附加到數(shù)據(jù)后面,在使用數(shù)據(jù)之前咆爽,對(duì)數(shù)據(jù)的完整性做校驗(yàn)梳码。一般來說,循環(huán)冗余校驗(yàn)的值都是32位的二進(jìn)制數(shù)伍掀,以8位十六進(jìn)制字符串形式表示掰茶。他編碼解碼方法簡單,檢錯(cuò)糾錯(cuò)能力強(qiáng)蜜笤,在通信領(lǐng)域廣泛用于實(shí)現(xiàn)差錯(cuò)控制濒蒋。
CRC算法與消息摘要算法一樣,屬于散列函數(shù)把兔,但他并不屬于加密算法沪伙。
4、對(duì)稱加密算法
對(duì)稱加密算法县好,解密算法是加密算法的逆運(yùn)算围橡,加密密鑰和解密密鑰相同。對(duì)稱加密算法易于理解缕贡,便于實(shí)現(xiàn)翁授,根據(jù)加密方式分為密碼和分組密碼拣播,分組密碼又有幾種工作模式:ECB,CBC收擦,CFB贮配,OFB,CTR等塞赂,密鑰長度決定了加密算法的安全性泪勒。
Java6中提供了DES,DESede宴猾,AES圆存,Blowfish,RC2仇哆,RC4算法沦辙,其中DES是對(duì)稱加密算法的代表,DESede是DES算法的變種税产,AES算法是DES的替代者怕轿。
5偷崩、非對(duì)稱加密算法
非對(duì)稱加密算法與對(duì)稱加密算法的主要區(qū)別在于辟拷,非對(duì)稱加密算法用于加密和解密的密鑰不同,一個(gè)公開阐斜,稱為公鑰衫冻,一個(gè)保密,稱為私鑰谒出。這種雙鑰體系更為安全隅俘,但他的加解密速度要遠(yuǎn)遠(yuǎn)慢于對(duì)稱加密,在某些極端的情況下笤喳,會(huì)比非對(duì)稱加密慢1000倍为居。
非對(duì)稱加密的公鑰公開,通過非安全通道發(fā)放杀狡,私鑰保密蒙畴,由發(fā)放者保留,公鑰私鑰互相對(duì)應(yīng)呜象,成對(duì)出現(xiàn)膳凝,公鑰加密的數(shù)據(jù),只能用私鑰解密恭陡,反之亦可蹬音。這樣密鑰的管理就不是問題了,安全性大大保證休玩。非對(duì)稱加密算法一般應(yīng)用在對(duì)安全性要求相當(dāng)高的領(lǐng)域著淆,如電子商務(wù)平臺(tái)劫狠。
Tips:
由于非對(duì)稱加密算法效率低,所以一般講對(duì)稱和非對(duì)稱加密算法結(jié)合使用牧抽,使用對(duì)稱加密算法為數(shù)據(jù)加解密嘉熊,而使用非對(duì)稱加密算法為對(duì)稱加密算法的密鑰進(jìn)行加解密。因?yàn)榉菍?duì)稱加密算法對(duì)待加密數(shù)據(jù)的長度有極為苛刻 要求扬舒,如RSA算法要求待加密數(shù)據(jù)不得大于53個(gè)字節(jié)阐肤,因此非對(duì)稱加密算法主要用于交換對(duì)稱加密算法的密鑰,而非數(shù)據(jù)讲坎。
非對(duì)稱加密算法最重要的實(shí)現(xiàn)就是RSA算法孕惜。
通過RSA形成了DSA算法,DSA和RSA都是數(shù)字證書中不可或缺的兩種算法晨炕,但DSA值包含數(shù)字簽名算法衫画,使用DSA算法的數(shù)字證書無法進(jìn)行加密通信,而RSA算法既包含加解密算法瓮栗,又包含數(shù)字簽名算法削罩。可以認(rèn)為DSA是RSA數(shù)字簽名算法實(shí)現(xiàn)的簡裝版费奸。
四弥激、應(yīng)用--數(shù)字證書
數(shù)字證書用于標(biāo)識(shí)網(wǎng)絡(luò)中用戶的身份,數(shù)字證書有認(rèn)證機(jī)構(gòu)(Certificate Authority愿阐,CA)簽發(fā)微服,證書的簽發(fā)是對(duì)申請(qǐng)數(shù)字證書的公鑰做數(shù)字簽名,證書的驗(yàn)證是對(duì)數(shù)字證書的公鑰做驗(yàn)證簽名缨历,有效期驗(yàn)證以蕴。
數(shù)字證書使用相應(yīng)的加密算法保證了網(wǎng)絡(luò)應(yīng)用的安全性
1、非對(duì)稱加密算法對(duì)數(shù)據(jù)進(jìn)行加解密操作辛孵,保證數(shù)據(jù)的機(jī)密性
2丛肮、數(shù)字簽名算法對(duì)數(shù)據(jù)進(jìn)行簽名驗(yàn)證操作,保證數(shù)據(jù)的完整性和抗否認(rèn)性
3魄缚、消息摘要算法對(duì)數(shù)字證書本身做摘要處理宝与,保證數(shù)字證書的完整性
五、總結(jié)