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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《HTTPS权威指南》- SSL、TLS和密码学学习笔记

發(fā)布時間:2024/4/17 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《HTTPS权威指南》- SSL、TLS和密码学学习笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

iOS要開始強制推行HTTPS了,大家都開始學(xué)習(xí)HTTPS的相關(guān)知識,網(wǎng)上很多博文一上來就講對稱加密,非對稱加密,AES,RSA,和TLS和SSL協(xié)議。對于我這種沒怎么深入過網(wǎng)絡(luò)層的人來說全靠背!理解起來相當(dāng)痛苦。尤其是對稱加密,非對稱加密,私鑰加密,公鑰加密,證書,數(shù)字簽名,TLS和SSL是用來干嘛的,他們之間的關(guān)系,協(xié)議握手為啥要那么多,繞來繞去的,真是傻傻分不清楚。

這篇筆記就是為了理解上面所說的那些概念,知道上面提到的名詞到底是啥意思,之間啥關(guān)系,以及最重要最重要的,為什么協(xié)議要那么多步驟,這些步驟存在的意思是什么,他為什么就能實現(xiàn)安全性?他又是怎樣實現(xiàn)安全性的?

目錄:

  • 網(wǎng)絡(luò)層-OSI模型層
  • TLS和SSL之間的關(guān)系
  • 對稱加密(私鑰加密)
  • 非對稱加密(公鑰加密)
  • 數(shù)字簽名
  • 協(xié)議
  • 名稱簡寫及全稱

網(wǎng)絡(luò)層:


OSI模型層:

層號OSI層描述協(xié)議示例
7應(yīng)用層應(yīng)用數(shù)據(jù)HTTP、SMTP、IMAP
6表示層數(shù)據(jù)表示、轉(zhuǎn)換和加密SSL/TLS
5會話層多連接管理-
4傳輸層包或流的可靠傳輸TCP、UDP
3網(wǎng)絡(luò)層網(wǎng)絡(luò)節(jié)點間的路由與數(shù)據(jù)分發(fā)IP、IPSec
2數(shù)據(jù)鏈路層可靠的本地數(shù)據(jù)連接(LAN)以太網(wǎng)
1物理層直接物理數(shù)據(jù)連接(電纜)CAT5

TLS和SSL之間的關(guān)系:


SSL協(xié)議由Netscape公司開發(fā)
1995年年底發(fā)布SSL3
1996年5月TLS工作組成立,開始講SLL從Netscape遷移至IETF
1999年1月TLS1.0面市,為了取悅Microsoft,協(xié)議進行了更名(從SSL更成TLS)
2006年4月,TLS1.1問世
...

對稱加密(私鑰加密)


概念:是一種混淆算法,能讓數(shù)據(jù)在非安全信道上進行安全通信。為了保證通信安全,首先要得到雙方都認(rèn)可的加密算法和密鑰(雙方的密鑰相同)。
密鑰與加密算法:
數(shù)據(jù)在非安全信道上進行安全通信。為了保證通信安全,要用到密鑰和加密算法。
為何要密鑰?
即使攻擊者知曉了整個密碼系統(tǒng)除密鑰以外的所有情報,系統(tǒng)仍然應(yīng)當(dāng)能保證安全

  • 如果加密算法要得到廣泛使用,就必須讓其他人知道,當(dāng)越來越多的人知道,那敵人知道的可能性就會增加。
  • 沒有密鑰的簡單算法不便于在大群體中使用,每個人都可以解密所有人的通信。
  • 設(shè)計出優(yōu)秀的加密算法非常困難,一種算法想要更安全,就得經(jīng)過更多的曝光和審視。

如果加密算法足夠優(yōu)秀,攻擊者只有一種方法,那就是嘗試所有可能的解碼密鑰,俗稱窮舉密鑰搜索(exhaustive key search),基于這一點,我們可以說密文的安全性完全取決于密鑰,我們通過密鑰長度來衡量加密強度,如128位的密鑰有34*10^37種可能的組合。

密碼:

  • 序列密碼
    核心:生成一串稱為密鑰序列的無窮序列
    加密過程:將密鑰序列中的1字節(jié)與明文序列中的1字節(jié)進行異或操作
    解密過程:因為異或操作可逆,將密文序列中的1字節(jié)與密鑰序列中的相同字節(jié)進行異或操作。
    關(guān)鍵點:序列密碼決不能第二次相同的密鑰
    熟知的序列密碼:RC4(簡單,但以不再安全)
  • 分組密碼
    核心:每次加密一整塊數(shù)據(jù),只要使用相同的密鑰,每一個可能的輸入組合都有唯一的輸出。因此在輸入上制造一個小變化(例如在任意一處變換1位),從而得到大量變體。
    加密過程:接受輸入并生成看似雜亂無章的輸出。
    問題1:只能使用它們加密長度等于加密塊大小的數(shù)據(jù)。因此需要一個方法處理任意長度的數(shù)據(jù)(填充)
    問題2:對于相同的輸入,輸出是相同的,這種特性使許多攻擊成為可能。
    實踐中的應(yīng)用:使用分組密碼模式的加密方案(后面有說明)來使用分組密碼,來避免分組算法的問題,作為其他加密基元的基礎(chǔ)來使用(例如散列函數(shù),消息驗證,偽隨機數(shù)生成器,甚至序列密碼)
    熟知的分組密碼:AES
    • 填充
      追加額外的數(shù)據(jù)到明文的結(jié)尾,在TLS中,加密塊的最后1字節(jié)包含填充長度,指示填充多少字節(jié)(不包含填充長度字節(jié))

