1. 程式人生 > >非對稱加密,我終於理解了!

非對稱加密,我終於理解了!

北京的Bob發了一個快遞到廣州的Alice,途中經過了上海,上海快遞中心出現了一個黑客H,他偷偷打開了Bob給Alice的快遞,然後偷偷把裡邊的衣服剪爛,再按照原樣包裝好發往廣州,可以看到對於這樣簡單包裝的傳輸在中途是可以偷偷修改裡邊的東西。
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都無法解開保險櫃(因為只有各自的私鑰才能解開各自的保險櫃)。