密碼學(xué)在我們的生活中變得越來越重要。每次登錄應(yīng)用程序或發(fā)送電子郵件時(shí),您都依賴于一種巧妙的加密基礎(chǔ)設(shè)施,該基礎(chǔ)設(shè)施很大程度上源自1970年代的突破。
除了專業(yè)的軟件開發(fā)人員和編碼人員之外,即使是非編程的普通大眾也可以從了解密碼學(xué)的工作原理中受益,尤其是在加密貨幣和加密投資的時(shí)代。
我們所有人都在日常生活中使用密碼學(xué),無論我們是否知道。
什么是密碼學(xué)?
密碼學(xué)是保護(hù)通信的實(shí)踐。這是通過使用各種技術(shù)實(shí)現(xiàn)的,這些技術(shù)歸結(jié)為實(shí)施協(xié)議,防止不受歡迎的一方查看或更改數(shù)據(jù)。
密碼學(xué)學(xué)科可以描述為四個(gè)方面:
保密性:數(shù)據(jù)不會(huì)暴露給非預(yù)期的各方。
完整性:數(shù)據(jù)不會(huì)被操縱或破壞。
身份驗(yàn)證:各方能夠可靠地驗(yàn)證彼此的身份。
不可否認(rèn)性:通信可以被確認(rèn),之后參與者不會(huì)否認(rèn)。
對(duì)稱密碼
計(jì)算機(jī)出現(xiàn)之前的密碼學(xué)依賴于密碼的使用。密碼是從可讀文本到亂碼,然后再返回的映射。例如,一個(gè)簡(jiǎn)單的密碼是在文本中的每個(gè)字母上加四個(gè)(所以A變成E)。然后解碼將涉及簡(jiǎn)單地從每個(gè)字母中減去四個(gè)。這些過程稱為加密和解密。
在字母表中移動(dòng)四個(gè)位置非常明顯,而且不安全。更安全的是創(chuàng)建一個(gè)需要翻譯密鑰的復(fù)雜映射。這樣的密鑰必須分發(fā)給所有參與方。這種必要性意味著各種后勤弱點(diǎn)。
單向功能
隨著計(jì)算機(jī)的出現(xiàn)和隨之而來的數(shù)學(xué)進(jìn)步,加密的可能性變得更加復(fù)雜。出現(xiàn)了許多新技術(shù),但其中最基本的是所謂的單向函數(shù)(包括單向哈希,用于生成固定長(zhǎng)度的輸出)。單向函數(shù)被認(rèn)為是一種加密原語。顧名思義,單向函數(shù)僅在一個(gè)方向上起作用。
單向函數(shù)的一個(gè)常見用途,也是理解它們的一種好方法,是在將密碼持久化到數(shù)據(jù)庫(kù)時(shí)對(duì)其進(jìn)行散列處理(例如,在Java和JavaScript中)。密碼取自純文本(“fluffy123”),單向算法將其轉(zhuǎn)換為隨機(jī)字符串(“XFcbe2d3bh0sa”)。即使攻擊者獲得了對(duì)數(shù)據(jù)庫(kù)的訪問權(quán)限,密碼也是安全的。沒有已知的方法(使用當(dāng)前的計(jì)算機(jī)系統(tǒng))來有效地逆轉(zhuǎn)該過程。
一個(gè)奇怪的事實(shí)是,即使攻擊者可以完全訪問算法的邏輯(例如,這里是BCrypt的來源),但他們通常無法逆轉(zhuǎn)該功能。也就是說,單向散列并不完美,并且已經(jīng)引入了多種技術(shù)來破解它們(例如彩虹表)。
現(xiàn)代散列庫(kù)包括增加散列難度的能力(從而允許散列強(qiáng)度隨著計(jì)算能力的增加而增加)并在算法中引入“鹽”(從而確保相同輸入的散列仍然是唯一的)。只要鹽是保密的,用它散列的密碼基本上是不可破解的。
偽隨機(jī)函數(shù)
與單向函數(shù)一起,用于生成類似隨機(jī)數(shù)的算法被認(rèn)為是密碼學(xué)“原語”,即確保通信安全所必需的基本構(gòu)建塊。這是為什么?簡(jiǎn)而言之,任何秘密通信系統(tǒng)都依賴于安全方已知而外部未知的值。這取決于生成隨機(jī)數(shù)。(通常,用戶提供的輸入也被合并,但眾所周知,人類在提供此類輸入時(shí)不可靠。)
大多數(shù)類型的隨機(jī)種子(如從系統(tǒng)時(shí)鐘中提?。┲皇?ldquo;某種”隨機(jī)。如果黑客知道數(shù)字是如何生成的,他們就可以設(shè)計(jì)隨機(jī)數(shù)攻擊。黑客的聰明才智似乎與白帽程序員的聰明才智并駕齊驅(qū)。的確,密碼學(xué)的故事是一場(chǎng)來回的角逐,一種對(duì)創(chuàng)新的呼喚和回應(yīng)。
已經(jīng)開發(fā)了更安全的隨機(jī)數(shù)生成方法來挫敗隨機(jī)數(shù)攻擊。大多數(shù)加密庫(kù)都包含用于這些生成器的工具。
非對(duì)稱密鑰
也許現(xiàn)代密碼學(xué)中最巧妙和最有影響力的發(fā)展是非對(duì)稱密鑰對(duì),也稱為公私密鑰對(duì)?;舅枷胧巧蓛蓚€(gè)密鑰,一個(gè)用于加密,一個(gè)用于解密。加密密鑰可安全分發(fā),解密密鑰保密。
這項(xiàng)創(chuàng)新是在1970年代后期由兩位程序員和一位數(shù)學(xué)家開創(chuàng)的,他們將他們的首字母縮寫為他們發(fā)明的開創(chuàng)性加密系統(tǒng):RSA。(一個(gè)有趣的旁注:一個(gè)類似的系統(tǒng)是在幾年前由一位英國(guó)情報(bào)數(shù)學(xué)家發(fā)明的,但該發(fā)明被保密,考慮到計(jì)算機(jī)系統(tǒng)的局限性,該系統(tǒng)當(dāng)時(shí)被認(rèn)為不切實(shí)際。)
RSA和其他非對(duì)稱密鑰系統(tǒng)通過創(chuàng)建兩個(gè)以非對(duì)稱方式工作的密鑰,將單向函數(shù)的思想向前邁進(jìn)了一大步:第一個(gè)密鑰用于創(chuàng)建加密消息(公鑰),第二個(gè)用于創(chuàng)建加密消息解密它們(私鑰)。參見圖下圖:
這個(gè)技巧背后的數(shù)學(xué)并不簡(jiǎn)單。事實(shí)上,有一段時(shí)間,參與研究的研究人員甚至對(duì)理論上是否可能存在嚴(yán)重懷疑。今天,公私密鑰加密是現(xiàn)代互聯(lián)網(wǎng)安全基礎(chǔ)設(shè)施的基礎(chǔ),包括SSL/TLS使用的“傳輸層”安全、數(shù)字簽名和比特幣等加密貨幣。
需要注意的是,非對(duì)稱密鑰不會(huì)創(chuàng)建無法破解的系統(tǒng)。但只要私鑰保密,破解加密實(shí)際上是不可能的。除了眾多在最狂野的攻擊(包括隨機(jī)數(shù)的攻擊,攻擊時(shí)機(jī),和其他人)已敗露,即使是最安全的公共-私有密鑰對(duì)的安全性是基于多久將采取扭轉(zhuǎn)對(duì)所涉及的數(shù)字進(jìn)行因式分解的過程。
這可能看起來不太安全,但引用Brett Slatkin關(guān)于公鑰加密數(shù)學(xué)的文章,“即使是地球上最快的計(jì)算機(jī)上的奇特解決方案也需要直到宇宙的盡頭”才能破解現(xiàn)代非對(duì)稱加密。除非引入實(shí)用的量子計(jì)算,這將使破解類似RSA的加密成為多項(xiàng)式時(shí)間可解的問題(不一定是遙遠(yuǎn)的可能性),否則現(xiàn)代算法被認(rèn)為是實(shí)際應(yīng)用中可行的。
在當(dāng)前的應(yīng)用中,非對(duì)稱密鑰通常被用作一種握手,以建立對(duì)稱密鑰交換的安全通道。(這就是瀏覽器“協(xié)商TLS”時(shí)發(fā)生的情況。)因?yàn)閷?duì)稱密鑰在實(shí)踐中要快得多,服務(wù)器和客戶端通過非對(duì)稱密鑰相互驗(yàn)證,然后交出對(duì)稱密鑰以用于進(jìn)一步的通信。即使通過非機(jī)密渠道,這種通信也不會(huì)被竊聽或操縱。
公鑰基礎(chǔ)設(shè)施
非對(duì)稱密碼學(xué)的另一個(gè)重要警告是它通常需要一個(gè)可信的、集中的權(quán)威。這是因?yàn)轵?yàn)證某人是他們所說的人的問題不僅限于證明某人持有私鑰(非對(duì)稱加密可以自行完成)。相反,為了確保(例如)網(wǎng)絡(luò)服務(wù)器的SSL/TLS證書不僅在技術(shù)上有效,而且是真實(shí)的(真正代表它聲稱的組織),必須參考中央機(jī)構(gòu)(例如Google)。
這為黑客創(chuàng)造了更多機(jī)會(huì),因?yàn)轵?yàn)證密鑰層次結(jié)構(gòu)中的任何漏洞都會(huì)危及下面的所有密鑰。盡管確實(shí)會(huì)發(fā)生此類違規(guī)行為,但大部分互聯(lián)網(wǎng)都依賴于該系統(tǒng)。該系統(tǒng)作為一個(gè)整體被稱為公鑰基礎(chǔ)設(shè)施(PKI)。頒發(fā)證書的受信任方是證書頒發(fā)機(jī)構(gòu)(CA)。
PKI的一個(gè)替代方案是相當(dāng)好的隱私(PGP),其中用戶在點(diǎn)對(duì)點(diǎn)、分布式的基礎(chǔ)上相互信任,而不是依賴于集中式授權(quán)(這里也使用非對(duì)稱密鑰來交換對(duì)稱密鑰)。PGP通常用于加密電子郵件并驗(yàn)證下載內(nèi)容未被篡改。
一般而言,非對(duì)稱密鑰和密碼學(xué)的最復(fù)雜用途是在區(qū)塊鏈系統(tǒng)中發(fā)現(xiàn)的,例如比特幣。通過消除對(duì)集中授權(quán)的需求并將加密簽名交易的驗(yàn)證轉(zhuǎn)移到網(wǎng)絡(luò),區(qū)塊鏈為構(gòu)建在互聯(lián)網(wǎng)基礎(chǔ)設(shè)施之上的分布式但安全層上的新型系統(tǒng)開辟了可能性。我們現(xiàn)在正在目睹這些可能性的變現(xiàn)。
區(qū)塊鏈和建立在其上的系統(tǒng)是必不可少的加密結(jié)構(gòu)。密鑰對(duì)用于簽署交易,加密哈希用于驗(yàn)證鏈中的鏈接。
這是對(duì)當(dāng)前加密領(lǐng)域的旋風(fēng)之旅。盡管涉及很多復(fù)雜性,但對(duì)我們所有人(無論是程序員還是非程序員)來說,了解土地的位置都越來越有價(jià)值。