散列函數(shù):
定義:將任意長度的輸入轉(zhuǎn)化為定長度的輸出,散列函數(shù)的結(jié)果成為散列,適用于密碼學(xué)的散列函數(shù)有以下特性:

  • 單向性:給定一個散列,無法找到或者構(gòu)造出生成它的信息。
  • 弱抗碰撞性:給定一條消息和散列,無法找到一條不同的消息具有相同的散列。
  • 強抗碰撞性:計算上無法找到兩條散列相同的信息。

使用場合:以緊湊的方式表示并比較大量數(shù)據(jù),例如比較兩個文件。經(jīng)常被稱為指紋,信息摘要(簡單稱為摘要)
熟知的散列函數(shù):SHA1,SHA256

散列函數(shù)的強度最多只是散列長度的一半

消息驗證代碼:
在數(shù)據(jù)的散列與數(shù)據(jù)本身分開傳輸時(以防攻擊者可以同時修改數(shù)據(jù)和散列),散列函數(shù)可以用于驗證數(shù)據(jù)完整性。
用身份驗證擴展了散列函數(shù)的密碼學(xué)函數(shù):

  • MAC:只有擁有散列密鑰,才能生成合法的MAC
    通常與加密算法一起使用,如果沒有MAC,那攔截者即使無法解碼密文,也能修改密文。
  • 密鑰的散列(keyed-hash):HMAC,將散列密鑰和消息以一種安全的方式交織在一起。

分組密碼模式:
為了加密任意長度的數(shù)據(jù)而設(shè)置的密碼學(xué)方案。是分組密碼的擴展。所以的分組密碼模式都支持機密性。不過有些將其與身份驗證連接在一起,有些模式會將分組密碼直接轉(zhuǎn)成序列密碼。
它有多種輸出模式(以下只舉出2個):

  • 電碼本模式(ECB)
    核心:是最簡單的分組密碼模式,它只支持?jǐn)?shù)據(jù)長度正好是塊大小的整數(shù)倍的情況,如果數(shù)據(jù)不滿足這個條件就要事先填充。加密就是將數(shù)據(jù)按塊大小切分,然后分別加密每一塊。
    劣勢:因為分組密碼是確定的(輸入相同,輸出也相同),1、密文中出現(xiàn)的模式對應(yīng)明文中出現(xiàn)的模式。2、攻擊者可以發(fā)現(xiàn)信息是否重復(fù)。3、攻擊者可以觀察密文,并提交任意明文進行加密
  • 加密塊鏈接模式(CBC)
    基于ECB,SSl和TLS的主要模式,整個過程開始于生成一個隨機初始向量IV,長度與加密塊相等,加密前,明文的第一塊內(nèi)容與IV進行異或操作,這一步對明文做了掩飾,并保證密文不盡相同。對于下一個加密塊使用上一個塊的密文作為IV,以此類推。

    必須通過線路傳輸?shù)浇邮斩?#xff0c;這是解密必須的。

非對稱加密(公鑰加密)


為什么要有非對稱加密?
對稱加密無法滿足以下條件:

  • 隨著使用它的團體成員增加,團體中的成員要共享同一個密鑰,因此出現(xiàn)問題的幾率變大了
  • 我們可以兩兩一個密鑰,這樣3個人就需要3個密鑰,10個人就需要45個密鑰,1000個人就需要49500個密鑰!

而非對稱加密可以解決以上問題。
使用兩個密鑰,公鑰和私鑰,兩個密鑰之間存在一定的數(shù)學(xué)關(guān)系。
使用公鑰加密,只有對應(yīng)的私鑰能解。
使用私鑰加密,任何人都可以用他們相應(yīng)的公鑰解密(不提供機密性,可以用作數(shù)字簽名)。
使用說明:你可以廣泛并安全的分享你的公鑰,那么任何人都可以想你發(fā)送信息,只有你可以閱讀。如果他們使用各自的私鑰簽名,你還可以精確的知道消息出自何人之手。

注意:雖然公鑰密碼的屬性非常有趣,但它非常緩慢,不適用于數(shù)據(jù)量大的場景,因此往往部署于身份驗證和共享秘密的協(xié)商,這些秘密后續(xù)用于快速的對稱加密。

