IT技術(shu)互動(dong)交流平台

上海快3官网

作者︰佚名  發布(bu)ji)掌qi)︰2020-02-20 16:35:18

最後一篇了,如果還沒(mei)看過前兩(liang)篇的,最好(hao)先翻回去看看,因為(wei)這最後一篇的na)諶菔牆  誶傲liang)篇的基礎(chu)之上的。本(ben)篇的na)諶蒞 茉俊?婊shu)、PGP、SSL/TLS,最後再講(jiang)講(jiang)密碼技術(shu)的現狀和tu)窒?裕 yi)及簡單介紹一下(xia)量子密碼和量子計算機。
密鑰
在使(shi)用對稱密碼、公鑰密碼、消息認證碼、數(shu)字簽(qian)名等密碼技術(shu)時(shi),都需要密鑰。密鑰長度一般不(bu)能(neng)太(tai)短(duan),太(tai)短(duan)意味著密鑰空間太(tai)小,那麼,進行暴力破解就(jiu)很容易(yi)。
DES的密鑰長度為(wei)56比(bi)特(7字節),密鑰空間為(wei)2^56,在現有的計算能(neng)力下(xia),還是qian)冉先菀yi)被暴力破解的。三重DES的DES-EDE3的密 鑰長度為(wei)168比(bi)特(21字節),是DES的密鑰長度的三倍多,但是密鑰空間可(ke)不(bu)是三倍這麼簡單,DES-EDE3的密鑰空間為(wei)2^168,整整是DES 密鑰空間的2^112倍,這麼大的密鑰空間,以(yi)現有的計算能(neng)力,還無(wu)法(fa)在現實的時(shi)間里被暴力破解。AES的密鑰長度則可(ke)以(yi)從128、192和256比(bi)特中(zhong) 進行選擇,三者的密鑰空間也是不(bu)小的。
密鑰和明文其實是等價(jia)的,因為(wei)對攻擊者來(lai)說,得到(dao)密鑰就(jiu)等價(jia)于得到(dao)明文。
各種不(bu)同的密鑰
從前兩(liang)篇文章我們就(jiu)知(zhi)道,密鑰分(fen)很多種類,這里我們做(zuo)一下(xia)整理。
在對稱密碼中(zhong),加密和解密使(shi)用的是相同的 共享密鑰 。而在公鑰密碼中(zhong),加密用的是 公鑰 ,解密用的則是 私(si)鑰 ,相對應的公鑰和私(si)鑰組為(wei) 密鑰對 。消息認證碼使(shi)用的也是共享密鑰。而數(shu)字簽(qian)名使(shi)用的和公鑰密碼一樣(yang)是密鑰對,用私(si)鑰簽(qian)名,用公鑰驗證簽(qian)名。混合密碼系統中(zhong)還使(shi)用了一次性密鑰,稱為(wei) 會(hui)話密鑰 。而相對于每(mei)次通信都更換的會(hui)話密鑰,一直被重復使(shi)用的密碼則稱為(wei) 主密鑰 。用于加密內容的密鑰稱為(wei)CEK (Contents Encrypting Key,內容加密密鑰);相對地,用于加密密鑰的密鑰則稱為(wei) KEK (Key Encrypting Key,密鑰加密密鑰)。CEK 和 KEK 的用法(fa)可(ke)以(yi)如下(xia)圖(tu)所(suo)示︰

