文章簡單回答https數據傳輸原理。
非對稱加解密技術
加密就是一鍾映射與變換。
密文 = f(明文,key1)
明文 = g(密文,key2)
如果key1==key2,則叫對稱加密。如DES
。
如果key1!=key2,則叫非對稱加密。如RSA
。
因爲是非對稱的,所以可以一個key給別人,稱爲公鑰,一個key自留着,稱爲私鑰。
當然,數學原理和算法上保證了兩點。
- 公鑰加密的數據,只有私鑰能正確解出。
- 私鑰加密的數據,只有公鑰能正解解出。
這兩點性質是後面的基礎。
數字摘要
數字摘要 = hash(數據)
這個過程也有三點性質
- 數據有任何微小的改變,數字摘要就會發生變化。
- 同一份相同的數據,生成的數字摘要是相同的。
- 可由數據變換成數字摘要,但無法由數字摘要推導或反解出數據。
這個性質可以保證數據完整和不被篡改。
比如,發一份數據的同時,後面再跟一串這個數據的數字摘要。
收到數據的人,用同樣的hash函數對數據處理,得到摘要。
與後面的摘要進行對比。若相同,則表明數據是完整的未被改動過。
至於數據是不是真實的,就是後面的事了。
常用的hash函數有:MD5
,sha1
數字簽名
就是把上面兩項組合下。
發送者:
附加數據 =f(hash(數據),私鑰)
[數據+附加數據]
[數據+附加數據]
傳給接收者後
接收者:
hash(數據) ?= g(附加數據,公鑰)
如果相等,則可以認定這個數據是私鑰擁有者發的完整天數據。
數字簽名有兩種功效:
- 確定消息確實是由發送方簽名併發出來的,因爲別人假冒不了發送方的簽名。
- 數字簽名能確定消息的完整性,因爲數字摘要的存在。
數字證書
數字證書的存在,是爲了解決上面過程的一個漏洞。
無法驗證公鑰的真實性。如果在傳輸過程中被換掉了呢。
數字簽名和數字證書這裏面有比較深動的圖解。
爲了驗證公鑰的真實性。
需要一個權威的值得信賴的第三方機構(Certificate Authority, CA)。
把公鑰和公鑰擁有者的信息
數字證書 = [[公鑰+公鑰擁有者的信息]+f(hash([公鑰+公鑰擁有者的信息]),CA私鑰)]
這樣通訊的時候,直接給這個數字證書就可以了。
先通過CA的公鑰,把個人的公鑰解確認。
再用個人公鑰去進行上面的操作。
相當於,如果X信任Y,Y信任Z,X就能信任Z了。
這是一個證書鏈的原型吧。
SSL/TLS
上面的過程,可以確定發出者的身份,數據的真實性,完整性。但在傳輸過程中,別人還是可以查看到你發的什麼信息呢。
SSL就是基於上面說的原理,定的一個安全傳輸協議。
詳細的過程可以查看Https(SSL/TLS)原理詳解
總得來說,就是先用RSA,確認身份,再商量出一個密鑰,用DES對數據加密再輸出。
https
基本就是就SSL+HTTP。
有空再來補充。