什么是RSA加密算法
RSA加密算法是一種非對稱加密算法,算法的數(shù)學(xué)基礎(chǔ)是極大數(shù)分解難題。
RSA加密算法的強(qiáng)度也就是極大數(shù)分解的難度,目前700多位(二進(jìn)制)的數(shù)字已經(jīng)可以破解,1024位認(rèn)為是比較安全的,2048則是非常安全的。
在RSA加密算法中,密鑰由兩部分組成,稱之為公鑰和私鑰,私有由發(fā)送方自己保存,不能泄漏。公鑰由發(fā)送方公布出去。發(fā)送方發(fā)送消息時(shí),會用公鑰對消息進(jìn)行加碼,接收方必須要使用對應(yīng)的私鑰才能將加密后的信息解開。因此,只要私鑰不泄漏,通信內(nèi)容就不會被破解。
如何保證消息不會被篡改
雖然使用RSA加密之后,只有持有密鑰才可以解密,但是這并不能組織或者發(fā)現(xiàn)消息被篡改了。為了防止消息在傳輸過程中被篡改,引入類數(shù)字簽名的概念。
數(shù)字簽名
發(fā)送方在發(fā)送消息之前,會使用消息摘要算法對發(fā)送內(nèi)容進(jìn)行摘要,然后用私鑰對摘要進(jìn)行加密,加密后的內(nèi)容作為數(shù)字簽名隨消息一起發(fā)送。接收方收到消息之后,會對消息進(jìn)行解密,解密之后進(jìn)行摘要計(jì)算,得到摘要。接著對數(shù)字簽名進(jìn)行解密,得到另一分摘要,將兩份摘要進(jìn)行對比,如果相同,則說明消息沒有被篡改過。
數(shù)字證書
雖然RSA算法能保證消息不被破解,數(shù)字簽名也能保證消息不被篡改,但是RSA算法中使用的公鑰卻很難有效的分發(fā),因?yàn)楣€無法證明自己就是由發(fā)送方發(fā)出的,它也有可能是惡意的人冒名頂替分發(fā)出來的。
為了解決這種問題,需要引入第三方權(quán)威機(jī)構(gòu),發(fā)送方和接收方都應(yīng)該要信任該機(jī)構(gòu),然后由該機(jī)構(gòu)來給他們辦法一個(gè)證書,證書包含有頒發(fā)機(jī)構(gòu)信息,證書持有人信息,以及證書持有人的公鑰,這些信息會使用私鑰進(jìn)行數(shù)字簽名,這樣就能夠保證證書的安全。接收方收到這個(gè)證書,只要使用第三方權(quán)威機(jī)構(gòu)的公鑰對證書解密,即可知道證書的真?zhèn)巍?/p>