要理解加密在網(wǎng)絡(luò)通信中的應(yīng)用哥艇,首先谐腰,要理解兩個(gè)概念:
- 對稱加密:加密和解密使用同一個(gè)密鑰,比如密鑰key腹鹉,消息發(fā)送方使用key來加密內(nèi)容藏畅,消息獲取方使用key來解密內(nèi)容。
- 非對稱加密:加密和解密使用不同的密鑰,一般是生成兩個(gè)密鑰愉阎,稱為公鑰和私鑰绞蹦,自己持有私鑰,將公鑰授予他人榜旦。非對稱加密沒有規(guī)定哪個(gè)密鑰是用來加密哪個(gè)密鑰是用來解密的幽七,你可以使用私鑰來加密,用公鑰來解密溅呢;也可以使用公鑰來加密澡屡,私鑰來解密。不同應(yīng)用場景下不同的使用方式咐旧。
比如我們安裝git客戶端驶鹉,我們通過:
ssh-keygen -t rsa -C "youremail@example.com"
1
來生成密鑰對,xxx.pub里面就是公鑰,另一個(gè)沒有后綴名的xxx就是私鑰铣墨。我們通常會把xxx.pub里面的內(nèi)容復(fù)制到gitlab上室埋,這樣我們提交代碼的時(shí)候,會將我們提交的代碼使用私鑰加密伊约,遠(yuǎn)程倉庫會使用公鑰解密姚淆,我們將公鑰復(fù)制到gitlab的過程就相當(dāng)于頒發(fā)公鑰的過程,只不過這個(gè)過程是由我們自己人為來完成的屡律。
接下來再說說兩種加密算法群的優(yōu)缺點(diǎn)腌逢,不具體分析哪種算法:
對稱加密:對稱加密算法的特點(diǎn)是加密速度快,適合于數(shù)據(jù)量比較大的數(shù)據(jù)的加密超埋。缺點(diǎn)顯而易見搏讶,不安全,只要有人獲取了你的密鑰纳本,就可以和你通信窍蓝。
非對稱加密:和對稱加密算法相比腋颠,非對稱加密的特點(diǎn)是安全繁成,當(dāng)然也不是絕對安全,后面會說到淑玫。在獲得了安全的代價(jià)下巾腕,它效率不高,只適合數(shù)據(jù)量較小的信息絮蒿。上面只是說了兩種算法的優(yōu)缺點(diǎn)尊搬,具體為什么效率高效率不高,和算法本身有關(guān)系土涝,如果有興趣佛寿,可以自行研究。
對稱加密為什么不安全?
原因是密鑰有泄漏的風(fēng)險(xiǎn)冀泻。只要你的密鑰泄漏了常侣,那你的通信就等于明文了,獲取了你密鑰的人可以獲取你接收或者發(fā)送的信息弹渔,破解胳施,然后偽造一份信息,使用密鑰加密發(fā)給你肢专,你就收到了假的信息舞肆。相比對稱加密非對稱加密為什么安全?
非對稱加密的公鑰是公開的博杖,私鑰是自己持有的椿胯。所以這個(gè)關(guān)口就是私鑰是否泄漏,一般私鑰我們自己都會嚴(yán)密保存剃根。當(dāng)私鑰持有方給客戶端發(fā)消息時(shí)压状,客戶端使用公鑰解密獲取信息;當(dāng)客戶端給私鑰持有者發(fā)送信息時(shí)跟继,使用公鑰加密种冬,這個(gè)信息只有私鑰能解密,所以你的私鑰不泄露舔糖,就是安全的娱两。那你會問,如果惡意的人獲取了你的公鑰(畢竟公鑰是公開的)金吗,他就會截取私鑰持有者發(fā)送的信息十兢,并解密,這怎么辦摇庙?惡意的人雖然可以獲取到信息旱物,但是他不能偽造信息,因?yàn)樗麤]有私鑰卫袒,就算他篡改了信息宵呛,他也不能對消息加密,客戶端使擁有的公鑰只能對私鑰加密的內(nèi)容解密夕凝。這種辦法沒有防止消息的竊聽宝穗,但是防止了消息的篡改。
上面說過码秉,非對稱加密只適合信息量比較小的數(shù)據(jù)逮矛,數(shù)據(jù)量大的話效率就會很慢,那怎么辦呢转砖,一種辦法是使用效率相較非對稱比較好的hash算法须鼎,hash算法會生成長度一致的比較短小的內(nèi)容串。然后再使用私鑰加密。
我們將上面的hash算法生成的值叫做信息摘要晋控。將信息摘要加密之后得到的東西叫做數(shù)字簽名挑围。
信息 -> (HASH) ->信息摘要
信息摘要 -> (私鑰加密) ->數(shù)字簽名
一般私鑰持有者發(fā)送信息的過程就是:①將信息加工成數(shù)字簽名。②將明文和數(shù)字簽名一起發(fā)送給客戶端糖荒。③客戶端獲取到信息杉辙,將數(shù)字簽名使用公鑰解密,得到信息摘要d1捶朵。④將明文使用hash處理蜘矢,得到信息摘要d2。⑤比對d1和d2综看,這樣就會知道這個(gè)明文是不是被篡改了品腹。
上面的情況都是建立在客戶端能安全獲取到你的公鑰的情況,比如我們gitlab上手動(dòng)添加公鑰红碑。如果是通過網(wǎng)絡(luò)呢舞吭,這個(gè)公鑰能完好的送到客戶端手上嗎?如果惡意者將你的公鑰篡改成他自己的了析珊,客戶端獲取的就是惡意者的公鑰羡鸥,這樣客戶端向你發(fā)送信息就會使用惡意者的公鑰加密,惡意者可以使用它的私鑰解密獲取客戶端信息忠寻,把公鑰送到客戶端身上且要求不被篡改惧浴,就像把信息安全發(fā)送給客戶端,又需要一個(gè)私鑰公鑰對奕剃,這就沒完沒了了衷旅。此時(shí)怎么辦呢?
這種情況就需要第三方機(jī)構(gòu)來保證了纵朋。也就是再拉入一個(gè)公鑰私鑰對來解決這個(gè)問題柿顶,要想不陷入沒完沒了,那就要保證這個(gè)密鑰對是公正的操软。這個(gè)密鑰對要被有公信力的機(jī)構(gòu)擁有嘁锯,那就是CA機(jī)構(gòu)。
私鑰持有者將自己的公鑰發(fā)送給CA機(jī)構(gòu)寺鸥,CA機(jī)構(gòu)將私鑰持有者的公鑰用自己的私鑰加密形成數(shù)字簽名猪钮,連同私鑰持有者的一些信息,如果是服務(wù)器網(wǎng)站胆建,會有網(wǎng)站的網(wǎng)址等信息一起發(fā)送給客戶端,客戶端收到證書以后肘交,取得相關(guān)證書的公鑰笆载,對證書里的數(shù)字簽名進(jìn)行解密,將明文里的公鑰和解密后的公鑰進(jìn)行比對。
那有沒有更好的辦法呢凉驻,能不能充分利用對稱加密加密數(shù)據(jù)量大的特點(diǎn)呢腻要?答案是可以,上面說了涝登,對稱加密不安全是因?yàn)槊荑€泄漏雄家,如果能將這個(gè)密鑰安全送到客戶端手里,不就可以了嗎胀滚。
目標(biāo):
對稱加密的密鑰通過非對稱加密來傳輸趟济。
信息內(nèi)容的通信使用對稱加密來完成。
方法:
比如我們就假設(shè)網(wǎng)站的通信咽笼,服務(wù)器生成一個(gè)密鑰對顷编,私鑰自己持有。
下面是過程:
①瀏覽器向服務(wù)器請求內(nèi)容剑刑。
②服務(wù)器將公鑰upub傳給CA機(jī)構(gòu)媳纬,CA機(jī)構(gòu)使用自己的私鑰cpri加密服務(wù)器公鑰upub生成數(shù)字簽名d1,連同服務(wù)器的網(wǎng)址還有不加密的upub等信息生成證書傳給瀏覽器施掏。
③瀏覽器收到證書以后钮惠,會查看是不是受信任的證書(瀏覽器安全選項(xiàng)可以查看)。如果不是七芭,會跳出警告萌腿,經(jīng)常看小黃頁的你一定懂抖苦。如果是受信任的證書毁菱,會比對當(dāng)前的網(wǎng)址和證書上的服務(wù)器網(wǎng)址是不是一致,不一致也會警告锌历。
④如果沒有問題贮庞,瀏覽器就會通過CA機(jī)構(gòu)獲取此證書的公鑰cpub,并將數(shù)字簽名d1解密究西,解密之后得到服務(wù)器公鑰upub1窗慎,當(dāng)然用不用信息摘要看情況。將upub1和證書上的明文公鑰進(jìn)行比對卤材,一致就說明證書是對的遮斥,獲得的upub1就是服務(wù)器的公鑰upub。
⑤取得服務(wù)器公鑰upub之后扇丛,就要進(jìn)行通信了术吗,通信使用對稱加密算法,瀏覽器首先要生成密鑰R帆精,這個(gè)R將來就是服務(wù)器瀏覽器雙方對稱加密通信的密鑰较屿。
⑥R生成以后隧魄,使用服務(wù)器公鑰upub對其進(jìn)行加密,發(fā)送給服務(wù)器隘蝎。
⑦服務(wù)器獲取到瀏覽器的信息购啄,使用自己的私鑰對其進(jìn)行解密獲取到R。
⑧服務(wù)器將瀏覽器請求的內(nèi)容使用R進(jìn)行對稱加密嘱么,發(fā)送給瀏覽器狮含。
⑨瀏覽器獲取到服務(wù)器發(fā)送的內(nèi)容,使用R解密曼振。几迄。
以上就是https的大致流程。
原文:https://blog.csdn.net/a_842297171/article/details/80887303