當前位置:
首頁 > 知識 > HTTPS的中那些加密演算法

HTTPS的中那些加密演算法

來自:FooFish


已獲轉載授權


密碼學在計算機科學中使用非常廣泛,HTTPS就是建立在密碼學基礎之上的一種安全的通信協議。HTTPS早在1994年由網景公司首次提出,而如今在眾多互聯網廠商的推廣之下HTTPS已經被廣泛使用在各種大小網站中。在完全理解HTTPS之前,有必要弄清楚一些密碼學相關的概念,比如:明文、密文、密碼、密鑰、對稱加密、非對稱加密、摘要、數字簽名、數字證書。

密碼(cipher)


密碼學中的密碼(cipher)和我們日常生活中所說的密碼不太一樣,計算機術語『密碼 cipher』是一種用於加密或者解密的演算法,而我們日常所使用的『密碼 password』是一種口令,它是用於認證用途的一組文本字元串,這裡我們要討論的是前者:cipher。


密鑰(key)


密鑰是一種參數,它是在使用密碼(cipher)演算法過程中輸入的參數。同一個明文在相同的密碼演算法和不同的密鑰計算下會產生不同的密文。很多知名的密碼演算法都是公開的,密鑰才是決定密文是否安全的重要參數,通常密鑰越長,破解的難度越大,比如一個8位的密鑰最多有256種情況,使用窮舉法,能非常輕易的破解,知名的DES演算法使用56位的密鑰,目前已經不是一種安全的加密演算法了,主要還是因為56位的密鑰太短,在數小時內就可以被破解。密鑰分為對稱密鑰與非對稱密鑰。

明文/密文


明文(plaintext)是加密之前的原始數據,密文是通過密碼(cipher)運算後得到的結果成為密文(ciphertext)


對稱密鑰


對稱密鑰(Symmetric-key algorithm)又稱為共享密鑰加密,對稱密鑰在加密和解密的過程中使用的密鑰是相同的,常見的對稱加密演算法有DES、3DES、AES、RC5、RC6。對稱密鑰的優點是計算速度快,但是他也有缺點,密鑰需要在通訊的兩端共享,讓彼此知道密鑰是什麼對方才能正確解密,如果所有客戶端都共享同一個密鑰,那麼這個密鑰就像萬能鑰匙一樣,可以憑藉一個密鑰破解所有人的密文了,如果每個客戶端與服務端單獨維護一個密鑰,那麼服務端需要管理的密鑰將是成千上萬,這會給服務端帶來噩夢。下面就是一個簡單的對稱加密,將明文加密成ASCII。


# 加密的方式:在ASCII的基礎上 + 密鑰的值defencipher(plain_text,key):# 加密cipher_text=[]forcinplain_text:cipher_text.append(str(ord(c)+key))return .join(cipher_text)defdecipher(cipher_text,key):# 解密plain_text=[]forcincipher_text.split(" "):plain_text.append(chr(int(c)+key))return"".join(plain_text)if__name__== __main__ :print"cipher_text:",encipher("abcdef",)print"plain_text:",decipher("97 98 99 100 101 102",)

非對稱密鑰


非對稱密鑰(public-key cryptography),又稱為公開密鑰加密,服務端會生成一對密鑰,一個私鑰保存在服務端,僅自己知道,另一個是公鑰,公鑰可以自由發布供任何人使用。客戶端的明文通過公鑰加密後的密文需要用私鑰解密。非對稱密鑰在加密和解密的過程的使用的密鑰是不同的密鑰,加密和解密是不對稱的,所以稱之為非對稱加密。與對稱密鑰加密相比,非對稱加密無需在客戶端和服務端之間共享密鑰,只要私鑰不發給任何用戶,即使公鑰在網上被截獲,也無法被解密,僅有被竊取的公鑰是沒有任何用處的。常見的非對稱加密有RSA,非對稱加解密的過程:


服務端生成配對的公鑰和私鑰


私鑰保存在服務端,公鑰發送給客戶端


客戶端使用公鑰加密明文傳輸給服務端

服務端使用私鑰解密密文得到明文


數字簽名(Digital Signature)


數據在瀏覽器和伺服器之間傳輸時,有可能在傳輸過程中被冒充的盜賊把內容替換了,那麼如何保證數據是真實伺服器發送的而不被調包呢,同時如何保證傳輸的數據沒有被人篡改呢,要解決這兩個問題就必須用到數字簽名,數字簽名就如同日常生活的中的簽名一樣,一旦在合同書上落下了你的大名,從法律意義上就確定是你本人簽的字兒,這是任何人都沒法仿造的,因為這是你專有的手跡,任何人是造不出來的。那麼在計算機中的數字簽名怎麼回事呢?數字簽名就是用於驗證傳輸的內容是不是真實伺服器發送的數據,發送的數據有沒有被篡改過,它就干這兩件事,是非對稱加密的一種應用場景。不過他是反過來用私鑰來加密,通過與之配對的公鑰來解密。


第一步:服務端把報文經過Hash處理後生成摘要信息Digest,摘要信息使用私鑰private-key加密之後就生成簽名,伺服器把簽名連同報文一起發送給客戶端。

