中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
密碼學(xué)及公鑰基礎(chǔ)設(shè)施入門(mén) | Linux 中國(guó)
學(xué)習(xí)密碼學(xué)背后的基本概念,主要是保密性、完整性和身份認(rèn)證。
-- Alex Wood



致謝
編譯自 | 
https://opensource.com/article/18/5/cryptography-pki
 
 作者 | Alex Wood
 譯者 | Andy Song (pinewall) ?? ?? ?? 共計(jì)翻譯:25 篇 貢獻(xiàn)時(shí)間:87 天

學(xué)習(xí)密碼學(xué)背后的基本概念,主要是保密性、完整性和身份認(rèn)證。

安全通信正快速成為當(dāng)今互聯(lián)網(wǎng)的規(guī)范。從 2018 年 7 月起,Google Chrome 將對(duì)全部使用 HTTP 傳輸(而不是 HTTPS 傳輸)的站點(diǎn)開(kāi)始顯示“不安全”警告[1]。雖然密碼學(xué)已經(jīng)逐漸變廣為人知,但其本身并沒(méi)有變得更容易理解。Let's Encrypt[2] 設(shè)計(jì)并實(shí)現(xiàn)了一套令人驚嘆的解決方案,可以提供免費(fèi)安全證書(shū)和周期性續(xù)簽;但如果不了解底層概念和缺陷,你也不過(guò)是加入了類(lèi)似“貨物崇拜cargo cult[3]”的技術(shù)崇拜的程序員大軍。

安全通信的特性

密碼學(xué)最直觀明顯的目標(biāo)是保密性confidentiality消息message傳輸過(guò)程中不會(huì)被窺探內(nèi)容。為了保密性,我們對(duì)消息進(jìn)行加密:對(duì)于給定消息,我們結(jié)合一個(gè)密鑰key生成一個(gè)無(wú)意義的亂碼,只有通過(guò)相同的密鑰逆轉(zhuǎn)加密過(guò)程(即解密過(guò)程)才能將其轉(zhuǎn)換為可讀的消息。假設(shè)我們有兩個(gè)朋友 Alice 和 Bob[4],以及他們的八卦nosy鄰居 Eve。Alice 加密類(lèi)似 'Eve 很討厭' 的消息,將其發(fā)送給 Bob,期間不用擔(dān)心 Eve 會(huì)窺探到這條消息的內(nèi)容。

對(duì)于真正的安全通信,保密性是不夠的。假如 Eve 收集了足夠多 Alice 和 Bob 之間的消息,發(fā)現(xiàn)單詞 “Eve” 被加密為 'Xyzzy'。除此之外,Eve 還知道 Alice 和 Bob 正在準(zhǔn)備一個(gè)派對(duì),Alice 會(huì)將訪客名單發(fā)送給 Bob。如果 Eve 攔截了消息并將 “Xyzzy” 加到訪客列表的末尾,那么她已經(jīng)成功的破壞了這個(gè)派對(duì)。因此,Alice 和 Bob 需要他們之間的通信可以提供完整性integrity:消息應(yīng)該不會(huì)被篡改。

而且我們還有一個(gè)問(wèn)題有待解決。假如 Eve 觀察到 Bob 打開(kāi)了標(biāo)記為“來(lái)自 Alice”的信封,信封中包含一條來(lái)自 Alice 的消息“再買(mǎi)一加侖冰淇淋”。Eve 看到 Bob 外出,回家時(shí)帶著冰淇淋,這樣雖然 Eve 并不知道消息的完整內(nèi)容,但她對(duì)消息有了大致的了解。Bob 將上述消息丟棄,但 Eve 找出了它并在下一周中的每一天都向 Bob 的郵箱中投遞一封標(biāo)記為“來(lái)自 Alice”的信封,內(nèi)容拷貝自之前 Bob 丟棄的那封信。這樣到了派對(duì)的時(shí)候,冰淇淋?chē)?yán)重超量;派對(duì)當(dāng)晚結(jié)束后,Bob 分發(fā)剩余的冰淇淋,Eve 帶著免費(fèi)的冰淇淋回到家。消息是加密的,完整性也沒(méi)問(wèn)題,但 Bob 被誤導(dǎo)了,沒(méi)有認(rèn)出發(fā)信人的真實(shí)身份。身份認(rèn)證Authentication這個(gè)特性用于保證你正在通信的人的確是其聲稱(chēng)的那樣。