在很多情況下(xia),會(hui)話密鑰都是qian)蛔魑wei) CEK 使(shi)用的,而主密鑰則是qian)蛔魑wei) KEK 使(shi)用的。
密鑰的管理
生成密鑰最好(hao)的方法(fa)就(jiu)是使(shi)用真正的隨機數(shu),因為(wei)密鑰需要具備不(bu)可(ke)預測性。不(bu)過,一般我們qian)際鞘shi)用偽隨機數(shu)生成器來(lai)生成密鑰。另外,密碼學(xue)用途(tu)的偽隨機數(shu)生成器必須(xu)是專門針對密碼學(xue)用途(tu)而設計的。畢竟,生成偽隨機數(shu)的算法(fa)很多,但有些並不(bu)具備不(bu)可(ke)預測性。
有時(shi)我們也bu)hui)使(shi)用容易(yi)記住(zhu)的 口令 (password 或 passphrase)來(lai)生成密鑰。passphrase 指的是一種由多個單詞組成的較長的 passwrod,在此si) liang)者統稱為(wei)口令。嚴xi)窶lai)說,很少(shao)直接用mei)諏罾lai)作為(wei)密鑰使(shi)用,一般都是將口令輸入單向散列(lie)函數(shu),然後將得到(dao)的散列(lie)值(zhi)作為(wei)密鑰使(shi)用。 而在使(shi)用mei)諏釕擅茉渴shi),為(wei)了防止字zhi)涔?鰨 枰 誑諏釕廈娓郊右淮 莆wei) 鹽 (salt)的隨機數(shu),然後再將其輸入單向散列(lie)函數(shu)。這種方法(fa)稱為(wei)“基于口令的密碼”(Password Based Encryption, PBE)。關于 PBE 稍後再詳(xiang)細(xi)介紹。
對于共享密鑰,就(jiu)會(hui)存在密鑰配送問題。在密碼篇就(jiu)提(ti)到(dao)幾種解決方案︰ 事先共享密鑰 、 使(shi)用密鑰分(fen)配中(zhong)心 、 使(shi)用公鑰密碼 、 Diffie-Hellman密鑰交換 。關于Diffie-Hellman密鑰交換的原理,之前的文章沒(mei)講(jiang),在本(ben)篇稍後會(hui)詳(xiang)細(xi)介紹。
為(wei)了提(ti)高通信的機密性,還可(ke)以(yi)采用 密鑰更新 (key updating)的方法(fa)。這種方法(fa)就(jiu)是在使(shi)用共享密鑰進行通信的過程中(zhong),定(ding)期(qi)改變密鑰。例如,在更新密鑰時(shi),發送者和接you)照呤shi)用單向散列(lie)函數(shu)計算當(dang)前密鑰的散列(lie)值(zhi),並將這個散列(lie)值(zhi)用作新的密鑰。簡單說,就(jiu)是 用當(dang)前密鑰的散列(lie)值(zhi)作為(wei)下(xia)一個密鑰 。
除了只(zhi)使(shi)用一次的會(hui)話密鑰,其他(ta)密鑰基本(ben)都需要考慮 保存密鑰 的問題。尤(you)其對于共享密鑰來(lai)說,很多應用都需要將密鑰保存在客戶端(duan),例如移(yi)動(dong)App,要麼將密鑰硬編碼在代(dai)碼里,或者保存在文件中(zhong),但無(wu)論(lun)哪(na)種方式,應用一旦被反編譯,密鑰就(jiu)存在泄漏的風險。以(yi)防密鑰被盜,可(ke)以(yi)使(shi)用 將密鑰加密後保存 的方法(fa)。但要將密鑰加密,必然需要另一個密鑰,即 KEK。那麼,KEK 又如何(he)保存?這問題還真不(bu)好(hao)解決。不(bu)過,對密鑰進行加密的方法(fa)卻可(ke)以(yi) 減少(shao)需要保管的密鑰數(shu)量 。比(bi)如,假設平台系統接you)肓0萬個應用,每(mei)個應用都有一個自己的密鑰,即系統需要保管10萬個密鑰。那麼,用 KEK 對這10萬個密鑰進行加密,這樣(yang)的話只(zhi)要保管這一個 KEK 就(jiu)可(ke)以(yi)了。即是說,不(bu)需要確保多個密鑰(CEK)的機密性,而只(zhi)需要確保一個密鑰(KEK)的機密性就(jiu)可(ke)以(yi)了。這和認證機構的層級化非(fei)常相似。在後者中(zhong), 我們不(bu)需要信任多個認證機構,而只(zhi)需要信任一個根(gen) CA 就(jiu)可(ke)以(yi)了。
Diffie-Hellman密鑰交換
通過Diffie-Hellman密鑰交換算法(fa),通信雙(shuang)方僅通過交換一些可(ke)以(yi)公開的信息就(jiu)能(neng)夠生成出共享的秘(mi)密數(shu)字,而這一秘(mi)密數(shu)字就(jiu)可(ke)以(yi)被用作 對稱密碼的密鑰。雖然這種方法(fa)名字叫“密鑰交換”,但實際上雙(shuang)方jiang) mei)有真正交換密鑰,而是通過計算生成出了一個相同的共享密鑰。因此,這種方法(fa)也稱為(wei)** Diffie-Hellman密鑰協商(shang)**。
Diffie-Hellman密鑰交換的步驟如下(xia)︰

Alice 向 Bob 發送兩(liang)個質數(shu) P 和 G
P 必須(xu)是一個非(fei)常大的質數(shu),而 G 則是一個和 P 相關的數(shu),稱為(wei) 生成元 (generator)。G 可(ke)以(yi)是一個較小的數(shu)字。
Alice 生成一個隨機數(shu) A
A 是一個 1 ~ P-2 之間的整數(shu)。這個數(shu)是一個只(zhi)有 Alice 知(zhi)道的秘(mi)密數(shu)字。
Bob 生成一個隨機數(shu) B
B 也是一個 1 ~ P-2 之間的整數(shu)。這個數(shu)是一個只(zhi)有 Bob 才知(zhi)道的秘(mi)密數(shu)字。
Alice 將 G^A mod P 計算結果的數(shu)發送給(gei) Bob
Bob 將 G^B mod P 計算結果的數(shu)發送給(gei) Alice
Alice 用 Bob 發過來(lai)的數(shu)計算 A 次方jiang)?mod P
這個數(shu)就(jiu)是共享密鑰。Alice 計算的密鑰 = (G^B mod P)^A mod P = G^(A*B) mod P
Bob 用 Alice 發過來(lai)的數(shu)計算 B 次方jiang)?mod P
Bob 計算的密鑰 = (G^A mod P)^B mod P = G^(A*B) mod P = Alice 計算的密鑰。可(ke)見(jian)兩(liang)方計算的密鑰是相等的。

