从Https破解角度分析Https
這篇文章跟大家討論一個比較有意思的問題:怎么破解https?大家都知道,現在幾乎整個互聯網都采用了https,不是https的網站某些瀏覽器還會給出警告。面試中也經常問到https,本文會深入https原理,一直講到https破解思路。
HTTPS
要想破解https,必須先知道https原理,下面我們先來講講https原理。
公私鑰
https的公私鑰經常在面試中出現,各種面經也會給出答案:https有兩個秘鑰,公鑰和私鑰,網站自己持有私鑰,用戶持有公鑰,網站用自己的私鑰加密數據發給用戶,用戶用公鑰解密數據。用戶要發信息就反過來,用戶用公鑰加密數據,網站用私鑰解密數據。這種加密和解密使用不同秘鑰的加密算法叫做非對稱加密。這個流程有點繞,下面舉例來說明下,假設網站A啟用了https,小明要來訪問這個網站了(以下例子僅為講解公私鑰用途,并非https真實流程,真實流程是“HTTPS握手流程”一節):
通過上面的流程我們可以看出,由于公鑰是公開的,所以網站私鑰加密的信息其實所有用戶都可以解開。**在這一個階段,保護的其實是用戶發給服務器的數據,因為用戶加密的數據必須要服務器的私鑰才能解開。**這里大家想一個有意思的問題:既然所有用戶都能拿到公鑰,那是不是小明加密的信息,小紅也能解開呢,因為小紅也有公鑰啊?如果小紅也能解開,那小紅只要截獲了小明的流量,不就知道內容了嗎?這個問題簡化一下就是,**公鑰加密的信息用同一個公鑰能解開嗎?答案是不能!**要知道這個原因必須要知道RSA算法,我們后面會講,先一步步來。
數字證書
前面小明訪問網站A的流程是有隱患,可以被攻擊的。假設小紅是個中間人黑客,現在想攻擊小明,她偷偷在小明電腦上做了手腳,將網站A的公鑰換成了自己的:
可以看到僅僅是公私鑰還是不能應對中間人的流量劫持,傳輸過程中信息被截獲仍然會被破解。這個攻擊能成功的關鍵點就是小明拿到了錯誤的公鑰,所以需要一種機制來保證小明拿到正確的網站A公鑰,這個機制就是數字證書。數字證書說開了很簡單,他里面核心東西就一個,就是網站A的公鑰。網站A將自己的公鑰放到數字證書里面發送給小明,小明一看,這個公鑰是證書認證的,可信,就用這個了。即使小紅替換了公鑰,因為小紅的公鑰沒有證書認證,所以小明也可以識別出這個假冒貨。
那數字證書的安全性又是怎么保證的呢,小紅再偽造一個數字證書不就行了嗎?這就要說到CA(CertificateAuthority)了,CA是頒發數字證書的機構,CA有自己的公私鑰。CA用自己的私鑰加密一個信息,這個信息就是網站A的公鑰,然后發送給用戶,用戶拿到這個信息用CA的公鑰解密,就拿到了正確的網站A的公鑰了。所以,數字證書其實就是CA私鑰加密過的網站公鑰。小紅沒有CA的私鑰,她就偽造不出來網站的數字證書了,也就沒法替換小明拿到的公鑰了。所以,數字證書其實保證了網站公鑰的正確性,CA保證了數字證書的安全性。
既然CA保證了數字證書的安全性,那誰來保證CA的安全性呢?假設有個東西X保證了CA的安全性,那誰來保證X的安全性呢?感覺這個信任鏈條可以無窮盡呢。。。現實中,CA的安全級別非常高,他的安全不僅僅有技術手段,還有法律,物理措施等。反過來說,回到本文的主題,破解https,到這里我們其實有了第一個思路:黑掉CA!你就可以將它名下所有證書的公鑰都替換成自己的,解密使用他證書的所有網站。
評論區有朋友提到,Charles可以解密https,這個原理不就跟小紅攻擊小明的原理一樣嘛。Charles解密https的前提是你要安裝他的證書,安裝了他的證書,你其實就相當于信任了Charles這個假的CA。攻擊流程將前面的小紅換成Charles就行了。
會話秘鑰
公私鑰的加密解密確實很安全,但是他的速度很慢,如果每條信息都這么操作,會影響整個交流效率,所以當我們跟https建立連接后,通過公私鑰交換的信息其實只有一個:會話秘鑰。會話秘鑰不是非對稱加密,而是對稱加密。對稱加密在某些影視作品中很常見:某主人公得到一個藏寶圖,苦于藏寶圖是密碼寫的,看不懂,百般無奈下,想起祖傳的某某書籍,拿到一對照,那本書剛好可以解密藏寶圖密碼。那這本書其實就是密碼本,二戰中很多信息加密就用的密碼本的方式,通過截獲密碼本獲取對方軍事情報的事情也不少。加密解密都用密碼本,其實就是用了同一個秘鑰,這就是對稱加密。用計算機領域的話來說,這個密碼本不就是一個hash函數嘛,這個函數將一個字符映射成另外一個字符。舉個例子,我們加密的hash函數就是將字符后移三位,a -> d, b -> e 這種,那"hello"就變成了:
h -> k
e -> h
l -> o
l -> o
o -> r
“hello"就變成了"khoor”,那攻擊者只要知道了你這個算法,再反算回來,前移三位就解密了。所以對稱加密相對來說并不安全,但是,如果我能保證他的密碼本(也就是秘鑰)是安全的,對稱加密也可以是安全的。那對稱加密的秘鑰怎么保證安全呢?用公私鑰再加一次密啊!所以https連接后,公私鑰交換的信息只有一個,那就是對稱加密秘鑰,也就是會話秘鑰。對稱加密的算法就是一個hash函數,加密解密相對更快,這種設計是從效率的角度考慮的。
數字簽名
數字簽名其實很簡單,是用來保障信息的完整性和正確性的:
HTTPS握手流程
前面幾個知識點其實已經把https的關鍵點都講了,下面我們來總結下https握手流程:
RSA算法
前面我們提到過公鑰加密的信息用同一個公鑰也解不開,只能用私鑰解密,這其實就是非對稱加密的核心機密,下面我們來講講這個機密是怎么做到的,這其實就是RSA算法。RSA算法計算流程如下:
第七步說明下,m的e次方,m就是我們發送的原文,可以是文本,json,圖片,雖然形式多樣,但是在計算機里面都是二進制01,所以可以轉換成數字求次方。下面我們找兩個數來試一下這個算法:
知道了算法,我們就可以來解答前面的那個問題了,為什么公鑰自己加密的數據自己還解不出來?注意看加密算法(m^e) mod n這是個模運算啊,模運算是不能反解的。比如5對4取模,5%4=1,但是反過來,知道x%4=1,求x。這個x可以有無限個,5,9,13,17。。。所以即使你有公鑰(e,n),和密文c,你也不知道(m^e)到底取哪個值,是反解不出來的,這就是非對稱加密的核心機密,私鑰加密同理,自己加密的自己也反解不出來。
RSA破解思路
所謂破解RSA,其實就是通過公開的信息推測出他藏起來的信息,具體來說就是已知公鑰(e, n)求私鑰(d,n),也就是求d。要求d,其實就是反解(e*d) mod φ(n) = 1,要反解這個式子,就必須知道φ(n),因為φ(n) = (p-1)(q-1),所以必須知道p和q。我們知道n=pq,而且n是已知的,所以還是有可能知道p和q的。所以破解RSA其實就是一句話:n是已知的,將n拆成兩個質數之積就行了。說起來簡單,做起來非常難!因為實際使用時,n非常大,現在好多地方用的n都是2048 bits甚至4096 bits,這個數字轉換成十進制也有幾百位上千位長,做個對比,JS整數最多支持53 bits。。。所以現實中有兩條路來破解RSA:
總結
感謝閱讀
博主在此給大家安利一款分享學習資料的app,此app的主要就是收集了互聯網上的各種學習資料做整合并免費分享。里面涵蓋了Android、java、python、數據結構、算法、前端、爬蟲、大數據、深度學習、UI等等技術,包含M課網課程、某課堂VIP課程、各培訓機構課程、某魚的一些付費課程以及算法面試資料,并且正在不斷更新中,你想要的學習資料幾乎都有,當然你也可以加入我們的技術Q群獲取資料:687667883,任何課程問題可直接咨詢群主。
目前對接的課程論壇如下,您可以提前了解下有哪些課程:
鏈接資源如下:
????享學app資源對接論壇一(IT碼上發)
????享學app資源對接論壇二(學途無憂)
目前app已經上架小米應用市場,可搜索“享學”即可下載,同時你也可掃碼以下二維碼進行下載:
總結
以上是生活随笔為你收集整理的从Https破解角度分析Https的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 褒贬义词词典
- 下一篇: 【java基础知识】集合类(含Colle