數(shù)字簽名


前面說過MAC就是一種電子簽名,它可以使用事先安全交換的散列密鑰驗證真實性,雖然這種校驗非常有用,但仍有不足,因為它仍然依賴于一個私有密鑰。
借助于公鑰密碼,數(shù)字簽名可以實現(xiàn)與現(xiàn)實生活中的手寫簽名類似,我們可以利用公鑰密碼的非對稱性設(shè)計出一種算法,使用私鑰對信息進行簽名,并使用對應(yīng)的公鑰驗證它。
實際的方式依照選擇公鑰的驗證密碼而不同,下面以RSA為例:
簽名過程:
1、將需要簽名的文檔用散列函數(shù)得到散列。
2、將散列和一些元數(shù)據(jù)進行編碼,例如使用的散列算法。
3、將編碼使用私鑰加密,其結(jié)果就是簽名。
4、追加到文檔中作為驗證的依據(jù)。
驗證過程:
1、接收方接收文檔,并用相同的散列算法算出散列。
2、使用公鑰解密,將散列解碼出來。
3、對比散列算法是否正確,散列的值是否一致。
RSA的強度取決于加密,散列以及編碼組件各自的強度。

協(xié)議


加密基元本身沒有什么用,例如加密和散列算法。我們只有將這些元素組合成方案和協(xié)議才能滿足復(fù)雜的安全需求。

實例場景:
Alice和Bob要通信。Mallory是個攻擊者。
我們假設(shè)協(xié)議允許交換任意數(shù)量的消息。因為對稱加密擅長對大量數(shù)據(jù)進行加密,所以選取我們最喜歡的AES算法來進行數(shù)據(jù)加密。使用AES,Alice和Bob可以安全的交換消息,Malloc看不到他們通信的內(nèi)容。但是這還不夠,因為Malloc還可以干其它事情,例如神不知鬼不覺的修改消息。為了解決這個問題,我們使用只有Alice和Bob知道的散列密鑰計算每個消息的MAC,在發(fā)送消息的同時,也發(fā)送消息的MAC。這時Mallory再也不能修改消息了,然而他仍然可以丟棄或者重發(fā)任意消息。為了解決這個問題,我們擴展協(xié)議,為每條消息標(biāo)記指定序號。最為重要的是,我們將序號作為MAC計算數(shù)據(jù)的一部分。如果發(fā)現(xiàn)序號出現(xiàn)空缺,就能知道消息丟了。如果發(fā)現(xiàn)序號重復(fù),就檢測重放攻擊。為了得到最佳效果,我們使用某個特殊消息來標(biāo)記會話結(jié)束。如果沒有這個消息,Mallory能夠悄悄的結(jié)束(截斷)會話。如果所有措施以到位,Mallory最多只能做到阻止Alice和Bob與其他人通信。我們對此無能為力。

到目前為止,有一大塊缺失:Alice和Bob如何協(xié)商得到需要的兩個密鑰(一個用于加密(AES的密鑰),一個用于檢測完整性(MAC的密鑰)),同時還要當(dāng)心Mallory?我們通過為協(xié)議添加兩個步驟來解決這個問題:

  • 使用公鑰密碼對會話進行身份驗證。
    舉個例子,Alice生成一個隨機數(shù),要求Bob對其簽名以證明真的是他,Bob也要求Alice做同樣的事情。
  • 使用密鑰交換方案對加密密鑰進行秘密協(xié)商。
    舉個例子,Alice可以生成所有密鑰,使用Bob的公鑰加密,再發(fā)送給Bob,這就是RSA密鑰交換的工作方式。

最后我們協(xié)議完工時的狀態(tài)是:

  • 以握手階段開始,包括身份驗證和密鑰交換
  • 數(shù)據(jù)交換階段,保存機密性和完整性
  • 以關(guān)閉序列結(jié)束。

站在宏觀的角度看,我們的協(xié)議與SSL和TLS完成的工作相似。

名詞簡寫及全稱:


SSL:secure socket layer 安全套接字層
TLS:transport layer security 傳輸層安全
IP:internet protocol 網(wǎng)絡(luò)協(xié)議
TCP:transmission control protocol 傳輸控制協(xié)議
PKI:public key infrastructure 公鑰基礎(chǔ)設(shè)施
OSI:open systems interconnection 開放系統(tǒng)互聯(lián)模型
AES:advanced encryption standard 高級加密標(biāo)準(zhǔn)
MAC:message authentication code 消息驗證代碼
HMAC:hash-based message authentication 基于散列的消息驗證代碼
CBC:cipher block chaining 加密塊鏈接
RSA:en.wikipedia.org/wiki/RSA
ECB:electromic codebook 電碼本
CBC:cipher block chaining 加密塊鏈接
IV:initialization vector 初始向量

我的簡書主頁:www.jianshu.com/users/b92ab…

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的《HTTPS权威指南》- SSL、TLS和密码学学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。