你管這破玩意叫 HTTPS
共 7130字,需瀏覽 15分鐘
·
2024-04-02 23:29
我和小宇早戀了,上課的時(shí)候老說(shuō)話(huà)
老師把我們的座位分得很遠(yuǎn),我在第一排,她在最后一排,我們中間隔了很多人。
但我們還是想通過(guò)傳紙條的方式交流。
我們中間的那些同學(xué),雖然壞心思比較多,但好在可以保證將紙條傳遞到位,于是我們用傳紙條的方式,一直秘密交流著感情。
但好景不長(zhǎng),我們漸漸發(fā)現(xiàn),中間這些同學(xué)特別不靠譜,出現(xiàn)了以下兩種惡劣的行為:
偷看紙條,把我們的小甜蜜作為他們飯后的談資。
篡改內(nèi)容,讓我們之間產(chǎn)生了好多誤會(huì)。
這還了得,我必須得想個(gè)辦法才行!
單鑰匙鎖
于是我發(fā)明了一個(gè)盒子,并且給這個(gè)盒子配了一把鎖和一把鑰匙。
這把鎖與普通的鎖不太一樣,解鎖需要鑰匙,同時(shí)上鎖也需要鑰匙。
我把這個(gè)鑰匙復(fù)制了一份,給到小宇,這樣我每次給她寫(xiě)完小紙條之后,都把紙條放在盒子里,用鑰匙把它鎖起來(lái)。
小宇收到這個(gè)盒子后,用鑰匙解鎖,才能拿出里面的紙條。
同時(shí)如果小宇想給我回紙條時(shí),也需要把紙條放在盒子里,并且用鑰匙加鎖,再傳給我。
這樣,由于中間的同學(xué)沒(méi)有鑰匙,就無(wú)法偷窺里面的內(nèi)容了,也無(wú)法篡改里面的內(nèi)容,問(wèn)題完美解決。
但好景又不長(zhǎng),由于之前我把鑰匙給小宇時(shí),也是通過(guò)同學(xué)傳遞過(guò)去的,有個(gè)同學(xué)當(dāng)時(shí)就偷偷又復(fù)制了一份,因此拿到了一個(gè)鑰匙。
于是他每次收到我傳給小宇的盒子的時(shí)候,就先用鑰匙解鎖,偷看內(nèi)容,有的時(shí)候甚至還修改內(nèi)容,放回盒子,然后再用鑰匙鎖起來(lái)。
這還了得,我必須得再想個(gè)辦法才行!
雙鑰匙鎖 - 防篡改
我絞盡腦汁,通宵達(dá)旦了好幾天,終于發(fā)明出了一把特別神奇的鎖。
與這個(gè)鎖相對(duì)應(yīng)的有兩把不同的鑰匙 A 和 B,神奇的地方就在于,用鑰匙 A 加鎖,必須用鑰匙 B 才能解鎖。反過(guò)來(lái)用鑰匙 B 加鎖,必須用鑰匙 A 才能解鎖。
我對(duì)我的這個(gè)發(fā)明非常滿(mǎn)意!感覺(jué)可以申請(qǐng)專(zhuān)利了!
我給這個(gè)鎖起了個(gè)名字叫雙鑰匙鎖,那自然之前那個(gè)簡(jiǎn)單的鎖,就叫單鑰匙鎖。
而雙鑰匙鎖這種加解鎖的方式,我給起了個(gè)名字,叫非對(duì)稱(chēng)加解鎖,自然,那個(gè)單鑰匙鎖對(duì)應(yīng)的方式,就叫對(duì)稱(chēng)加解鎖咯。
有了這個(gè)發(fā)明,我只需要把鑰匙 B 給小宇,我每次寫(xiě)紙條時(shí)先用鑰匙 A 進(jìn)行加密,然后盒子到了小宇那里,她只需要用鑰匙 B 解密,即可看到我的內(nèi)容了。
這個(gè)鑰匙 B 被人復(fù)制了一份也沒(méi)關(guān)系,壞人只能用鑰匙 B 打開(kāi)盒子偷看我的內(nèi)容,但是他如果想篡改內(nèi)容,必須用鑰匙 A 才能把盒子鎖住,而鑰匙 A 一直在我手里,從來(lái)沒(méi)有傳遞過(guò),沒(méi)人知道。
當(dāng)然,壞人也可以用鑰匙 B 把盒子鎖住,但用 B 鎖住的盒子,只能用 A 去解鎖,所以如果小宇用自己手里的 B 解鎖時(shí),發(fā)現(xiàn)解不開(kāi),就知道內(nèi)容被人篡改了。
現(xiàn)在,內(nèi)容篡改的問(wèn)題就完美解決了。
還有內(nèi)容被偷看的問(wèn)題還沒(méi)解決,也就是內(nèi)容泄漏。
雙鑰匙鎖 - 防泄漏
我靈機(jī)一動(dòng),想到了辦法。
我發(fā)現(xiàn),小宇那邊已經(jīng)有了鑰匙 B,如果小宇用 B 去加鎖,只有鑰匙 A 能解鎖,而鑰匙 A 只有我這里有,這樣小宇用鑰匙 B 加鎖的紙條,就沒(méi)有任何人能看到并且篡改了!
就著這個(gè)思路,因?yàn)槲覀?/span>完全是對(duì)稱(chēng)的關(guān)系,所以只要小宇那邊再造一個(gè)類(lèi)似的神奇的鎖,然后分配兩把鑰匙 C 和 D。
然后小宇把鑰匙 D 給我,自己保留鑰匙 C,這樣我只要用鑰匙 D 加鎖我的內(nèi)容,就只有小宇能解開(kāi)了!
這樣,就保證了雙向的通信安全!中間的壞同學(xué)們既無(wú)法閱讀我們的內(nèi)容,也無(wú)法篡改我們的內(nèi)容,因?yàn)闀?huì)被我們發(fā)現(xiàn)。
但好景又不長(zhǎng),我們發(fā)現(xiàn),這個(gè)雙鑰匙鎖由于設(shè)計(jì)的太過(guò)復(fù)雜,導(dǎo)致加鎖解鎖的效率實(shí)在是太低了,每次傳一個(gè)紙條都要費(fèi)好大勁加鎖再解鎖,極大降低了我們每天交流的次數(shù),很不爽。
這還了得,我必須得想個(gè)辦法才行!
單雙鑰匙鎖相互配合
我記得當(dāng)初用那個(gè)單鑰匙鎖的時(shí)候,效率就挺高的,只是因?yàn)閭魉丸€匙的過(guò)程中容易被壞人偷看到,復(fù)制一份出來(lái),就可以監(jiān)聽(tīng)和篡改我們后續(xù)的通訊了。
那我們能不能用雙鑰匙鎖的安全性,把單鑰匙鎖的鑰匙安全地傳送給對(duì)方,然后之后再用單鑰匙鎖,高效率地通信。這樣,安全性和效率就都有了保證!
我趕緊想出了一個(gè)絕妙的方案!
簡(jiǎn)單說(shuō)就是,小宇給了我把鑰匙 D,我用 D 加鎖我的 M,傳給小宇,之后我們用鑰匙 M 進(jìn)行對(duì)稱(chēng)加解鎖的方式進(jìn)行通信。
當(dāng)然,中間的壞蛋,可以在小宇給我鑰匙 D 的時(shí)候,偷偷換成別的鑰匙 E,但我用 E 加鎖我的鑰匙 M 之后,小宇是無(wú)法用鑰匙 C 解鎖的,也就知道中間有人動(dòng)了手腳,那我們就停止我們的通信。
也就是說(shuō),中間人可以阻止我們的通信,但是卻再也無(wú)法偷窺和閱讀我們的通信內(nèi)容了。
太絕了!我們居然在中間人完全不可靠的通信鏈路上,實(shí)現(xiàn)了安全的通信,這簡(jiǎn)直不可思議!
但好景又不長(zhǎng)。
有個(gè)又壞又聰明的壞蛋,居然也研究出了這種雙鑰匙鎖的技術(shù)!
這些壞蛋給自己也準(zhǔn)備了一個(gè)雙鑰匙鎖,并且配置了兩把鑰匙 X 和 Y。
此時(shí)他在我們?cè)瓉?lái)的通信方式上,做了這么個(gè)事。
簡(jiǎn)單說(shuō),就是,我以為我是用小宇的鑰匙加密,但卻是壞蛋的。小宇以為是我用她的鑰匙加密后傳給她的 M,因?yàn)樗獾瞄_(kāi),但卻是壞蛋偽裝的。我們雙方都不知情。
壞蛋也真是卷啊,這么精妙的設(shè)計(jì)也能想出來(lái),只是為了偷窺我和小宇的小紙條,果然八卦是人類(lèi)的第一生產(chǎn)力。
這肯定不行,我必須又得想個(gè)辦法才行。
找班長(zhǎng)做公證
我苦思冥想,找到了一個(gè)解決思路。
首先我們至少有一次,就是第一次傳輸?shù)哪前谚€匙,是無(wú)法進(jìn)行加密的,會(huì)被中間的所有人看到,這個(gè)是無(wú)法避免的,否則就一直套娃了。
但是我們能不能做到,可以讓對(duì)方看到,但卻無(wú)法篡改呢?
也就是說(shuō),壞蛋傳給我假鑰匙 Y,我可以知道這個(gè)是壞蛋的呢?
只靠我們兩個(gè),幾乎不可能,于是我求助了班長(zhǎng)。
我讓班長(zhǎng)也準(zhǔn)備了一個(gè)雙鑰匙鎖,然后配置了兩把鑰匙 J 和 K,然后把鑰匙 K 公開(kāi)讓所所有人都知道。
小宇在第一次準(zhǔn)備給我鑰匙 D 時(shí),不再直接給我了,而是找班長(zhǎng),把鑰匙 D 放在一個(gè)盒子里,讓班長(zhǎng)用自己的鑰匙 J 給加鎖。
然后小宇把這個(gè)用鑰匙 J 加好鎖的盒子傳給我,我用班長(zhǎng)公開(kāi)的鑰匙 K 解鎖盒子,就可以得到小宇的鑰匙 D 了。
這樣,中間的壞蛋可以用公開(kāi)的鑰匙 K 把盒子打開(kāi),看到小宇準(zhǔn)備給我的鑰匙 D。
但是,他們卻無(wú)法把自己偽造的鑰匙 Y 傳給我,因?yàn)橐爰渔i這個(gè)盒子,必須有鑰匙 J 才行,而鑰匙 J 只有班長(zhǎng)知道。
也就是說(shuō),目前這個(gè)內(nèi)容,中間的壞蛋們只能看,不能修改了!
如果不能修改,我就能成功用小宇給我的真正的鑰匙 D 加鎖我們之后要通訊用的鑰匙 M,于是這個(gè)鑰匙 M 就被安全地傳給了小宇,我們之后就可以用這個(gè)誰(shuí)也不知道的鑰匙 M,和配套的單鑰匙鎖,愉快地聊天了!
可是如果班長(zhǎng)同壞蛋勾結(jié),把 J 泄漏或者賣(mài)給了壞蛋怎么辦呢?那沒(méi)轍,說(shuō)明他不配當(dāng)班長(zhǎng)!
這么多鑰匙傻傻分不清了
這個(gè)環(huán)節(jié)涉及到很多鑰匙
這在安全領(lǐng)域,分別對(duì)應(yīng)對(duì)稱(chēng)加密,非對(duì)稱(chēng)加密。
單鑰匙就是對(duì)稱(chēng)加密,對(duì)稱(chēng)加密的速度很快,可以用于傳輸過(guò)程中的數(shù)據(jù)加密,防止中間人查看和篡改信息。但是如何將對(duì)稱(chēng)加密的秘鑰安全傳遞過(guò)去,個(gè)問(wèn)題。
雙鑰匙就是非對(duì)稱(chēng)加密,非對(duì)稱(chēng)加密的速度慢,可以用于加密少量數(shù)據(jù),同時(shí)也可以用于簽名防止篡改,為什么呢?看后面。
非對(duì)稱(chēng)加密的秘鑰中,公開(kāi)讓別人知道的就是公鑰,比如小宇的鑰匙 D 或班長(zhǎng)的鑰匙 K 等。
留在自己這里不讓別人知道的就是私鑰,比如小宇的鑰匙 C 或班長(zhǎng)的鑰匙 J 等。
既可以用私鑰加密數(shù)據(jù),公鑰解密數(shù)據(jù)。也可以用公鑰加密數(shù)據(jù),私鑰解密數(shù)據(jù)。
公鑰加密,私鑰解密,這個(gè)叫加密,是為了保證內(nèi)容安全,因?yàn)樗借€只有自己知道,是為了保證這個(gè)信息不被中間人解開(kāi)。
私鑰加密,公鑰解密,這個(gè)叫簽名,是為了防止內(nèi)容被篡改,因?yàn)楣€所有人都知道,所有人都能看到這個(gè)信息做驗(yàn)證。
但是,如果想篡改,就必須得篡改原文信息后,用私鑰加密,才能得到原來(lái)的效果,可惜私鑰是不公開(kāi)的。
還有一種不可逆的哈希函數(shù),這個(gè)叫摘要,是無(wú)法解密的,這個(gè)之后再說(shuō)。
在剛剛的環(huán)節(jié)中,首先小宇讓班長(zhǎng)用私鑰 J 加密自己的公鑰 D,傳給我,這是私鑰加密公鑰解密,這個(gè)目的就是簽名,防止公鑰 D 在傳輸過(guò)程中被別人篡改。
我得到了公鑰 D 之后,加密我的對(duì)稱(chēng)加密的秘鑰 M,傳給小宇,這是公鑰加密私鑰解密,這個(gè)目的是加密,為了讓中間人不知道我的 M 是什么。
當(dāng)然,我們之后的數(shù)據(jù)傳輸過(guò)程,也可以用這種非對(duì)稱(chēng)加密的方式玩,但可惜,非對(duì)稱(chēng)加密的復(fù)雜度非常高,性能非常低,因此僅僅適合這個(gè)傳遞秘鑰 M 的過(guò)程,數(shù)據(jù)量很小,而且僅僅一次。
再之后的傳輸,就通過(guò)我們協(xié)商好的對(duì)稱(chēng)秘鑰 M 進(jìn)行傳輸,這個(gè)也是加密,與公鑰加密私鑰解密的目標(biāo)是一致的,只不過(guò)適合的場(chǎng)景不同,對(duì)稱(chēng)加密的效率比非對(duì)稱(chēng)加密高出好幾個(gè)數(shù)量級(jí)。
HTTPS
我和小宇傳紙條這個(gè)過(guò)程,就是 HTTPS 的工作原理。
哦不對(duì),這句話(huà)重說(shuō)一遍,這個(gè)破玩意,就是 HTTPS。
我就是客戶(hù)端,小宇就是服務(wù)端,班長(zhǎng)就是 CA 機(jī)構(gòu),中間那些壞蛋同學(xué)就是傳輸鏈路,用以標(biāo)明傳輸鏈路很不靠譜,有很多中間人想要搞破壞,或者偷窺我們的信息。
只不過(guò),HTTPS 的細(xì)節(jié)更多些,但大體的思路和我們今天傳紙條是一致的。
春招已經(jīng)開(kāi)始啦,大家如果不做好充足準(zhǔn)備的話(huà),春招很難找到好工作。
送大家一份就業(yè)大禮包,大家可以突擊一下春招,找個(gè)好工作!