信息安全還有其它特性[5],但保密性、完整性和身份驗(yàn)證是你必須了解的三大特性。

加密和加密算法

加密都包含哪些部分呢?首先,需要一條消息,我們稱(chēng)之為明文plaintext。接著,需要對(duì)明文做一些格式上的初始化,以便用于后續(xù)的加密過(guò)程(例如,假如我們使用分組加密算法block cipher,需要在明文尾部填充使其達(dá)到特定長(zhǎng)度)。下一步,需要一個(gè)保密的比特序列,我們稱(chēng)之為密鑰key。然后,基于私鑰,使用一種加密算法將明文轉(zhuǎn)換為密文ciphertext。密文看上去像是隨機(jī)噪聲,只有通過(guò)相同的加密算法和相同的密鑰(在后面提到的非對(duì)稱(chēng)加密算法情況下,是另一個(gè)數(shù)學(xué)上相關(guān)的密鑰)才能恢復(fù)為明文。

(LCTT 譯注:cipher 一般被翻譯為密碼,但其具體表達(dá)的意思是加密算法,這里采用加密算法的翻譯)

加密算法使用密鑰加密明文??紤]到希望能夠解密密文,我們用到的加密算法也必須是可逆的reversible。作為簡(jiǎn)單示例,我們可以使用 XOR[6]。該算子可逆,而且逆算子就是本身(P ^ K = C; C ^ K = P),故可同時(shí)用于加密和解密。該算子的平凡應(yīng)用可以是一次性密碼本one-time pad,不過(guò)一般而言并不可行[7]。但可以將 XOR 與一個(gè)基于單個(gè)密鑰生成任意隨機(jī)數(shù)據(jù)流arbitrary stream of random data的函數(shù)結(jié)合起來(lái)?,F(xiàn)代加密算法 AES 和 Chacha20 就是這么設(shè)計(jì)的。

我們把加密和解密使用同一個(gè)密鑰的加密算法稱(chēng)為對(duì)稱(chēng)加密算法symmetric cipher。對(duì)稱(chēng)加密算法分為流加密算法stream ciphers和分組加密算法兩類(lèi)。流加密算法依次對(duì)明文中的每個(gè)比特或字節(jié)進(jìn)行加密。例如,我們上面提到的 XOR 加密算法就是一個(gè)流加密算法。流加密算法適用于明文長(zhǎng)度未知的情形,例如數(shù)據(jù)從管道或 socket 傳入。RC4[8] 是最為人知的流加密算法,但在多種不同的攻擊面前比較脆弱,以至于最新版本 (1.3)的 TLS (“HTTPS” 中的 “S”)已經(jīng)不再支持該加密算法。Efforts[9] 正著手創(chuàng)建新的加密算法,候選算法 ChaCha20[10] 已經(jīng)被 TLS 支持。

分組加密算法對(duì)固定長(zhǎng)度的分組,使用固定長(zhǎng)度的密鑰加密。在分組加密算法領(lǐng)域,排行第一的是 先進(jìn)加密標(biāo)準(zhǔn)Advanced Encryption Standard[11](AES),使用的分組長(zhǎng)度為 128 比特。分組包含的數(shù)據(jù)并不多,因而分組加密算法包含一個(gè)工作模式[12],用于描述如何對(duì)任意長(zhǎng)度的明文執(zhí)行分組加密。最簡(jiǎn)單的工作模式是 電子密碼本Electronic Code Book[13](ECB),將明文按分組大小劃分成多個(gè)分組(在必要情況下,填充最后一個(gè)分組),使用密鑰獨(dú)立的加密各個(gè)分組。

