理解公鑰與私鑰
一终畅、公鑰算法與私鑰算法
1渴肉、私鑰算法
私鑰加密算法砸捏,又稱 對(duì)稱加密算法谬运,因?yàn)檫@種算法解密密鑰和加密密鑰是相同的隙赁。也正因?yàn)橥幻荑€既用于加密又用于解密,所以這個(gè)密鑰是不能公開的梆暖。常見的有《DES加密算法》伞访、《AES加密算法》。
2轰驳、公鑰算法
公鑰加密算法厚掷,也就是 非對(duì)稱加密算法,這種算法加密和解密的密碼不一樣级解,一個(gè)是公鑰冒黑,另一個(gè)是私鑰:
- 公鑰和私鑰成對(duì)出現(xiàn)
- 公開的密鑰叫公鑰,只有自己知道的叫私鑰
- 用公鑰加密的數(shù)據(jù)只有對(duì)應(yīng)的私鑰可以解密
- 用私鑰加密的數(shù)據(jù)只有對(duì)應(yīng)的公鑰可以解密
- 如果可以用公鑰解密勤哗,則必然是對(duì)應(yīng)的私鑰加的密
- 如果可以用私鑰解密抡爹,則必然是對(duì)應(yīng)的公鑰加的密
公鑰和私鑰是相對(duì)的,兩者本身并沒有規(guī)定哪一個(gè)必須是公鑰或私鑰芒划。
二冬竟、實(shí)現(xiàn)數(shù)據(jù)的安全傳輸
要實(shí)現(xiàn)數(shù)據(jù)的安全傳輸,當(dāng)然就要對(duì)數(shù)據(jù)進(jìn)行加密了民逼。
如果使用對(duì)稱加密算法诱咏,加解密使用同一個(gè)密鑰,除了自己保存外缴挖,對(duì)方也要知道這個(gè)密鑰袋狞,才能對(duì)數(shù)據(jù)進(jìn)行解密。如果你把密鑰也一起傳過去映屋,就存在密碼泄漏的可能苟鸯。所以我們使用非對(duì)稱算法,過程如下:
- 首先 接收方 生成一對(duì)密鑰棚点,即私鑰和公鑰早处;
- 然后,接收方 將公鑰發(fā)送給 發(fā)送方瘫析;
- 發(fā)送方用收到的公鑰對(duì)數(shù)據(jù)加密砌梆,再發(fā)送給接收方;
- 接收方收到數(shù)據(jù)后贬循,使用自己的私鑰解密咸包。
由于在非對(duì)稱算法中,公鑰加密的數(shù)據(jù)必須用對(duì)應(yīng)的私鑰才能解密杖虾,而私鑰又只有接收方自己知道烂瘫,這樣就保證了數(shù)據(jù)傳輸?shù)陌踩浴?/p>
三、對(duì)信息進(jìn)行數(shù)字簽名
除了保證數(shù)據(jù)的安全傳輸之外奇适,公鑰體系的另一個(gè)用途就是對(duì)數(shù)據(jù)進(jìn)行簽名坟比。通常“數(shù)字簽名”是用來驗(yàn)證發(fā)送方的身份并幫助保護(hù)數(shù)據(jù)的完整性芦鳍。
例如:一個(gè)發(fā)送者 A 想要傳些資料給大家,用自己的私鑰對(duì)資料加密葛账,即簽名柠衅。這樣一來,所有收到資料的人都可以用發(fā)送者的公鑰進(jìn)行驗(yàn)證籍琳,便可確認(rèn)資料是由 A 發(fā)出來的了菲宴。(因?yàn)橹挥校潦褂盟借€簽名得到的信息,才能用這個(gè)公鑰來解) 采用數(shù)字簽名巩割,可以確認(rèn)兩點(diǎn):
- 保證信息是由簽名者自己簽名發(fā)送的裙顽,簽名者不能否認(rèn)或難以否認(rèn)。
- 保證信息自簽發(fā)后到收到為止未曾作過任何修改宣谈。
之所以可以確認(rèn)這兩點(diǎn)愈犹,是因?yàn)橛霉€可以解密的必然是用對(duì)應(yīng)的私鑰加的密,而私鑰只有簽名者持有闻丑。
四漩怎、公鑰算法的缺點(diǎn)
現(xiàn)實(shí)中,公鑰機(jī)制也有它的缺點(diǎn)嗦嗡,那就是效率非常低勋锤,比常用的私鑰算法(如 DES 和 AES)慢上一兩個(gè)數(shù)量級(jí)都有可能。所以它不適合為大量的原始信息進(jìn)行加密侥祭。為了同時(shí)兼顧安全和效率叁执,我們通常結(jié)合使用公鑰算法和私鑰算法:
- 首先,發(fā)送方使用對(duì)稱算法對(duì)原始信息進(jìn)行加密矮冬。
- 接收方通過公鑰機(jī)制生成一對(duì)密鑰谈宛,一個(gè)公鑰,一個(gè)私鑰胎署。
- 接收方 將公鑰發(fā)送給 發(fā)送方吆录。
- 發(fā)送方用公鑰對(duì)對(duì)稱算法的密鑰進(jìn)行加密,并發(fā)送給接收方琼牧。
- 接收方用私鑰進(jìn)行解密得到對(duì)稱算法的密鑰恢筝。
- 發(fā)送方再把已加密的原始信息發(fā)送給接收方。
- 接收方使用對(duì)稱算法的密鑰進(jìn)行解密巨坊。
總結(jié):
- 每個(gè)用戶都有一對(duì)私鑰和公鑰撬槽。
- 私鑰用來進(jìn)行解密和簽名,是給自己用的抱究。
- 公鑰由本人公開恢氯,用于加密和驗(yàn)證簽名,是給別人用的鼓寺。
- 當(dāng)該用戶發(fā)送文件時(shí)勋拟,用私鑰簽名,別人用他給的公鑰解密妈候,可以保證該信息是由他發(fā)送的敢靡。即數(shù)字簽名。
- 當(dāng)該用戶接受文件時(shí)苦银,別人用他的公鑰加密啸胧,他用私鑰解密,可以保證該信息只能由他看到幔虏。即安全傳輸纺念。
圖片來源:www.cnblogs.com/chnking/archive/2007/08/30/875947.html
感謝原作者:http://songlee24.github.io/2015/05/03/public-key-and-private-key/