HTTP的數據包是明文傳輸,也即是如果中途某個黑客嗅探到這個HTTP包,他可以偷偷修改里邊包的內容,至於Bob跟Alice是互相不知道這個動作的,因此我們必須要有一個方案來防止這種不安全的篡改行為,有個方法就是加密!
非對稱加密
Bob將衣服放到一個保險箱里邊鎖起來,他打了個電話告訴Alice保險箱開櫃密碼是1234,而黑客H不知道密碼,所以他看不到保險箱里邊的東西,Alice收到快遞后用預先溝通好的密碼就可以打開保險箱了。
這里保護的手段就是Bob對物品進行加密,同時給了告訴Alice解密的方法!
那如果現在要求Bob的密碼只能通過快遞傳給Alice呢?如果Bob直接傳密碼給Alice,H如果嗅探到這個快遞,那H也知道密碼了,這就無法保護快遞的安全性了。因此還需要有個方案,讓Bob能夠告訴Alice密碼的同時,H又無法查看到Bob跟Alice通信的數據。
非對稱加密在這個時候就發揮作用了,來看看怎么回事:Bob擁有兩把鑰匙,一把叫做公鑰,一把叫做私鑰。公鑰是公開讓全社會都知道,沒關系,Bob告訴所有人,你們要傳遞數據給我的時候請先用這個密鑰(公鑰)去加密一下你們的數據,加密后的數據只能通過Bob私自藏着的私鑰才能解密。
回到剛剛例子,Bob先發給保險櫃(Bob公鑰)給Alice,接着Alice把自己的保險櫃(Alice公鑰)放到Bob的保險櫃(即使用Bob的公鑰加密Alice的公鑰)里邊發還給Bob,接着Bob拿到Alice的數據包后,用自己的私鑰解開了外層保險櫃(Bob的公鑰),拿到了里邊Alice保險櫃(Alice的公鑰)。此時Alice跟Bob都有了各自的公鑰(並且都有他們自己的私鑰),接着只要保證每次互相傳遞數據的時候,把數據放在對方的保險櫃里邊即可(即每次都用對方的公鑰加密數據),這樣無論如何,H都無法解開保險櫃(因為只有各自的私鑰才能解開各自的保險櫃)。