這里我們留意到一個(gè)問(wèn)題:如果相同的分組在明文中出現(xiàn)多次(例如互聯(lián)網(wǎng)流量中的 GET / HTTP/1.1 詞組),由于我們使用相同的密鑰加密分組,我們會(huì)得到相同的加密結(jié)果。我們的安全通信中會(huì)出現(xiàn)一種模式規(guī)律pattern,容易受到攻擊。

因此還有很多高級(jí)的工作模式,例如 密碼分組鏈接Cipher Block Chaining[14](CBC),其中每個(gè)分組的明文在加密前會(huì)與前一個(gè)分組的密文進(jìn)行 XOR 操作,而第一個(gè)分組的明文與一個(gè)隨機(jī)數(shù)構(gòu)成的初始化向量進(jìn)行 XOR 操作。還有其它一些工作模式,在安全性和執(zhí)行速度方面各有優(yōu)缺點(diǎn)。甚至還有 Counter (CTR) 這種工作模式,可以將分組加密算法轉(zhuǎn)換為流加密算法。

除了對(duì)稱(chēng)加密算法,還有非對(duì)稱(chēng)加密算法asymmetric ciphers,也被稱(chēng)為公鑰密碼學(xué)public-key cryptography。這類(lèi)加密算法使用兩個(gè)密鑰:一個(gè)公鑰public key,一個(gè)私鑰private key。公鑰和私鑰在數(shù)學(xué)上有一定關(guān)聯(lián),但可以區(qū)分二者。經(jīng)過(guò)公鑰加密的密文只能通過(guò)私鑰解密,經(jīng)過(guò)私鑰加密的密文可以通過(guò)公鑰解密。公鑰可以大范圍分發(fā)出去,但私鑰必須對(duì)外不可見(jiàn)。如果你希望和一個(gè)給定的人通信,你可以使用對(duì)方的公鑰加密消息,這樣只有他們的私鑰可以解密出消息。在非對(duì)稱(chēng)加密算法領(lǐng)域,目前 RSA[15] 最具有影響力。

非對(duì)稱(chēng)加密算法最主要的缺陷是,它們是計(jì)算密集型computationally expensive的。那么使用對(duì)稱(chēng)加密算法可以讓身份驗(yàn)證更快嗎?如果你只與一個(gè)人共享密鑰,答案是肯定的。但這種方式很快就會(huì)失效。假如一群人希望使用對(duì)稱(chēng)加密算法進(jìn)行兩兩通信,如果對(duì)每對(duì)成員通信都采用單獨(dú)的密鑰,一個(gè) 20 人的群體將有 190 對(duì)成員通信,即每個(gè)成員要維護(hù) 19 個(gè)密鑰并確認(rèn)其安全性。如果使用非對(duì)稱(chēng)加密算法,每個(gè)成員僅需確保自己的私鑰安全并維護(hù)一個(gè)公鑰列表即可。

非對(duì)稱(chēng)加密算法也有加密數(shù)據(jù)長(zhǎng)度[16]限制。類(lèi)似于分組加密算法,你需要將長(zhǎng)消息進(jìn)行劃分。但實(shí)際應(yīng)用中,非對(duì)稱(chēng)加密算法通常用于建立機(jī)密confidential、已認(rèn)證authenticated通道channel,利用該通道交換對(duì)稱(chēng)加密算法的共享密鑰。考慮到速度優(yōu)勢(shì),對(duì)稱(chēng)加密算法用于后續(xù)的通信。TLS 就是嚴(yán)格按照這種方式運(yùn)行的。

基礎(chǔ)

