Https 加密
參考: Nginx 下部署 HTTPS 與安全調(diào)優(yōu)
《圖解HTTP》第七章
關(guān)鍵字:
"公鑰" "私鑰"
"數(shù)字簽名"(digital signature)
"數(shù)字證書"(digital certificate)
"證書中心"(certificate authority,簡稱CA)
"摘要"(digest)
什么是 Https
Https 并不是一種新的被發(fā)明出來的協(xié)議, 而是 HTTP 協(xié)議與 SSL 協(xié)議組合而成為保證敏感數(shù)據(jù)安全傳輸?shù)囊环N方法.
了解Https之前你需要知道的
對稱加密之XOR加密
參考 阮一峰:XOR加密簡介(私以為文章最后以密碼的存儲為例極為不合適, 僅參考XOR的實現(xiàn)即可)
XOR 即 異或運算, 符號 ^, 相同為假,相異為真。1011^1000 = 0011。
對同一字符連續(xù)使用使用兩次 XOR 就會返回這個值本身。
實現(xiàn)方式:
// 第一次 XOR
1010 ^ 1111 // 0101
// 第二次 XOR
0101 ^ 1111 // 1010
作用:
#有要加密傳輸?shù)男畔essage
key = random()
secret = XOR(message, key)
message = XOR(secret, key)
只要雙方都知道 相同的key 就可以加密傳輸數(shù)據(jù), 這就是 對稱加密。
非對稱加密之RSA
參考《計算是怎樣跑起來的》10.4 章節(jié)
非對稱加密 和 對稱加密 類似, 但是 非對稱加密 雙方所擁有的 key 是不同的。
作用:
#有要加密傳輸?shù)男畔essage
secret = 私鑰加密(message)
message = 公鑰解密(secret)
#公鑰私鑰反過來也是可以的
secret = 公鑰加密(message)
message = 私鑰解密(secret)
實現(xiàn)方式是數(shù)學(xué)上 素數(shù)、乘方、取模的一些神奇魔法,我們致敬但不做深究。
數(shù)字簽名
作用: 以保證自己內(nèi)容不被篡改
方法如下:
摘要 = hash(內(nèi)容)
數(shù)字簽名 = 私鑰加密(摘要)
發(fā)送(內(nèi)容 + 數(shù)字簽名) #可以保證自己內(nèi)容不被篡改
原理: 別人使用你的 公鑰 才能解密數(shù)字簽名,成功解密證明這個數(shù)字簽名是由作者生成的,之后對內(nèi)容進行hash,對比該hash與解密出的hash是否相同,這一步保證了數(shù)據(jù)不被篡改。
Https 的實現(xiàn)方式
上圖展示了服務(wù)器通過可信任的第三方機構(gòu), 發(fā)布自己公鑰的過程. 之后服務(wù)器和客戶端會使用非對稱加密的方式安全的交換對稱加密的
key, 之后也會一直以對稱加密的方式去傳輸數(shù)據(jù), 而不再使用更加耗費計算機資源的非對稱加密.
為什么需要證書中心
因為服務(wù)器公鑰要發(fā)布出去,而且要保證發(fā)布的公鑰就是自己公鑰. 這一點就需要一個可信任的第三方機構(gòu)做保證.