關于第1步提(ti)到(dao)的生成元是什(shi)麼呢?先來(lai)看一張(zhang)表,假設 P = 13︰

其中(zhong),2、6、7、11都是13的生成元。這幾個數(shu)有什(shi)麼性質呢?從上表可(ke)以(yi)發現,這幾個數(shu)的乘方結果中(zhong)都出現了1~12的全部整數(shu)。也就(jiu)是 說,P 的生成元的乘方結果與 1 ~ P-1 中(zhong)的數(shu)字是一一對應的。正是因為(wei)具有這樣(yang)一一對應的關系,Alice 才能(neng)夠從 1 ~ P-2 的範圍(wei)中(zhong)隨機選擇一個數(shu)字(之所(suo)以(yi)不(bu)能(neng)選擇 P-1,是因為(wei) G^(P-1) mod P 的值(zhi)一定(ding)是等于1的)。
最後,需要清楚(chu),針對Diffie-Hellman密鑰交換是可(ke)以(yi)發動(dong)中(zhong)間人攻擊的。而為(wei)了防止中(zhong)間人攻擊,可(ke)以(yi)使(shi)用數(shu)字簽(qian)名、證書等方法(fa)來(lai)應對。
基于口令的密碼(PBE)
基于口令的密碼(Password Based Encryption,PBE)就(jiu)是一種根(gen)據口令生成密鑰並用該(gai)密鑰進行加密的方法(fa)。
PBE 的加密可(ke)以(yi)用下(xia)圖(tu)來(lai)表示︰

主要有三個步驟︰
生成 KEK
首先,通過偽隨機數(shu)生成器生成一個被huai)莆wei) 鹽 (salt)的隨機數(shu)。然後,將鹽和口令一起輸入單向散列(lie)函數(shu),輸出的結果就(jiu)是 KEK。鹽是一種用于防御字zhi)涔?韉幕啤br />生成會(hui)話密鑰並加密
會(hui)話密鑰 CEK 也是通過偽隨機數(shu)生成器來(lai)生成,生成之後使(shi)用 KEK 對其進行加密,然後將加密後的會(hui)話密鑰和鹽一起保存在安全的地方。
加密消息
最後,使(shi)用 CEK 對消息進行加密。
而 PBE 解密的過程則如下(xia)圖(tu)︰

解密主要也是有三個步驟︰
重建KEK
將之前保存下(xia)來(lai)的鹽和口令一起輸入單向散列(lie)函數(shu),得到(dao)的散列(lie)值(zhi)就(jiu)是 KEK 了。
解密會(hui)話密鑰
再將之前保存下(xia)來(lai)的已(yi)加密的會(hui)話密鑰用 KEK 進行解密,就(jiu)能(neng)得到(dao)會(hui)話密鑰 CEK 了。
解密消息
最後,用已(yi)解密的 CEK 對密文進行解密即可(ke)。
另外,在生成 KEK 時(shi),通過多次使(shi)用單向散列(lie)函數(shu)可(ke)以(yi)提(ti)高安全性。
隨機數(shu)
有哪(na)些場景使(shi)用到(dao)隨機數(shu)呢?主要可(ke)能(neng)有以(yi)下(xia)這些︰
生成密鑰
生成密鑰對
生成初(chu)始化向量(IV)
生成nonce
生成鹽
隨機數(shu)的性質shou)饕 fen)為(wei)三類︰
隨機性 ︰不(bu)存在統計學(xue)偏差,是完全雜亂的數(shu)列(lie)。
不(bu)可(ke)預測性 ︰不(bu)能(neng)從過去的數(shu)列(lie)推測出下(xia)一個出現zhi)氖shu)。
不(bu)可(ke)重現zhong)︰除非(fei)將數(shu)列(lie)本(ben)身(shen)保存下(xia)來(lai),否(fu)則不(bu)能(neng)重現相同的數(shu)列(lie)。
上面三個性質shou)zhong),越(yue)往(wang)下(xia)就(jiu)越(yue)嚴xi)瘛>弒桿婊裕 bu)代(dai)表一定(ding)具備不(bu)可(ke)預測性。具備不(bu)可(ke)預測性的數(shu)列(lie),則一定(ding)具備隨機性。具備不(bu)可(ke)重現zhong)緣氖shu)列(lie),也一定(ding)具備不(bu)可(ke)預測性和隨機性。在書中(zhong),將這三個性質的隨機數(shu)按(an)順序分(fen)別命名為(wei)“弱偽隨機數(shu)”、“強偽隨機數(shu)”和“真隨機數(shu)”。
偽隨機數(shu)生成器
隨機數(shu)可(ke)以(yi)通過硬bu)lai)生成,也可(ke)以(yi)通過軟件來(lai)生成。通過硬bu)傻乃婊shu)列(lie)一般都是真隨機數(shu),是從不(bu)可(ke)重現zhi)奈錮硐窒籩zhong)獲取信息而生成數(shu)列(lie)的,比(bi)如周(zhou)圍(wei)的溫度和聲音的變化、用mei)?yi)動(dong)鼠標(biao)的位置信息、鍵盤輸入的時(shi)間間隔、放射(she)線測量儀的輸出值(zhi)等。像這樣(yang)的硬bu)璞賦莆wei) 隨機數(shu)生成器 (Random Number Generator,RNG)。而生成隨機數(shu)的軟件則稱為(wei) 偽隨機數(shu)生成器 (Pseudo Random Number Generator,PRNG)。因為(wei)僅靠軟件無(wu)法(fa)生成真隨機數(shu),因為(wei)要加上一個“偽”字。
偽隨機數(shu)生成器具有“內部狀態”,並根(gen)據外部輸入的“種子”來(lai)生成偽隨機數(shu)列(lie),如下(xia)圖(tu)︰

