1.7 從理論到實踐:選擇獨特冒險
在密碼學領域金字塔上面的是提出并解決數(shù)學難題的密碼分析師,在金字塔下面的是希望加密某些數(shù)據(jù)的軟件工程師。
——Thai Duong (“So you want to roll your own crypto?”,2020)
在研究和使用密碼學的這些年里,我從未見過以單一模式在實際應用程序中使用密碼原語的例子。現(xiàn)實情況是,密碼學的使用方式相當混亂。在某一理論原語被采用前,會有很多的密碼學研究者對其進行研究和分析,最終將其變成更實用、更安全的密碼學原語。我該怎么解釋這些呢?
聽說過Choose Your Own Adventure一書嗎?這是一個相對老舊的故事集,我們必須選擇逐步完成故事中的任務。原則很簡單,先按順序閱讀,然后通過書中提供的一些選項讓我們決定接下來選擇閱讀哪一部分。每個選項都與一個不同的節(jié)號相關聯(lián),我們可以直接跳到所選節(jié)號的內容。因此,我也按照這種方式安排本書內容。從下一段開始,我們可以按照本書所給順序去讀本書。
一切從這里開始。你是誰?你是密碼學家Alice嗎?還是在私企工作而且有問題亟待解決的David呢?或者你是在特殊部門工作,專門從事密碼學研究的Eve?
● 如果你是Alice,請?zhí)讲襟E1。
● 如果你是David,請?zhí)讲襟E2。
● 如果你是Eve,請?zhí)讲襟E3。
步驟 1:研究人員必須進行研究。你是一位在大學工作的研究員,或者是一名任職于私人公司或非營利組織的研究者,或者你就職于NIST或NSA等美國政府研究機構。因此,你的研究資助可能來自不同的機構或組織,這可能會激勵你研究不同的東西。
● 你會發(fā)明一個新的密碼原語,請?zhí)讲襟E4。
● 你會提出一個新的構造,請?zhí)讲襟E5。
● 你打算參與一場密碼競賽,請?zhí)讲襟E6。
步驟 2:工業(yè)有需求。工作任務就是提出新的行業(yè)標準。例如,Wi-Fi聯(lián)盟就是一個由專注于Wi-Fi協(xié)議的公司資助的非營利組織,該組織旨在制定一套有關Wi-Fi協(xié)議的標準。另一個與標準工作有關的例子是,多家銀行聯(lián)合制定支付卡行業(yè)數(shù)據(jù)安全標準(The Payment Card Industry Data Security Standard,PCI-DSS),在處理信用卡號時,該標準會強制要求使用規(guī)定的算法和協(xié)議。
● 你決定去資助一些需要的研究,請?zhí)讲襟E1。
● 你決定提出一些新的原語或協(xié)議,請?zhí)讲襟E5。
● 你打算發(fā)起一場密碼算法競賽,請?zhí)讲襟E6。
步驟 3:政府有需求。你為政府效力,需要設計一些新的密碼算法。例如,NIST的任務就是發(fā)布聯(lián)邦信息處理標準(The Federal Information Processing Standard,F(xiàn)IPS),該標準規(guī)定了處理政府事務的公司可以使用哪些密碼算法。雖然這些標準中大多是成功的案例,人們對政府機構推行的標準也抱有高度的信任,但是關于這些標準的失敗之處也值得一談。
2013年,在愛德華·斯諾登(Edward Snowden)披露了一些美國政府的丑聞之后,人們發(fā)現(xiàn)美國國家安全局(NSA)故意將一個藏有后門的算法納入其推行的標準中(見Bernstein等人的文章“Dual EC: A Standardized Back Door”),這個后門算法允許NSA(只有NSA)推測密鑰。這些后門如同“魔法口令”一樣,使美國政府(據(jù)說只有美國政府)可以破解加密的消息。之后,密碼社區(qū)不再信任美國政府機構推出的標準和建議。在2019年,人們發(fā)現(xiàn)俄羅斯標準機構GOST也出現(xiàn)類似的情況。
密碼學家一直懷疑GOST在2006年發(fā)布的一項NIST通過的標準中植入了漏洞,后來這項標準被由擁有163個成員方的國際標準化組織(International Organization for Standardization)采納。而美國國家安全局的機密備忘錄似乎也能證實:兩位微軟密碼學家在2007年發(fā)現(xiàn)該標準中的致命弱點是由GOST機構設計的。值得注意的是,正是NSA編寫了該標準,并積極在國際組織上推行該標準,并私下稱其為“技巧上的挑戰(zhàn)”。
——《紐約時報》(“N.S.A. Able to Foil Basic Safeguards of Privacy on Web”,2013)
● 你要資助一些研究,請?zhí)讲襟E1。
● 你要組織一場公開競賽,請?zhí)讲襟E6。
● 你打算將正在使用的原語或協(xié)議標準化,請?zhí)讲襟E7。
步驟4:提出新概念。作為一名研究人員,總是設法做到一些不可能完成的事情;確實,盡管可用的加密原語已經(jīng)有很多,但密碼學家每年仍會提出一些新的原語。其中,有些概念是不可能實現(xiàn)的,而有些概念最終可以實現(xiàn)。也許,你已有實際的構造,并將其作為所提原語的一部分,或者選擇等待,看看是否有人可以想出一些新的原語。
● 你提出的原語已經(jīng)實現(xiàn),請?zhí)讲襟E5。
● 你提出的原語最終不可以實現(xiàn),請?zhí)介_頭部分。
步驟5:一個新的原語或協(xié)議被提出。密碼學家通過提出一種新的算法來實例化一個概念。例如,AES是一個加密方案(AES最初由Vincent Rijmen和Joan Daemen提出,他們用其名字的縮寫Rijndael來命名這個算法,又稱Rijndael加密法)。下一步該怎么做呢?
● 某個人以你的構造為基礎提出新的構造,請?zhí)讲襟E5。
● 你參加了一個公開的比賽,并且贏得這場賽事!請?zhí)讲襟E6。
● 你所做的工作受到大肆宣傳,并且即將成為標準,請?zhí)讲襟E7。
● 你決定將你的構造申請成專利,請?zhí)讲襟E8。
● 你或其他人認為你構造的原語非常有趣,并決定將該構造實現(xiàn)出來,請?zhí)讲襟E9。
步驟 6:算法在競賽中獲勝。密碼學家最喜歡的競技就是一場公開的比賽!例如,AES就是一項由世界各地密碼學研究者都可自由參加的競賽。整個競賽經(jīng)過數(shù)十次的提交和幾輪密碼分析者的分析(這可能需要幾年時間),候選算法名單中的算法逐漸減少,直至剩下一個算法,便將該算法作為標準。
● 你很幸運,經(jīng)過多年的競爭,你的新構造最終贏得比賽!請?zhí)讲襟E7。
● 你不夠走運,輸?shù)袅吮荣悾埢氐介_頭。
步驟 7:標準化算法或協(xié)議。標準通常由政府或標準化機構發(fā)布。標準化的目的是最大限度地提高互操作性。例如,NIST會定期發(fā)布一些密碼標準。著名的密碼學標準化機構當屬國際互聯(lián)網(wǎng)工程任務組(Internet Engineering Task Force,IETF),本書中涉及的許多互聯(lián)網(wǎng)標準(如TCP、UDP、TLS等)都出自該機構。IETF中的標準被稱為征求意見(Request For Comment,RFC),并且?guī)缀跞魏蜗胍帉憳藴实娜硕伎梢跃帉憽?/p>
為了強調不通過投票表決問題,我們還采用了“決議”的傳統(tǒng):例如,在面對面的會議中,工作組主席為了讓大家獲得“決策權”,有時會要求參會者就一個特定的問題(“贊成”或“反對”)進行交流,而不是舉手表決。
——RFC 7282(“On Consensus and Humming in the IETF”,2014)
有時,某個公司會直接發(fā)布一個標準。例如,RSA Security LLC(由RSA算法的創(chuàng)建者出資)為了讓本公司使用的算法和技術合法化,曾發(fā)布了15個稱為公鑰加密標準(Public Key Cryptography Standards,PKCS)的技術文件。如今,這種情況非常少見。現(xiàn)在,許多公司都是通過IETF將它們的協(xié)議或算法標準化為RFC文檔,而不是去自定義一些新的標準化文檔。
● 你提出的算法或協(xié)議得到實現(xiàn),請?zhí)讲襟E9。
● 沒有人關心你發(fā)布的標準,請回到開頭。
步驟 8:專利到期。通常,密碼算法被申請了專利就意味著沒有人會使用該算法。然而,一旦專利到期,人們會對這個算法重新產生興趣,這并不是什么罕見之事。最典型的例子可能是Schnorr簽名,該算法是一個備受歡迎的簽名算法,這種情形持續(xù)到1989年Schnorr為該簽名算法申請專利。這導致NIST只能將一個較差的簽名算法作為標準,稱為數(shù)字簽名算法(Digital Signature Algorithm,DSA),該算法在當時成為首選簽名算法,但如今很少使用。Schnorr簽名的專利于2008年到期,此后該算法再次流行起來。
● 時間過了很久,你提出的算法仍無人過問,請回到開頭。
● 你的構造引發(fā)了一系列新的構造,這些新的構造都以你先前的構造為基礎,請?zhí)讲襟E5。
● 現(xiàn)在很多人想使用你的構造,但只有你的構造成為標準后他們才肯使用,請?zhí)讲襟E7。
● 一些開發(fā)者正在使用你設計的算法,請?zhí)讲襟E10。
步驟9:實現(xiàn)一個新的構造或協(xié)議。實現(xiàn)者不僅要完全搞懂一篇論文或一項標準(盡管標準的撰寫本來就應該是面向實現(xiàn)者的),而且必須使實現(xiàn)的算法易于使用,這是一項艱巨的任務。另外,使用者還可能會以一種錯誤的方式使用密碼算法,因此做到正確使用密碼算法也并非易事。
● 有人認為標準本身應該包含相應的實現(xiàn),不提供具體實現(xiàn)的標準不夠完備,請?zhí)讲襟E7。
● 你編寫的密碼程序庫得到極力推廣,請?zhí)讲襟E10。
步驟 10:作為開發(fā)人員在應用程序中使用密碼協(xié)議或原語。你的密碼程序庫可以輕松滿足開發(fā)人員的需要!
● 某個原語可以解決你的需求,但它沒有被標準化。情況有點不好,請?zhí)讲襟E7。
● 我希望用我熟悉的編程語言實現(xiàn)這個原語,請?zhí)讲襟E9。
● 我以錯誤的方式使用這個密碼庫,或者使用的構造已被攻破,游戲結束。
讓一個密碼原語變得在現(xiàn)實世界可用的方法有很多。最好的方法應該是采用經(jīng)過多年的安全分析、對算法實現(xiàn)者友好的標準,以及性能良好的密碼程序庫。最糟糕的方法是使用不安全的算法和不友好的實現(xiàn)。一個密碼原語變得實用的最佳路線如圖1.18所示。

