這篇博客何陆,講一些名稱豹储,很基礎(chǔ),但是一直沒(méi)有整理過(guò)巩剖。這些名詞包括:
對(duì)稱加密、非對(duì)稱加密曙聂、數(shù)字簽名鞠鲜、數(shù)字證書、簽名加密
1贤姆、對(duì)稱加密
對(duì)稱加密的方式很簡(jiǎn)單庐氮,就是加密和解密使用同一套規(guī)則宋彼,這種加密方式有一個(gè)很大的問(wèn)題就是,保存和傳遞密鑰音婶,如果在傳遞的過(guò)程中莱坎,信息被截取到,那么就可以使用密鑰對(duì)信息進(jìn)行解密碴卧。
2瓮具、非對(duì)稱加密
這種加密方式就是,加密方和解密方可以使用不同的加密規(guī)則叹阔。這樣的話就有兩套密鑰传睹,公鑰和私鑰。
乙方生成兩把密鑰(公鑰和私鑰)帅掘。公鑰是公開的,任何人都可以獲得修档,私鑰則是保密的。
甲方獲取乙方的公鑰讥邻,然后用它對(duì)信息加密院峡。
乙方得到加密后的信息,用私鑰解密发魄。
其中具體的原理在博客:RSA算法原理中有很詳細(xì)的介紹俩垃。
這樣就避免了傳輸明文的時(shí)候傳輸秘鑰,即便消息在傳輸過(guò)程中被截獲,也不會(huì)被破解闻坚。
如上圖苛秕,乙產(chǎn)生公鑰和私鑰,公鑰可以給任何人荣茫,加使用公鑰對(duì)問(wèn)價(jià)加密想帅,乙使用私鑰對(duì)文件進(jìn)行解密啡莉。
公鑰加密,私鑰解密浅缸。
3衩椒、數(shù)字簽名
數(shù)字簽名的作用在于用來(lái)鑒別接受方接受到的信息是否是發(fā)送方發(fā)送過(guò)來(lái)的,并且中間是否又被篡改過(guò)苟弛。
如上圖1,公鑰可以被任何獲取膏秫,然后對(duì)文件加密做盅。假設(shè)這樣一種情況:
甲使用公鑰對(duì)文件進(jìn)行加密,然后向乙傳輸密文吹榴,但是傳輸?shù)倪^(guò)程中,被同樣有公鑰的丙截獲(公鑰任何人都可以擁有)图筹,這個(gè)時(shí)候丙利用自己的公鑰,重新加密一封密文劝篷,傳輸給乙。如此一來(lái)像鸡,乙收到的密文不是甲傳過(guò)來(lái)的,而是丙傳過(guò)來(lái)的只估。但是乙并不知道。如此一來(lái)锌云,就產(chǎn)生了文件被掉包桑涎。
數(shù)字簽名的作用就是用來(lái)校驗(yàn)文件是否在傳輸過(guò)程中是否被篡改和掉包兼贡。具體實(shí)現(xiàn)方式有兩種:無(wú)保密機(jī)制簽名和保密機(jī)制簽名
3.1無(wú)保密機(jī)制簽名
甲在對(duì)明文加密之前,先使用摘要算法等曼,對(duì)明文生成摘要,然后把摘要使用非對(duì)稱加密的方式進(jìn)行加密胁黑,然后傳輸給乙州泊,乙收到摘要密文后使用私鑰進(jìn)行解密,然后把收到的文件明文進(jìn)行摘要算法触趴,得到摘要后和乙傳輸過(guò)來(lái)的密文進(jìn)行比對(duì)渴肉。就可以知道,文件是否被替換披蕉。
具體過(guò)程如上圖:
(1)發(fā)送方采用某種摘要算法從報(bào)文中生成一個(gè)128位的散列值(稱為報(bào)文摘要)礁苗;
(2)發(fā)送方用RSA算法和自己的私鑰對(duì)這個(gè)散列值進(jìn)行加密,產(chǎn)生一個(gè)摘要密文嘁信,這就是發(fā)送方的數(shù)字簽名疏叨;
(3)將這個(gè)加密后的數(shù)字簽名作為報(bào)文的附件和報(bào)文一起發(fā)送給接收方:
(4)接收方從接收到的原始報(bào)文中采用相同的摘要算法計(jì)算出128位的散列值;
(5)報(bào)文的接收方用RSA算法和發(fā)送方的公鑰對(duì)報(bào)文附加的數(shù)字簽名進(jìn)行解密卦溢;
(6)如果兩個(gè)散列值相同单寂,那么接收方就能確認(rèn)報(bào)文是由發(fā)送方簽名的吐辙。
最常用的摘要算法叫做MD5(Message Digest 5),它的作者R.L.
3.2保密機(jī)制簽名
上面的加密方式中疲扎,只是實(shí)現(xiàn)了使用簽名如何對(duì)校驗(yàn)傳輸數(shù)據(jù)是否被篡改和替換,但是傳輸?shù)倪€是明文椒丧,如果要想對(duì)傳輸明文進(jìn)行加密成密文,是否也要使用RSA加密算法呢句柠?
這種做法很不可取棒假,因?yàn)镽SA加密算法效率很低,所需加密的明文越長(zhǎng)谜酒,效率會(huì)呈指數(shù)下降僻族。那么應(yīng)該怎么辦呢?
方法就是:
使用對(duì)稱加密的方式對(duì)明文加密述么,然后將對(duì)稱加密的秘鑰使用RSA加密,然后在對(duì)密文生成摘要度秘,然后傳輸
如上圖众羡,具體加密步驟為:
(1)發(fā)送方選擇一個(gè)對(duì)稱加密算法(比如DES)和一個(gè)對(duì)稱密鑰對(duì)報(bào)文進(jìn)行加密粱侣;
(2)發(fā)送方用接收方的公鑰和RSA算法對(duì)第1步中的對(duì)稱密鑰進(jìn)行加密,并且將加密后的對(duì)稱密鑰附加在密文中齐婴;
(3)發(fā)送方使用一個(gè)摘要算法從第2步的密文中得到報(bào)文摘要柠偶,然后用RSA算法和發(fā)送方的私鑰對(duì)此報(bào)文摘要進(jìn)行加密,這就是發(fā)送方的數(shù)字簽名毡证;
(4)將第3步得到的數(shù)字簽名封裝在第2步的密文后,并通過(guò)網(wǎng)絡(luò)發(fā)送給接收方料睛;
(5)接收方使用RSA算法和發(fā)送方的公鑰對(duì)收到的數(shù)字簽名進(jìn)行解密恤煞,得到一個(gè)報(bào)文摘要居扒;
(6)接收方使用相同的摘要算法,從接收到的報(bào)文密文中計(jì)算出一個(gè)報(bào)文摘要苔货;
(7)如果第5步和第6步的報(bào)文摘要是相同的夜惭,就可以確認(rèn)密文沒(méi)有被篡改铛绰,并且是由指定的發(fā)送方簽名發(fā)送的捂掰;
(8)接收方使用RSA算法和接收方的私鑰解密出對(duì)稱密鑰;
(9)接收方使用對(duì)稱加密算法(比如DES)和對(duì)稱密鑰對(duì)密文解密鸥昏,得到原始報(bào)文姐帚。
4、簽名證書
假設(shè)一種更為復(fù)雜的情況膳汪,甲在給乙傳輸密文的時(shí)候九秀,使用公鑰加密鼓蜒,但是這個(gè)時(shí)候痹换,丁把甲的電腦偷走晴音,換成自己的公鑰,但是甲不知道搁料,使用丁的公鑰加密后給乙傳輸密文郭计,這樣如果丁截取到密文椒振,就可以使用自己的私鑰進(jìn)行解密。
那么怎么知道自己的公鑰就是自己的呢庐杨?這就用到了簽名證書灵份。
找“證書中心”(certification authority,簡(jiǎn)稱CA)哮洽,為公鑰做認(rèn)證。證書中心用自己的私鑰氛什,對(duì)鮑勃的公鑰和一些相關(guān)信息進(jìn)行加密匪凉,生成“數(shù)字證書”(Digital Certificate)再层。
不是悶騷的程序員算不上程序員树绩。我的微信公眾號(hào)“那點(diǎn)鼻事”隐轩,在這里周一到周五每天一篇文章职车,與技術(shù)無(wú)關(guān)鹊杖,只哈牛逼扛芽。