偽隨機數(shu)生成器的 內部狀態 ,是指偽隨機數(shu)生成器所(suo)管理的na)詿嬤zhong)的數(shu)值(zhi)。這個數(shu)值(zhi)在每(mei)次生成隨機數(shu)後都會(hui)改變。而 種子 是用來(lai)初(chu)始化內部狀態的。偽隨機數(shu)生成器是公開的,但種子you)切枰 C艿模 餼jiu)好(hao)像密碼算法(fa)是公開的,但密鑰是qian)C艿摹br />具體的偽隨機數(shu)生成器
具體的偽隨機數(shu)生成器有很多,書中(zhong)介紹了五種︰雜亂的方法(fa)、線性同余法(fa)、單向散列(lie)函數(shu)法(fa)、密碼法(fa)、ANSI X9.17。
雜亂的方法(fa)
雜亂的方法(fa)就(jiu)是使(shi)用雜亂無(wu)章的算法(fa)來(lai)生成隨機數(shu),但這種方法(fa)其實並不(bu)可(ke)取。一是因為(wei)復雜算法(fa)所(suo)生成的數(shu)列(lie)大多數(shu)具有很短(duan)的周(zhou)期(qi)(即短(duan)數(shu)列(lie)的不(bu)斷重復);二是因為(wei)如果程序員不(bu)能(neng)夠理解算法(fa)的詳(xiang)細(xi)內容,那麼就(jiu)無(wu)法(fa)判斷所(suo)生成的隨機數(shu)是否(fu)具備不(bu)可(ke)預測性。
線性同余法(fa)
線性同余法(fa)就(jiu)是將當(dang)前的偽隨機數(shu)值(zhi)乘以(yi) A 再加上 C,然後將除以(yi) M 得到(dao)的余數(shu)作為(wei)下(xia)一個偽隨機數(shu)。其中(zhong),A、C、M都是常量,且 A 和 C 需要小于 M。C 語言的庫函數(shu) rand,以(yi)及Java 的 Random 類,都采用了線性同余法(fa)。線性同余法(fa)並不(bu)具備不(bu)可(ke)預測性,因此不(bu)可(ke)以(yi)用于密碼技術(shu)。

單向散列(lie)函數(shu)法(fa)
使(shi)用單向散列(lie)函數(shu)可(ke)以(yi)編寫出具備不(bu)可(ke)預測性的偽隨機數(shu)列(lie)(即強偽隨機數(shu))的偽隨機數(shu)生成器。單向散列(lie)函數(shu)的單向性yun)侵zhi)撐偽隨機數(shu)生成器不(bu)可(ke)預測性的基礎(chu)。

密碼法(fa)
也可(ke)以(yi)使(shi)用密碼來(lai)編寫能(neng)夠生成強偽隨機數(shu)的偽隨機數(shu)生成器。既(ji)可(ke)以(yi)使(shi)用 AES 等對稱密碼,也可(ke)以(yi)使(shi)用 RSA 等公鑰密碼。密碼的機密性yun)侵zhi)撐偽隨機數(shu)生成器不(bu)可(ke)預測性的基礎(chu)。

 


ANSI X9.17
ANSI X9.17 偽隨機數(shu)生成器的結構則有點(dian)復雜,PGP 密碼軟件就(jiu)使(shi)用了這種方法(fa)。

PGP
PGP 將多種密碼技術(shu)進行了完美的組合,其具備了現代(dai)密碼軟件所(suo)必需的幾fu)躒 抗δneng),包括但不(bu)限于︰對稱密碼、公鑰密碼、數(shu)字簽(qian)名、單向散列(lie)函數(shu)、證書、壓(ya)縮、大文件的拆分(fen)和拼(pin)合、鑰匙串管理等。
生成密鑰對
要在 PGP 中(zhong)進行加密和數(shu)字簽(qian)名,需要先生成自己的密鑰對。下(xia)圖(tu)展示了從命令行生成密鑰的過程,其中(zhong),粗體為(wei)用mei) 淙氳哪(na)諶藎br />
加密和解密
使(shi)用 PGP 進行加密的過程如下(xia)圖(tu)所(suo)示︰

而解密的過程則如下(xia)︰

