談到非對(duì)稱加密就繞不開對(duì)稱加密。
對(duì)稱加密
在進(jìn)行網(wǎng)絡(luò)通信的時(shí)候,通信安全是一定要考慮的,也就要對(duì)信息進(jìn)行加密與解密處理。
1976年以前,所有的加密方法都是同一種模式:
(1)甲方選擇某一種加密規(guī)則,對(duì)信息進(jìn)行加密;
(2)乙方使用同一種規(guī)則,對(duì)信息進(jìn)行解密。
A對(duì)信息m用密鑰進(jìn)行了加密處理得到密文c,這個(gè)過程中,密文是可以放心的在互聯(lián)網(wǎng)上傳播的,被竊聽了也沒人能看懂。
B收到后用同樣的方式進(jìn)行解密(-e)就可得到A發(fā)送的信息m。這個(gè)e就可以理解為密鑰。
因?yàn)榧用芎徒饷苁褂玫姆绞绞且粯拥模玫亩际莈,所以又叫對(duì)稱加密。
我們?cè)龠M(jìn)一步思考:這種方式真的好嗎?安全嗎?
這種方式本身沒問題,但是核心問題點(diǎn)是:A如何只讓B知道秘鑰e,而不讓其他人知道?有兩種方法
1:私下找到B親口悄悄的告訴他,并囑咐他:千萬不要對(duì)別人說喲。
這種方法能保證絕對(duì)的安全,但是在高速發(fā)展的互聯(lián)網(wǎng)時(shí)代,明顯是不現(xiàn)實(shí)的。
2:通過網(wǎng)絡(luò)傳給B。
問題點(diǎn)在于,如何安全的把秘鑰e傳給B,安全不讓第三者知道,這是最大的前提。那又怎么可能安全的傳遞密鑰呢?因此非對(duì)稱加密被發(fā)明出來,就是為了解決對(duì)稱加密的這個(gè)最為致命的痛點(diǎn)。
非對(duì)稱加密
非對(duì)稱加密就是說加密的密鑰和解密的密鑰不一樣。
流程:
接收方B利用RSA算法,產(chǎn)生一對(duì)兒密鑰,用來放在網(wǎng)絡(luò)上傳輸?shù)奈覀兘泄€,自己保管的叫私鑰。
B將公鑰傳遞給A
A拿到公鑰后對(duì)要發(fā)送的信息進(jìn)行加密
加密的密文再傳遞給B【傳輸過程中密文即使被捕獲了也無法破解,因?yàn)橹荒苡盟借€破解,而私鑰無法獲得】
B用自己的私鑰就能破解并獲得A發(fā)送的信息。
這種方式就有效的解決了加密數(shù)據(jù)通信得問題。
數(shù)字簽名
在解決了加密通信問題之后,又會(huì)出現(xiàn)個(gè)問題:就是B接收到了A發(fā)送的信息,可如何證明這信息就是A發(fā)出的呢?又如何證明這個(gè)信息沒有被別人篡改呢?這時(shí)候就用到了數(shù)字簽名。類比到現(xiàn)在生活中,就像我們?cè)谝粋€(gè)文件上簽名了就證明這個(gè)文件是你發(fā)出來的,數(shù)字簽名邏輯也是一樣。
A自己利用RSA算法產(chǎn)生一對(duì)兒密鑰(公鑰和私鑰)。
為了防止信息被篡改,A對(duì)傳遞的信息m進(jìn)行散列算法處理(Hash哈希處理),產(chǎn)生一個(gè)固定長(zhǎng)度的字符串?!疽坏┰膬?nèi)容有變化,那么散列算法處理后的結(jié)果會(huì)完全不一樣的】
隨后A利用自己的私鑰對(duì)這個(gè)散列后的字符串進(jìn)行加密就得到了數(shù)字簽名。
A將原文信息經(jīng)過對(duì)稱加密和數(shù)字簽名一起傳遞給B。
B接收后,先對(duì)原文信息解密,隨后對(duì)解密的信息也進(jìn)行散列化處理并得到散列字符串。
B利用A給的公鑰對(duì)A傳遞的數(shù)字簽名進(jìn)行解密就得到了原信息的散列值。
B將自己散列化處理的字符串和對(duì)數(shù)字簽名解密后的字符串進(jìn)行對(duì)比,如果一樣就能證明兩件事:第一、信息沒有被篡改【因?yàn)樾畔⑸⒘兄狄粯樱üR粯樱康诙?、信息確實(shí)是A發(fā)送的【因?yàn)槟隳苡肁的公鑰解密她加密的數(shù)字簽名】