日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从Https破解角度分析Https

發布時間:2024/3/26 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从Https破解角度分析Https 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇文章跟大家討論一個比較有意思的問題:怎么破解https?大家都知道,現在幾乎整個互聯網都采用了https,不是https的網站某些瀏覽器還會給出警告。面試中也經常問到https,本文會深入https原理,一直講到https破解思路。

HTTPS

要想破解https,必須先知道https原理,下面我們先來講講https原理。

公私鑰

https的公私鑰經常在面試中出現,各種面經也會給出答案:https有兩個秘鑰,公鑰和私鑰,網站自己持有私鑰,用戶持有公鑰,網站用自己的私鑰加密數據發給用戶,用戶用公鑰解密數據。用戶要發信息就反過來,用戶用公鑰加密數據,網站用私鑰解密數據。這種加密和解密使用不同秘鑰的加密算法叫做非對稱加密。這個流程有點繞,下面舉例來說明下,假設網站A啟用了https,小明要來訪問這個網站了(以下例子僅為講解公私鑰用途,并非https真實流程,真實流程是“HTTPS握手流程”一節):

  • 網站A啟用https,自然有一對秘鑰,私鑰和公鑰,私鑰他自己藏起來了,公鑰任何訪問用戶都可以拿到
  • 小明訪問網站A,拿到了A的公鑰
  • 小明要給網站A發消息就用公鑰給信息加密,然后發給網站A
  • 網站A拿到密文后,用自己的私鑰解密得到消息內容
  • 網站A要給小明回信,用自己的私鑰加密信息,發送給小明
  • 小明拿到密文后,用自己手上的公鑰解密信息
  • 通過上面的流程我們可以看出,由于公鑰是公開的,所以網站私鑰加密的信息其實所有用戶都可以解開。**在這一個階段,保護的其實是用戶發給服務器的數據,因為用戶加密的數據必須要服務器的私鑰才能解開。**這里大家想一個有意思的問題:既然所有用戶都能拿到公鑰,那是不是小明加密的信息,小紅也能解開呢,因為小紅也有公鑰啊?如果小紅也能解開,那小紅只要截獲了小明的流量,不就知道內容了嗎?這個問題簡化一下就是,**公鑰加密的信息用同一個公鑰能解開嗎?答案是不能!**要知道這個原因必須要知道RSA算法,我們后面會講,先一步步來。

    數字證書

    前面小明訪問網站A的流程是有隱患,可以被攻擊的。假設小紅是個中間人黑客,現在想攻擊小明,她偷偷在小明電腦上做了手腳,將網站A的公鑰換成了自己的:

  • 小明訪問網站A,網站A給小明發送公鑰,但是這一步被小紅攻擊了
  • 小紅劫持了小明的流量,將網站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函數,加密解密相對更快,這種設計是從效率的角度考慮的。

    數字簽名

    數字簽名其實很簡單,是用來保障信息的完整性和正確性的:

  • 小明先將明文信息用摘要算法生成一個摘要,這個算法類似于MD5,SHA-1,SHA-2,就是一個不能反解的hash函數
  • 小明用公鑰對這個摘要進行加密
  • 小明將這個簽名附加在內容后面一起發給服務端
  • 服務端接收到簽名后,用私鑰解密出摘要
  • 服務端對內容進行同樣的摘要算法,得出摘要
  • 服務端算出的摘要如果跟簽名里面的一樣,則內容完整,沒有被篡改
  • HTTPS握手流程

    前面幾個知識點其實已經把https的關鍵點都講了,下面我們來總結下https握手流程:

  • 小明向網站A發起請求
  • 網站A將CA數字證書返回給客戶端,證書里面有網站A的公鑰
  • 小明通過自己電腦內置的CA公鑰解密證書,拿到網站A的公鑰(CA公鑰內置在瀏覽器中)
  • 小明生成隨機的對稱秘鑰,也就是會話秘鑰。會話秘鑰一定要客戶端生成,因為前面說了,這里公私鑰只能保證客戶端發給網站信息的安全,公鑰加密的信息只有私鑰才能解開,私鑰網站藏起來了,所以其他人拿到信息也解不開。但是如果網站生成會話秘鑰,用他的私鑰加密,那所有人都有公鑰,所有人都能解開了。
  • 小明將會話秘鑰通過網站A的公鑰加密,發送給網站A
  • 接下來網站A和小明使用會話秘鑰進行HTTP通信
  • RSA算法

    前面我們提到過公鑰加密的信息用同一個公鑰也解不開,只能用私鑰解密,這其實就是非對稱加密的核心機密,下面我們來講講這個機密是怎么做到的,這其實就是RSA算法。RSA算法計算流程如下:

  • 隨機選取兩個質數p和q
  • 計算 n = pq
  • 計算 φ(n) = (p-1)(q-1)
  • 找一個與φ(n)互質的小奇數e,互質是指兩個數的公約數只有1
  • 對模φ(n),計算e的乘法逆元d,即找到一個d,使下列等式成立:(e*d) mod φ(n) = 1
  • 得到公鑰:(e, n),私鑰: (d, n)
  • 加密過程:c = (m^e) mod n, (c為加密后的密文,m為原文)
  • 解密過程:m = (c^d) mod n
  • 第七步說明下,m的e次方,m就是我們發送的原文,可以是文本,json,圖片,雖然形式多樣,但是在計算機里面都是二進制01,所以可以轉換成數字求次方。下面我們找兩個數來試一下這個算法:

  • 隨便選兩個質數23和61
  • 計算 n = 23 * 61 = 1403
  • 計算 φ(n) = (23-1) * (61-1) = 22 * 60 = 1320
  • 找一個與φ(n)互質的小奇數e,我們選7
  • 計算乘法逆元d,我這里算好的是 d =943。對乘法逆元感興趣的朋友可以網上搜搜怎么算,因為不是本文主題,我就不展開了。
  • 得到公鑰(7, 1403),私鑰(943, 1403)
  • 我們用公鑰隨便加密一個5試試,加密 c = (m^e) mod n = (5^7) % 1403 = 78125 % 1403 = 960
  • 私鑰解密: m = (c^d) mod n = (960^943) % 1403 = 5,(960^943)這個數字超級大,一般計算器算不出來,JS計算更不行,我是用這個網站算的:https://defuse.ca/big-number-…
  • 再試試私鑰加密:c = (m^d) mod n = (5^943) % 1403 = 283
  • 公鑰解密: m = (c^e) mod n = (283 ^ 7) % 1403 = 5
  • 知道了算法,我們就可以來解答前面的那個問題了,為什么公鑰自己加密的數據自己還解不出來?注意看加密算法(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:

  • 找出一個算法,能夠高效的將大數n拆分成兩個質數。可惜目前數學界也還沒找到這個算法。
  • 沒有好辦法就用笨辦法,窮舉,從2開始遍歷p, q,直到他們的乘積為n為止。據說有人花了5個月時間算出了一個512 bits的n,然后人家早就換了秘鑰,RSA還升級到了1024 bits…
  • 總結

  • HTTPS其實就是HTTP+RSA+數字證書+會話秘鑰
  • RSA實現了非對稱加密,可以讓公鑰任意分發,私鑰即使丟失了,也可以迅速換一對公私鑰。解決了對稱加密密碼本的漏洞。
  • 數字證書保證了分發的公鑰不能被篡改。
  • CA保證了數字證書的安全性。
  • CA的安全性由誰保證是個玄學
  • 會話秘鑰是對稱加密,目的是為了加快加密解密速度
  • RSA算法精髓:
  • 加密使用模運算,完全不能反解
  • n取一個超大數,超出了數學界理論極限和計算機的工業極限
  • 破解HTTPS三條路:
  • 黑掉CA,將它名下證書的公鑰都換成你的,方法勿論。。。
  • 數學之神附體,找到高效大數分解算法,分分鐘算出p,q
  • 圖靈附體,研發出超快的量子計算機,秒秒鐘算出p,q
  • 自己網站沒開https的趕緊回去開,記得找個靠譜的CA買證書
  • 感謝閱讀

    博主在此給大家安利一款分享學習資料的app,此app的主要就是收集了互聯網上的各種學習資料做整合并免費分享。里面涵蓋了Android、java、python、數據結構、算法、前端、爬蟲、大數據、深度學習、UI等等技術,包含M課網課程、某課堂VIP課程、各培訓機構課程、某魚的一些付費課程以及算法面試資料,并且正在不斷更新中,你想要的學習資料幾乎都有,當然你也可以加入我們的技術Q群獲取資料:687667883,任何課程問題可直接咨詢群主。
    目前對接的課程論壇如下,您可以提前了解下有哪些課程:
    鏈接資源如下:
    ????享學app資源對接論壇一(IT碼上發)
    ????享學app資源對接論壇二(學途無憂)

    目前app已經上架小米應用市場,可搜索“享學”即可下載,同時你也可掃碼以下二維碼進行下載:

    總結

    以上是生活随笔為你收集整理的从Https破解角度分析Https的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。