PGP 的私(si)鑰是qian)4嬖謨沒(mei)?腦砍狀 zhong)的。另外,私(si)鑰都是以(yi)加密狀態保存的,並在保存時(shi)使(shi)用了基于口令的密碼(PBE)。
生成和驗證數(shu)字簽(qian)名
生成數(shu)字簽(qian)名的過程如下(xia)圖(tu)︰

而驗證簽(qian)名的過程則如下(xia)圖(tu)︰

生成數(shu)字簽(qian)名並加密以(yi)及解密並驗證數(shu)字簽(qian)名
如何(he)將密碼和數(shu)字簽(qian)名進行組合,下(xia)面兩(liang)張(zhang)圖(tu)是整本(ben)書最復雜的,但它只(zhi)不(bu)過是將之前講(jiang)解的na)諶葑楹掀鵠lai)了而已(yi)。
下(xia)圖(tu)是生成數(shu)字簽(qian)名並加密的過程︰

而下(xia)圖(tu)則是解密並驗證數(shu)字簽(qian)名的過程︰

信任網
如何(he)確認公鑰的合法(fa)性?前面介紹的證書是一種方法(fa)。對公鑰的信任是建立在對認證機構的信任的基礎(chu)之上的。不(bu)過,PGP 卻沒(mei)有使(shi)用認證機構,而是采用了一種叫做(zuo) 信任網 (也稱為(wei) 信任圈(quan) 或 好(hao)友圈(quan) )的方法(fa)。信任網的要點(dian)是“不(bu)依(yi)賴認證機構,而是建立每(mei)個人之間的信任關系”。換言之,就(jiu)是能(neng)夠自己決定(ding)要信任哪(na)些公鑰。
PGP 當(dang)初(chu)的設計目的是在連國家(jia)都不(bu)可(ke)信的情況下(xia)依(yi)然能(neng)夠使(shi)用,因此它並不(bu)關心有沒(mei)有可(ke)信的認證機構,而是采用了“由用mei)?約豪lai)決定(ding)信任誰”這樣(yang)的設計。
需要注(zhu)意,“公鑰是否(fu)合法(fa)”與“所(suo)有者是否(fu)可(ke)信”是兩(liang)個不(bu)同的問題,因為(wei)盡(jin)管公鑰合法(fa),其所(suo)有者也可(ke)以(yi)是不(bu)可(ke)信的。例如,Alice認為(wei)從Bob 那獲得的公鑰是合法(fa)的,因為(wei)這個公鑰是Bob當(dang)面交給(gei)Alice的。但是Alice不(bu)信任Bob在數(shu)字簽(qian)名上的判斷能(neng)力,即便Bob對其他(ta)的公鑰進行了數(shu) 字簽(qian)名,Alice也bu)hui)懷(huai)疑Bob是否(fu)真的進行了本(ben)人確認。
在 PGP 中(zhong),信任級別可(ke)以(yi)分(fen)為(wei)四種︰絕對信任、完全信任、有限信任和不(bu)信任。
SSL/TLS
SSL/TLS也是綜合運用了對稱密碼、公鑰密碼、消息認證碼、數(shu)字簽(qian)名、偽隨機數(shu)生成器等密碼技術(shu)。而我們知(zhi)道SSL/TLS最廣泛的應用就(jiu)是 套接在HTTP上,但實際上,SSL/TLS還可(ke)以(yi)套接在其他(ta)網絡(luo)協議之上的,例如,SMTP 和 POP3 之類的電子郵(you)件協議。因為(wei)現在廣泛使(shi)用的是TLS協議,因此下(xia)文只(zhi)以(yi)TLS協議為(wei)主。
TLS安全協議可(ke)分(fen)為(wei)兩(liang)層︰ TLS記錄(lu)協議 和 TLS握(wo)手(shou)zhong) 。TLS記錄(lu)協議在TLS握(wo)手(shou)zhong) 櫚南xia)層,負(fu)責數(shu)據封(feng)裝(zhuang)、壓(ya)縮、加密等功能(neng)。而TLS握(wo)手(shou)zhong) 樵蠐糜讜謔導實氖shu)據傳輸開始前,通信雙(shuang)方進行身(shen)份認證、協商(shang) 加密算法(fa)、交換密鑰等。TLS握(wo)手(shou)zhong) 橛址fen)為(wei)4個子協議︰he)帳shou)zhong) 欏 藶牘娓癖涓 欏 jing)告(gao)協議和應用數(shu)據協議。TLS協議的層次結構如下(xia)圖(tu)︰

TLS記錄(lu)協議
TLS記錄(lu)協議的處理過程如下(xia)圖(tu)︰