安全通信的核心在于隨機(jī)數(shù)。隨機(jī)數(shù)用于生成密鑰并為確定性過(guò)程deterministic processes提供不可預(yù)測(cè)性。如果我們使用的密鑰是可預(yù)測(cè)的,那我們從一開(kāi)始就可能受到攻擊。計(jì)算機(jī)被設(shè)計(jì)成按固定規(guī)則操作,因此生成隨機(jī)數(shù)是比較困難的。計(jì)算機(jī)可以收集鼠標(biāo)移動(dòng)或鍵盤(pán)計(jì)時(shí)keyboard timings這類(lèi)隨機(jī)數(shù)據(jù)。但收集隨機(jī)性(也叫信息熵entropy)需要花費(fèi)不少時(shí)間,而且涉及額外處理以確保均勻分布uniform distribution。甚至可以使用專(zhuān)用硬件,例如熔巖燈lava lamps[17]等。一般而言,一旦有了一個(gè)真正的隨機(jī)數(shù)值,我們可以將其用作種子seed,使用密碼安全的偽隨機(jī)數(shù)生成器cryptographically secure pseudorandom number generator生成隨機(jī)數(shù)。使用相同的種子,同一個(gè)隨機(jī)數(shù)生成器生成的隨機(jī)數(shù)序列保持不變,但重要的是隨機(jī)數(shù)序列是無(wú)規(guī)律的。在 Linux 內(nèi)核中,/dev/random 和 /dev/urandom[18] 工作方式如下:從多個(gè)來(lái)源收集信息熵,進(jìn)行無(wú)偏處理remove biases,生成種子,然后生成隨機(jī)數(shù),該隨機(jī)數(shù)可用于 RSA 密鑰生成等。

其它密碼學(xué)組件

我們已經(jīng)實(shí)現(xiàn)了保密性,但還沒(méi)有考慮完整性和身份驗(yàn)證。對(duì)于后兩者,我們需要使用一些額外的技術(shù)。

首先是密碼散列函數(shù)crytographic hash function,該函數(shù)接受任意長(zhǎng)度的輸入并給出固定長(zhǎng)度的輸出(一般稱(chēng)為摘要digest)。如果我們找到兩條消息,其摘要相同,我們稱(chēng)之為碰撞collision,對(duì)應(yīng)的散列函數(shù)就不適合用于密碼學(xué)。這里需要強(qiáng)調(diào)一下“找到”:考慮到消息的條數(shù)是無(wú)限的而摘要的長(zhǎng)度是固定的,那么總是會(huì)存在碰撞;但如果無(wú)需海量的計(jì)算資源,我們總是能找到發(fā)生碰撞的消息對(duì),那就令人比較擔(dān)心了。更嚴(yán)重的情況是,對(duì)于每一個(gè)給定的消息,都能找到與之碰撞的另一條消息。

另外,哈希函數(shù)必須是單向的one-way:給定一個(gè)摘要,反向計(jì)算對(duì)應(yīng)的消息在計(jì)算上不可行。相應(yīng)的,這類(lèi)條件[19]被稱(chēng)為碰撞阻力collision resistance、第二原象抗性second preimage resistance原象抗性preimage resistance。如果滿足這些條件,摘要可以用作消息的指紋。理論上[20]不存在具有相同指紋的兩個(gè)人,而且你無(wú)法使用指紋反向找到其對(duì)應(yīng)的人。

如果我們同時(shí)發(fā)送消息及其摘要,接收者可以使用相同的哈希函數(shù)獨(dú)立計(jì)算摘要。如果兩個(gè)摘要相同,可以認(rèn)為消息沒(méi)有被篡改??紤]到 SHA-1[21] 已經(jīng)變得有些過(guò)時(shí)[22],目前最流行的密碼散列函數(shù)是 SHA-256[23]。

散列函數(shù)看起來(lái)不錯(cuò),但如果有人可以同時(shí)篡改消息及其摘要,那么消息發(fā)送仍然是不安全的。我們需要將哈希與加密算法結(jié)合起來(lái)。在對(duì)稱(chēng)加密算法領(lǐng)域,我們有消息認(rèn)證碼message authentication codes(MAC)技術(shù)。MAC 有多種形式,但哈希消息認(rèn)證碼hash message authentication codes(HMAC) 這類(lèi)是基于哈希的。HMAC[24] 使用哈希函數(shù) H 處理密鑰 K、消息 M,公式為 H(K + H(K + M)),其中 + 代表連接concatenation。公式的獨(dú)特之處并不在本文討論范圍內(nèi),大致來(lái)說(shuō)與保護(hù) HMAC 自身的完整性有關(guān)。發(fā)送加密消息的同時(shí)也發(fā)送 MAC。Eve 可以任意篡改消息,但一旦 Bob 獨(dú)立計(jì)算 MAC 并與接收到的 MAC 做比較,就會(huì)發(fā)現(xiàn)消息已經(jīng)被篡改。

