01.安全-加密

如果通信過程具備了四個特性,就可以認爲是“安全”的,
這四個特性是:

安全傳輸4特性
  • 機密性
  • 完整性
  • 身份認證
  • 不可否認

1.機密性(Secrecy/Confidentiality)

是指對數據的“保密”,只能由可信的人訪問,對其他人是不可見的“祕密”,簡單來說就是不能讓不相關的人看到不該看的東西

比如小明和小紅私下聊天,但“隔牆有耳”,被小強在旁邊的房間裏全偷聽到了,這就是沒有機密性。我們之前一直用的 Wireshark ,實際上也是利用了 HTTP 的這個特點,捕獲了傳輸過程中的所有數據

2.完整性(Integrity,也叫一致性)

是指數據在傳輸過程中沒有被篡改,不多也不少,“完完整整”地保持着原狀。

機密性雖然可以讓數據成爲“祕密”,但不能防止黑客對數據的修改,黑客可以替換數據,調整數據的順序,或者增加、刪除部分數據,破壞通信過程。

比如,小明給小紅寫了張紙條:“明天公園見”。小強把“公園”劃掉,模仿小明的筆跡把這句話改成了“明天廣場見”。小紅收到後無法驗證完整性,信以爲真,第二天的約會就告吹了

3.身份認證(Authentication)

是指確認對方的真實身份,也就是“證明你真的是你”,保證消息只能發送給可信的人。

如果通信時另一方是假冒的網站,那麼數據再保密也沒有用,黑客完全可以使用冒充的身份“套”出各種信息,加密和沒加密一樣。比如,小明給小紅寫了封情書:“我喜歡你”,但不留心發給了小強。小強將錯就錯,假冒小紅回覆了一個“白日做夢”,小明不知道這其實是小強的話,誤以爲是小紅的,後果可想而知。

4.不可否認(Non-repudiation/Undeniable)

也叫不可抵賴,意思是不能否認已經發生過的行爲,不能“說話不算數”“耍賴皮

使用前三個特性,可以解決安全通信的大部分問題,但如果缺了不可否認,那通信的事務真實性就得不到保證,有可能出現“老賴”。比如,小明借了小紅一千元,沒寫借條,第二天矢口否認,小紅也確實拿不出借錢的證據,只能認倒黴。另一種情況是小明借錢後還了小紅,但沒寫收條,小紅於是不承認小明還錢的事,說根本沒還,要小明再掏出一千元

機密性由對稱加密AES保證,完整性由SHA384摘要算法保證,身份認證和不可否認由RSA非對稱加密保證

非對稱加密

  • 公鑰加密,私鑰解密
  • 私鑰加密,公鑰驗籤
私鑰加密,用公鑰解是爲了做身份認證(能解開說明是私鑰持有者發給我的公鑰) 不可抵賴,因爲默認私鑰只有持有人知道
混合加密:用非對稱加密,加密對稱加密的私鑰。 對稱加密的私鑰又是會話級的隨機數=一次會話一個私鑰。就算別人暴力破解也只是破解了一個會話。

公鑰的傳輸必須使用證書,把公鑰和持有者身份綁在一起,否則就會有信任問題,容易被別人冒充。

私鑰加密的作用是簽名,實現身份認證而不是數據保密,簽名是公開的,所以不存在安全問題

非對稱加密缺點
  • 非對稱加密基於大數運算,比如大素數或者橢圓曲線,是複雜的數學難題,所以消耗計算量,運算速度慢
  • 除了慢,可能還有一個缺點就是需要更多的位數,相同強度的對稱密鑰要比非對稱密鑰短,
    對稱密鑰一般都128位、256位,而rsa一般要2048位,不過橢圓曲線的會短一點

數字簽名的原理

就是把公鑰私鑰的用法反過來,之前是公鑰加密、私鑰解密,現在是私鑰加密、公鑰解密

但又因爲非對稱加密效率太低,所以私鑰只加密原文的摘要,這樣運算量就小的多,而且得到的數字簽名也很小,方便保管和傳輸。

簽名和公鑰一樣完全公開,任何人都可以獲取。


但這個簽名只有用私鑰對應的公鑰才能解開,拿到摘要後,再比對原文驗證完整性,就可以像簽署文件一樣證明消息確實是你發的

當你的系統接入支付寶的時候,支付寶會要求你生成一對你的公私鑰,然後私鑰你自己藏好了,公鑰上傳到支付寶(這個過程相當於支付寶有了你的公鑰),然後再你上傳完你的公鑰後,支付寶會返回給你支付寶的公鑰。
其中當你使用RSA普通版本的時候,所有商戶得到的支付寶公鑰都是同一個,當你使用RSA2的時候,每個商戶收到的支付寶公鑰都是不盡相同的。

1.你給支付寶發信息時用支付寶的公鑰加密,只要持有支付寶私鑰的支付寶才能解開

2.支付寶給你發消息時分2種

  • 1.用支付寶的私鑰加密,所有持有支付寶的公鑰的人都能解開(驗籤)
  • 2.用你的公鑰加密,只有持有私鑰的你才能解開(簽名)
openssl genrsa -out rsa_private_key.pem 1024
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
ssl_certificate certs/3340027_www.cn.pem;
ssl_certificate_key certs/3340027_www.cn.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章