首先,消息被分(fen)割成多個片段,然後分(fen)別對每(mei)個片段進行壓(ya)縮。壓(ya)縮算法(fa)需要與通信對象協商(shang)決定(ding)。接下(xia)來(lai),經過壓(ya)縮的片段會(hui)被加上消息認證碼,這就(jiu) 可(ke)以(yi)保證完整性,並進行數(shu)據的認證。同時(shi),為(wei)了防止重放攻擊,在計算消息認證碼時(shi),還加上了片段的編號。單向散列(lie)函數(shu)的算法(fa),以(yi)及消息認證碼所(suo)使(shi)用的密鑰 都需要與通信對象協商(shang)決定(ding)。再接下(xia)來(lai),就(jiu)是加密了。加密使(shi)用CBC模式,CBC模式的初(chu)始化向量(IV)通過主密碼生成,而對稱密碼的算法(fa)和共享密鑰也是 需要與通信對象協商(shang)決定(ding)。最後,密文再加上數(shu)據類型、版(ban)本(ben)號、壓(ya)縮後的長度組成的報頭就(jiu)是最終的報文數(shu)據。其中(zhong),數(shu)據類型為(wei)TLS握(wo)手(shou)zhong) 櫓zhong)的4個子協議 之一。

 

TLS握(wo)手(shou)zhong) br />TLS握(wo)手(shou)zhong) 榭ke)分(fen)為(wei)4個子協議,其中(zhong), 握(wo)手(shou)zhong) 是最復雜的一個子協議,其過程如下(xia)圖(tu)︰

1. ClientHello(客戶端(duan)->服務器)
客戶端(duan)向服務器發送ClientHello消息,消息內容主要包括︰可(ke)用的版(ban)本(ben)號、當(dang)前時(shi)間、客戶端(duan)隨機數(shu)、會(hui)話ID、可(ke)用的密碼套件清單、可(ke)用的壓(ya)縮方式清單。
2. ServerHello(服務器->客戶端(duan))
對于客戶端(duan)發送tou)lientHello消息,服務器會(hui)返回一個ServerHello消息,消息內容主要包括︰使(shi)用的版(ban)本(ben)號、當(dang)前時(shi)間、服務器隨機數(shu)、會(hui)話ID、使(shi)用的密碼套件、使(shi)用的壓(ya)縮方式。這一步確定(ding)了通信中(zhong)使(shi)用的“版(ban)本(ben)號”、“密碼套件”和“壓(ya)縮方式”。
3. Certificate(服務器->客戶端(duan))
服務器再向客戶端(duan)發送Certificate消息,主要是 證書清單 。首先發送tou)氖欠衿韉鬧?椋 緩蠡hui)按(an)順序發送對服務器證書簽(qian)名的認證機構的證書。
4. ServerKeyExchange(服務器->客戶端(duan))
當(dang)Certificate消息不(bu)足以(yi)滿足需求時(shi),服務器會(hui)向客戶端(duan)發送ServerKeyExchange消息。具體所(suo)發送tou)南 諶蓴hui)根(gen)據所(suo)使(shi)用的密碼套件而有所(suo)不(bu)同。
5. CertificateRequest(服務器->客戶端(duan))
CertificateRequest消息用于服務器向客戶端(duan)請求證書,這是為(wei)了si)客戶端(duan)認證 。消息內容還包括︰服務器能(neng)夠理解的證書類型清單和認證機構名稱清單。當(dang)不(bu)使(shi)用mei)突?duan)認證時(shi),不(bu)會(hui)發送CertificateRequest消息。
6. ServerHelloDone(服務器->客戶端(duan))
服務器發送ServerHelloDone消息則表示從ServerHello消息開始的一系列(lie)消息的結束。
7. Certificate(客戶端(duan)->服務器)
當(dang)服務器發送了CertificateRequest消息時(shi),則客戶端(duan)會(hui)發送Certificate消息,將自己的證書同消息一起發送給(gei)服務器。如果服務器沒(mei)有發送CertificateRequest消息,客戶端(duan)則不(bu)會(hui)發送Certificate消息。
8. ClientKeyExchange(客戶端(duan)->服務器)
客戶端(duan)發送ClientKeyExchange消息。當(dang)密碼套件中(zhong)保護RSA時(shi),會(hui)隨消息一起發送 經過加密的預備主密碼 。當(dang)密碼套件中(zhong)包含Diffie-Hellman密鑰交換時(shi),會(hui)隨消息一起發送 Diffie-Hellman的公開值(zhi) 。預備主密碼是由客戶端(duan)生成的隨機數(shu),之後會(hui)被用作生成主密碼的種子。根(gen)據預備主密碼,服務器和客戶端(duan)會(hui)計算出相同的 主密碼 ,然後再根(gen)據主密碼生成︰對稱密碼的密鑰、消息認證碼的密鑰、對稱密碼的CBC模式中(zhong)使(shi)用的初(chu)始化向量(IV)。
9. CertificateVerify(客戶端(duan)->服務器)
客戶端(duan)只(zhi)有在服務器發送CertificateRequest消息時(shi)才會(hui)發送CertificateVerify消息。這個消息的na)康氖竅蚍器證明自己的確持有客戶端(duan)證書的私(si)鑰。為(wei)了實現這一目的,客戶端(duan)會(hui)計算“主密碼”和“握(wo)手(shou)zhong) 櫓zhong)傳送tou)南rdquo;的散列(lie)值(zhi),並加上自己的數(shu)字簽(qian)名後發送給(gei)服務 器。
10. ChangeCipherSpec(客戶端(duan)->服務器)
客戶端(duan)發送ChangeCipherSpec消息表示要切換密碼。實際上,這不(bu)是握(wo)手(shou)zhong) 櫚南  敲藶牘娓癖涓 櫚南 TChangeCipherSpec消息之前,客戶端(duan)和服務器之間以(yi)及交換了所(suo)有關于密碼套件的信息,因此在收到(dao)這一消息時(shi),客戶端(duan)和服務器會(hui)同時(shi)切換密 碼。在這一消息之後,TLS記錄(lu)協議就(jiu)開始使(shi)用雙(shuang)方協商(shang)決定(ding)的密碼通信方式了。
11. Finished(客戶端(duan)->服務器)
客戶端(duan)發送Finished消息表示握(wo)手(shou)zhong) 櫚dao)此si) U飧魷?涫凳鞘shi)用切換後的密碼套件來(lai)發送tou)摹J導矢fu)責加密操作的是TLS記錄(lu)協議。
12. ChangeCipherSpec(服務器->客戶端(duan))
這次輪(lun)到(dao)服務器發送ChangeCipherSpec消息了,表明服務器要切換密碼了。
13. Finished(服務器->客戶端(duan))
服務器也同樣(yang)發送Finished消息表明握(wo)手(shou)zhong) 櫚dao)此si) U飧魷? yang)使(shi)用切換後的密碼套件來(lai)發送。實際負(fu)責加密操作的也是TLS記錄(lu)協議。
14. 切換至應用數(shu)據協議
在此之後,客戶端(duan)和服務器會(hui)使(shi)用應用數(shu)據協議和TLS記錄(lu)協議進行密碼通信。
從結果來(lai)看,握(wo)手(shou)zhong) 櫫瓿閃訟xia)列(lie)操作︰
客戶端(duan)獲得了服務器的合法(fa)公鑰,完成了服務器認證。
服務器獲得了客戶端(duan)的合法(fa)公鑰,完成了客戶端(duan)認證(當(dang)需要客戶端(duan)認證時(shi))。
客戶端(duan)和服務器生成了密碼通信中(zhong)使(shi)用的共享密鑰。
客戶端(duan)和服務器生成了消息認證碼中(zhong)使(shi)用的共享密鑰。
除了握(wo)手(shou)zhong) 椋 淥ta)3各子協議都很簡單。 密碼規格變更協議 用于密碼切換的同步。簡單地說,就(jiu)跟向對方喊“1、2、3!”差不(bu)多。當(dang)協議中(zhong)途(tu)發生錯誤時(shi),就(jiu)會(hui)通過警(jing)告(gao)協議傳達(da)給(gei)對方。 警(jing)告(gao)協議 負(fu)責在發生錯誤時(shi)將錯誤傳達(da)給(gei)對方。如果沒(mei)有發生錯誤,則會(hui)使(shi)用應用數(shu)據協議來(lai)進行通信。 應用數(shu)據協議 用于和通信對象之間傳送應用數(shu)據。當(dang)TLS套接在HTTP時(shi),HTTP的請求和相應就(jiu)會(hui)通過TLS的應用數(shu)據協議和TLS記錄(lu)協議來(lai)進行傳送。
密碼技術(shu)與現實社會(hui)
前面講(jiang)到(dao)的6種zhi)ben)的密碼技術(shu)可(ke)整理成下(xia)圖(tu)︰