圖1.18 一個密碼算法的理想生命周期始于密碼學家實例化了某個概念。例如,AES是對稱加密概念的一個實例(對稱加密算法還有很多)。一個新的密碼原語構造可以這樣被標準化:每個人都同意以某種方式來實現(xiàn)它以最大限度地提高互操作性。然后,用不同的語言實現(xiàn)該標準,使標準化的密碼算法得以廣泛應用
- unidbg逆向工程:原理與實踐
- Web安全與攻防入門很輕松(實戰(zhàn)超值版)
- Getting Started with FortiGate
- 網(wǎng)絡安全技術及應用(第3版)
- 代碼審計:企業(yè)級Web代碼安全架構
- 移動APT:威脅情報分析與數(shù)據(jù)防護
- 網(wǎng)絡安全設計、配置與管理大全
- 無線傳感器網(wǎng)絡安全與加權復雜網(wǎng)絡抗毀性建模分析
- 網(wǎng)絡空間安全實戰(zhàn)基礎
- Instant OSSEC Host-based Intrusion Detection System
- 計算機網(wǎng)絡安全與應用技術(第2版)
- 極限黑客攻防:CTF賽題揭秘
- 計算機病毒揭秘與對抗
- 網(wǎng)站入侵與腳本技術快速防殺
- 基于數(shù)據(jù)科學的惡意軟件分析