第二步:客戶端接收到數據後,把簽名提取出來用public-key解密,如果能正常的解密出來Digest2,那麼就能確認是對方發的。


第三步:客戶端把報文Text提取出來做同樣的Hash處理,得到的摘要信息Digest1,再與之前解密出來的Digist2對比,如果兩者相等,就表示內容沒有被篡改,否則內容就是被人改過了。因為只要文本內容哪怕有任何一點點改動都會Hash出一個完全不一樣的摘要信息出來。

HTTPS的中那些加密演算法



數字證書(Certificate Authority)


數字證書簡稱CA,它由權威機構給某網站頒發的一種認可憑證,這個憑證是被大家(瀏覽器)所認可的,為什麼需要用數字證書呢,難道有了數字簽名還不夠安全嗎?有這樣一種情況,就是瀏覽器無法確定所有的真實伺服器是不是真的是真實的,舉一個簡單的例子:A廠家給你們家安裝鎖,同時把鑰匙也交給你,只要鑰匙能打開鎖,你就可以確定鑰匙和鎖是配對的,如果有人把鑰匙換了或者把鎖換了,你是打不開門的,你就知道肯定被竊取了,但是如果有人把鎖和鑰匙替換成另一套表面看起來差不多的,但質量差很多的,雖然鑰匙和鎖配套,但是你卻不能確定這是否真的是A廠家給你的,那麼這時候,你可以找質檢部門來檢驗一下,這套鎖是不是真的來自於A廠家,質檢部門是權威機構,他說的話是可以被公眾認可的(呵呵)。


同樣的, 因為如果有人(張三)用自己的公鑰把真實伺服器發送給瀏覽器的公鑰替換了,於是張三用自己的私鑰執行相同的步驟對文本Hash、數字簽名,最後得到的結果都沒什麼問題,但事實上瀏覽器看到的東西卻不是真實伺服器給的,而是被張三從裡到外(公鑰到私鑰)換了一通。那麼如何保證你現在使用的公鑰就是真實伺服器發給你的呢?我們就用數字證書來解決這個問題。數字證書一般由數字證書認證機構(Certificate Authority)頒發,證書裡面包含了真實伺服器的公鑰和網站的一些其他信息,數字證書機構用自己的私鑰加密後發給瀏覽器,瀏覽器使用數字證書機構的公鑰解密後得到真實伺服器的公鑰。這個過程是建立在被大家所認可的證書機構之上得到的公鑰,所以這是一種安全的方式。


參考:


http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html https://zh.wikipedia.org/wiki/%E5%85%AC%E5%BC%80%E5%AF%86%E9%92%A5%E5%8A%A0%E5%AF%86 https://zh.wikipedia.org/wiki/%E9%AB%98%E7%BA%A7%E5%8A%A0%E5%AF%86%E6%A0%87%E5%87%86 https://zh.wikipedia.org/wiki/%E8%B3%87%E6%96%99%E5%8A%A0%E5%AF%86%E6%A8%99%E6%BA%96 https://zh.wikipedia.org/wiki/%E6%95%B8%E4%BD%8D%E7%B0%BD%E7%AB%A0 http://www.guokr.com/post/114121/ http://op.baidu.com/2015/04/https-s01a01/


本文編號2304,以後想閱讀這篇文章直接輸入2304即可。


輸入m可以獲取到文章目錄


本文內容的相關公眾號推薦


黑客技術與網路安全


Web開發


更多推薦15個技術類公眾微信


涵蓋:程序人生、演算法與數據結構、黑客技術與網路安全、大數據技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序猿 的精彩文章:

這本演算法書寫了七年
看破了一個網路詐騙犯,並向他隨手丟了一個木馬病毒……
面試雜談:面試程序員時都應該考察些什麼?
關於Java面試,你應該準備這些知識點

TAG:程序猿 |

您可能感興趣

PHP加密演算法
OSPF SPF計算的退避演算法
RSA演算法與DSA演算法的區別
談談常見的幾種CFD演算法-FVM FDM FEM MPS SPH LBM究竟有什麼區別
DARPA CONTEXT項目尋求通過演算法模型確定戰爭的真實起因
終於把微軟BING搜索-SPTAG演算法的原理搞清了
硬體演算法加成,ColorOS如何讓OPPO Reno拍出美照
非對稱加密演算法RSA 學習
MIT SCAIL科學家研究出讓AI演算法自動消除偏見的方法
kNN 演算法的 SQL 實現
OpenCV3中ORB特徵提取演算法的實現與分析
簡單說區塊鏈中的POW、POS、DPOS共識演算法及其優缺點
TSP問題—近似演算法
比TD、MC、MCTS指數級快,性能超越A3C、DDQN等模型,這篇RL演算法論文在Reddit上火了
基於Crypto++密碼庫的ECIES和ECDSA演算法的聯合使用
DBSCAN和Kmeans混合演算法定位投訴焦點區域
用機器學習構建O(N)複雜度的排序演算法,可在GPU和TPU上加速計算
使用DFA攻擊硬體的AES演算法,並從PlayStation Vita中提取硬體密鑰
Nature:利用機器學習演算法預測細胞如何修復CRISPR誘發的DNA斷裂
谷歌AI演算法通過OCR與NGrams提取和分析電視台內容傾向