書中(zhong)多次使(shi)用了 框架(jia) 這個說法(fa)。框架(jia)的特點(dian)就(jiu)是能(neng)夠對其中(zhong)作為(wei)組成元素(su)的技術(shu)進行替(ti)換,就(jiu)像更好(hao)零件一樣(yang)。例如,消息認證碼算法(fa)HMAC的設計就(jiu)允(yun)許對單向散列(lie)函數(shu)的算法(fa)進行 替(ti)換。在PGP中(zhong),對稱密碼、公鑰密碼、單向散列(lie)函數(shu)等都是可(ke)以(yi)替(ti)換的。在SSL/TLS中(zhong),客戶端(duan)和服務器可(ke)以(yi)通過握(wo)手(shou)zhong) 榻型ㄐ牛  dang)場決定(ding)所(suo)使(shi)用 的密碼套件。使(shi)用mei)蚣jia)能(neng)夠提(ti)高密碼技術(shu)系統的重用性,也能(neng)夠提(ti)高系統的強度。通過將單獨的密碼技術(shu)像零件一樣(yang)組合起來(lai),並根(gen)據需要進行替(ti)換,能(neng)夠實現更長 期(qi)的、更高的安全性。
另外,所(suo)有密碼技術(shu)其實也可(ke)以(yi)看成是一種“壓(ya)縮技術(shu)”,如下(xia)表所(suo)示︰

 