在非對(duì)稱(chēng)加密算法領(lǐng)域,我們有數(shù)字簽名digital signatures技術(shù)。如果使用 RSA,使用公鑰加密的內(nèi)容只能通過(guò)私鑰解密,反過(guò)來(lái)也是如此;這種機(jī)制可用于創(chuàng)建一種簽名。如果只有我持有私鑰并用其加密文檔,那么只有我的公鑰可以用于解密,那么大家潛在的承認(rèn)文檔是我寫(xiě)的:這是一種身份驗(yàn)證。事實(shí)上,我們無(wú)需加密整個(gè)文檔。如果生成文檔的摘要,只要對(duì)這個(gè)指紋加密即可。對(duì)摘要簽名比對(duì)整個(gè)文檔簽名要快得多,而且可以解決非對(duì)稱(chēng)加密存在的消息長(zhǎng)度限制問(wèn)題。接收者解密出摘要信息,獨(dú)立計(jì)算消息的摘要并進(jìn)行比對(duì),可以確保消息的完整性。對(duì)于不同的非對(duì)稱(chēng)加密算法,數(shù)字簽名的方法也各不相同;但核心都是使用公鑰來(lái)檢驗(yàn)已有簽名。

匯總

現(xiàn)在,我們已經(jīng)有了全部的主體組件,可以用其實(shí)現(xiàn)一個(gè)我們期待的、具有全部三個(gè)特性的體系system[25]。Alice 選取一個(gè)保密的對(duì)稱(chēng)加密密鑰并使用 Bob 的公鑰進(jìn)行加密。接著,她對(duì)得到的密文進(jìn)行哈希并使用其私鑰對(duì)摘要進(jìn)行簽名。Bob 接收到密文和簽名,一方面獨(dú)立計(jì)算密文的摘要,另一方面使用 Alice 的公鑰解密簽名中的摘要;如果兩個(gè)摘要相同,他可以確信對(duì)稱(chēng)加密密鑰沒(méi)有被篡改且通過(guò)了身份驗(yàn)證。Bob 使用私鑰解密密文得到對(duì)稱(chēng)加密密鑰,接著使用該密鑰及 HMAC 與 Alice 進(jìn)行保密通信,這樣每一條消息的完整性都得到保障。但該體系沒(méi)有辦法抵御消息重放攻擊(我們?cè)?Eve 造成的冰淇淋災(zāi)難中見(jiàn)過(guò)這種攻擊)。要解決重放攻擊,我們需要使用某種類(lèi)型的“握手handshake”建立隨機(jī)、短期的會(huì)話標(biāo)識(shí)符session identifier。

密碼學(xué)的世界博大精深,我希望這篇文章能讓你對(duì)密碼學(xué)的核心目標(biāo)及其組件有一個(gè)大致的了解。這些概念為你打下堅(jiān)實(shí)的基礎(chǔ),讓你可以繼續(xù)深入學(xué)習(xí)。

感謝 Hubert Kario、Florian Weimer 和 Mike Bursell 在本文寫(xiě)作過(guò)程中提供的幫助。


via: https://opensource.com/article/18/5/cryptography-pki

作者:Alex Wood[27] 選題:lujun9972 譯者:pinewall 校對(duì):wxy

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
揭開(kāi)密碼的神秘面紗——同余運(yùn)算 Part V
SSL協(xié)議詳解-2
非對(duì)稱(chēng)加密概述
Google大腦的兩個(gè)人工智能在玩了個(gè)對(duì)抗游戲后,竟然自主'進(jìn)化'了
頭條文章
密碼學(xué)入門(mén)科普
更多類(lèi)似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服