量子密碼和量子計算機
量子密碼是基于量子理論(lun)的通信技術(shu),是一種讓通信本(ben)身(shen)不(bu)可(ke)竊听的技術(shu),也可(ke)以(yi)理解為(wei)是一種利用光(guang)子的量子特性來(lai)實現通信的方法(fa)。最早(zao)的量子密碼中(zhong),利用了兩(liang)個事實︰
1. 從原理上說,無(wu)法(fa)準ji)凡獬齬guang)子的偏振方向
根(gen)據這一事實,可(ke)以(yi)讓竊听者得到(dao)的na)諶荼淶貌bu)正確。
2. 測量行為(wei)本(ben)身(shen)會(hui)導致光(guang)子的狀態發送改變
根(gen)據這一事實,接you)照嚦ke)以(yi)判斷出通信是否(fu)被竊听。
而 量子計算機 則有著超強的計算能(neng)力。如果有了量子計算機,那現有的所(suo)有密碼都能(neng)夠瞬bu)潯槐├ζ平狻8gen)據量子理論(lun),粒子可(ke)同時(shi)具有多種狀態。如果使(shi)用具有多種狀態的粒子 進行計算,則可(ke)以(yi)同時(shi)完成多種狀態的計算。如果用1個粒子能(neng)夠計算0和1兩(liang)種狀態,那麼用128個這樣(yang)的粒子就(jiu)可(ke)以(yi)同時(shi)計算2^128中(zhong)狀態。換句話說, 就(jiu)是一台超級並行計算機。
如果量子密碼比(bi)量子計算機先進入實用領域,則可(ke)以(yi)使(shi)用量子密碼來(lai)實現一次性密碼本(ben),從而產生完美的密碼技術(shu)。由于一次性密碼本(ben)在原理上是無(wu)法(fa)破譯 的,因此即使(shi)用量子計算機也無(wu)法(fa)破譯量子密碼。然而,如果量子計算機比(bi)量子密碼先進入實用領域,則實用目前的密碼技術(shu)所(suo)產生的密文將會(hui)全部被破譯。
只(zhi)有完美的密碼,沒(mei)有完美的人
就(jiu)算量子密碼進入實用領域,也不(bu)能(neng)實現完美的安全。因為(wei)在安全問題中(zhong),密碼技術(shu)能(neng)夠覆蓋的範圍(wei)是非(fei)常有限的。在確保系統的整體安全方面,人是一個特別巨大的弱點(dian)。
為(wei)了配送對稱密碼的密鑰,我們需要使(shi)用公鑰密碼,而為(wei)了對公鑰進行認證,我們又zhong)枰 現?溝墓 俊Ryi)此類推,無(wu)窮無(wu)盡(jin),我們qian)匭xu)在某個節點(dian)上找到(dao)一個公鑰是自己能(neng)夠完全信任的,也就(jiu)是qian)匭xu)要有一個信任的種子。
通過密碼技術(shu),我們可(ke)以(yi)提(ti)高機密性,也能(neng)夠讓認證變得更加you)菀yi),但是這並不(bu)意味著我們可(ke)以(yi)實現完美的機密性和完美的認證。
就(jiu)算通過人的指紋、聲紋、面容識別等生物識別認證也並不(bu)是完美的認證。要進行生物識別認證,就(jiu)必須(xu)在某個時(shi)間點(dian)上將生物信息轉換為(wei)比(bi)特序列(lie),而實際的認證則是通過轉換後的比(bi)特序列(lie)來(lai)完成的。因此,如果這些比(bi)特序列(lie)被竊取,就(jiu)會(hui)和鑰匙被偷(tou)產生相同的後果。
另外,“防御必須(xu)天衣無(wu)縫,攻擊只(zhi)需突破一點(dian)”。為(wei)了保衛系統安全,我們qian)匭xu)應對各種可(ke)能(neng)的攻擊,而且這種防御必須(xu)24小時(shi)連續工作。另一方面,要攻擊一個系統,則只(zhi)要找到(dao)一種有效的攻擊方法(fa),而且只(zhi)需利用防御方一瞬bu)淶鈉普讕jiu)可(ke)以(yi)完成了。
寫在最後
其實,在實際應用中(zhong),安全問題所(suo)涉及的技術(shu),遠比(bi)這本(ben)書里所(suo)講(jiang)到(dao)的密碼技術(shu)多得多,也復雜得多。例如,App的加殼qian);?Auth認證等。在實 際的應用中(zhong),還需要考慮更多,比(bi)如,安全性和性能(neng)之間需要平衡。雖然,懂得了這些密碼技術(shu),並不(bu)意味著就(jiu)能(neng)設計出非(fei)常安全的系統。但是,如果不(bu)懂這些密碼 技術(shu),那就(jiu)更難以(yi)設計出安全的系統。
 

上海快3官网

Tag標(biao)簽(qian)︰隨機數(shu)  密鑰  應用技術(shu)  
  • 上海快3官网

About IT165 - 廣告(gao)服務 - 隱私(si)聲明 - 版(ban)權申明 - 免(mian)責條款 - 163彩票官网網站地圖(tu) - 網友投稿 - 聯系方式
本(ben)站內容來(lai)自于互聯網,僅供(gong)用于網絡(luo)技術(shu)學(xue)習,學(xue)習中(zhong)請遵循相關法(fa)律法(fa)規
上海快3官网 | 下一页