資料加密標準

數據加密標準（Data Encryption Standard，縮寫為 DES）是一種對稱密鑰加密塊密碼演算法，1976年被美國聯邦政府的國家標準局確定為聯邦資料處理標準（FIPS），隨後在國際上廣泛流傳開來。它基於使用56位密鑰的對稱算法。這個算法因為包含一些機密設計元素，相對短的密鑰長度以及懷疑內含美國國家安全局（NSA）的後門而在開始時有爭議，DES因此受到了強烈的學院派式的審查，並以此推動了現代的塊密碼及其密碼分析的發展。
DES現在已經不是一種安全的加密方法，主要因為它使用的56位密鑰過短。1999年1月，distributed.net與電子前哨基金會合作，在22小時15分鐘內即公開破解了一個DES密鑰。也有一些分析報告提出了該算法的理論上的弱點，雖然在實際中難以應用。為了提供實用所需的安全性，可以使用DES的衍生算法3DES來進行加密，雖然3DES也存在理論上的攻擊方法。DES標準和3DES標準已逐漸被高級加密標準（AES）所取代。另外，DES已經不再作為國家標準科技協會（前國家標準局）的一個標準。
在某些文獻中，作為算法的DES被稱為DEA（Data Encryption Algorithm，數據加密算法），以與作為標準的DES區分開來。在發音時，DES可以作為縮寫按字母拼出來()，或作為一個詞念成。

**DES的歷史**
DES最初出現在1970年代早期。1972年，在一個對美國政府的計算機安全需求的研究得出結果後，NBS（國家標準局，現在的NIST）開始徵集用於加密政府內非機密敏感信息的加密標準。因此1973年5月15日，在諮詢了美國國家安全局（NSA）之後，NBS向公眾徵集可以滿足嚴格設計標準的加密算法。然而，沒有一個提案可以滿足這些要求。因此在，1974年8月27日，NBS開始了第二次徵集。這一次，IBM提交了一種在1973-1974年間發展的算法，這份提案被有限度的接受了。這種算法是基於早先霍斯特·費斯妥（Horst Fiestel）提出的Lucifer算法的。費斯妥，沃爾特·塔克曼（Walter Tuchman），道·科柏密斯（Don Coppersmith），艾倫·康海姆（Alan Konheim），卡爾·梅爾（Carl Meyer），邁克·馬加什（Mike Matyas），羅伊·阿德勒（Roy Adler），埃德娜·格羅斯曼（Edna Grossman），比爾·諾茲（Bill Notz），林恩·史密斯（Lynn Smith）以及布萊恩特·塔克曼等人參與了IBM在算法設計和分析方面的工作。

**美國國家安全局在設計中的作用**
1975年3月17日，被選中的DES在“聯邦公報”上公佈並徵集公眾意見。次年，NBS舉行了兩個開放式研討會以討論該標準。不同團體提出了一些意見，其中公開密鑰加密先驅馬丁·赫爾曼和惠特菲爾德·迪菲認為密鑰長度過短以及神奇的“S盒”是NSA的不當干涉的結果。這項論點指出，算法被情報部門秘密的削弱了，使得他們—而不是別人—可以簡單的讀取加密信息。S盒的設計者之一，艾倫·康海姆指出：“我們將S盒發給了華盛頓，而他們發回來的S盒變得完全不同了。”因此，美國參議院情報特別委員會審查了NSA的行為以判斷是否存在不當行為。在1978年出版的一份公開的總結中，該委員會寫道：
然而，也有人提到了：
DES小組的另一個成員，沃爾特·塔克曼說：“完全在IBM內，由我們IBM人，發展了DES算法。NSA沒有干涉任何設計問題！”相反，一本解密了的NSA關於加密歷史的書則寫道：
以及：
由於Eli Biham（Eli Biham）和阿迪·薩莫爾（Adi Shamir）獨立發現和公開了差分密碼分析，一種破解塊密碼的通用方法，針對S盒中隱藏的弱點的懷疑在1990年平靜了下來。DES的S盒的設計使得該算法對這種攻擊方法的抵抗能力大大強於隨機的S盒，該事實強烈的支持了IBM在1970年代就已經知道了其中的技術背景的說法。這的確是事實—1994年，科柏密斯公開了一些原創的S盒的設計準則。據史蒂文·列維（Steven Levy）說，IBM的沃森研究院（Watson）在1974年發現了差分密碼攻擊，而NSA要求保持技術秘密。科柏密斯解釋IBM的保密決定說：“那是因為差分密碼攻擊是一種強有力的針對許多算法的工具，因此有人認為公開這樣的信息可能對國家安全產生不利影響。”列維引用沃爾特·塔克曼的話說：“他們讓我們將我們所有的文件可靠的封存起來...我們的確對每一份文件進行編號，並將它們放在保險箱裡，因為這些文件被認為是美國政府機密。他們說這樣做，所以我照做了。”

**作為標準的算法**
雖然仍有一些批評，DES在1976年11月被確定為聯邦標準，並在1977年1月15日作為FIPS PUB 46發佈，被授權用於所有非機密資料。它在1988年（修訂為FIPS-46-1），1993年（FIPS-46-2）和1999年（FIPS-46-3），後者被規定為3DES（見下文）。2002年5月26日，DES終於在公開競爭中被高級加密標準（AES）所取代。2005年5月26日，FIPS 46-3被官方的拒絕了，但NIST確認3DES在2030年以前均可用於敏感政府信息的加密。
DES算法也定義在了ANSI X3.92，以及ISO/IEC 18033-3中（作為TDEA的一部分）。
1994年發表了另一種理論攻擊方法，線性密碼分析，但1998年的一次蠻力攻擊顯示DES可以被實用的破解，顯示了替代算法的迫切需求。晚些時候的文章更詳細的探討了這些密碼分析的方法。
DES的導入被認為是密碼學的學術研究的催化劑，尤其是對塊密碼的密碼分析。NIST對DES的回顧中提到：

**年代簡表**

**替代算法**
安全性方面的考慮使得研究者在1980年代晚期和1990年代早期提出了一系列替代的塊密碼設計，包括RC5，Blowfish，IDEA，NewDES，SAFER，CAST5和FEAL。這些設計的大多數保持了DES的64位的塊大小，可以作為DES的直接替代方案，雖然這些方案通常使用64位或128位的密鑰。蘇聯導入了GOST 28147-89算法，該算法的塊大小為64位，而密鑰長度為256位，並在晚些時候的俄羅斯得到了應用。
2000年代，DES逐漸被3DES替代。3DES相當於用兩個（2TDES）或三個（3TDES）不同的密鑰對數據進行三次DES加密。2010年代，3DES逐漸被更安全的高級加密標準（AES）替代。
2000年10月，在歷時接近5年的徵集和選拔之後，NIST選擇了高級加密標準（AES）替代DES和3DES。2001年2月28日，聯邦公報發表了AES標準，以此開始了其標準化進程，並於2001年11月26日成為FIPS PUB 197標準。AES算法在提交的時候稱為Rijndael。選拔中其它進入決賽的算法包括RC6，Serpent，MARS和Twofish。

**算法描述**
File:DES-main-network.png|thumb|250px|圖1—DES中的總體費斯妥結構
rect 0 130 639 229 PC-1
rect 220 300 421 405 F函數
rect 220 594 421 701 F函數
rect 220 1037 421 1144 F函數
rect 220 1330 421 1437 F函數
rect 0 1478 639 1577 PC-2
circle 50 351 26 XOR
circle 50 647 26 XOR
circle 50 1090 26 XOR
circle 50 1383 26 XOR
DES是一種典型的塊密碼—一種將固定長度的明文通過一系列複雜的操作變成同樣長度的密文的算法。對DES而言，塊長度為64位。同時，DES使用密鑰來自定義變換過程，因此算法認為只有持有加密所用的密鑰的用戶才能解密密文。密鑰表面上是64位的，然而只有其中的56位被實際用於算法，其餘8位可以被用於奇偶校驗，並在算法中被丟棄。因此，DES的有效密鑰長度僅為56位。
與其它塊密碼相似，DES單單它自身並不構成加密的實用手段，而必須以某種工作模式進行實際操作。FIPS-81確定了DES使用的幾種模式。FIPS-74包括了更多關於DES使用的討論。

**整體結構**
算法的整體結構如圖1所示：有16個相同的處理過程，稱為“回次”（round），並在首尾各有一次置換，稱為IP與FP（或稱IP-1，FP為IP的反函數（即IP“撤銷”FP的操作，反之亦然）。IP和FP幾乎沒有密碼學上的重要性，為了在1970年代中期的硬件上簡化輸入輸出數據庫的過程而被顯式的包括在標準中。
在主處理回次前，數據塊被分成兩個32位的半塊，並被分別處理；這種交叉的方式被稱為費斯妥結構。費斯妥結構保證了加密和解密過程足夠相似—唯一的區別在於子密鑰在解密時是以反向的順序應用的，而剩餘部分均相同。這樣的設計大大簡化了算法的實現，尤其是硬件實現，因為沒有區分加密和解密算法的需要。
圖中的⊕符號代表異或（XOR）操作。“F函數”將數據半塊與某個子密鑰進行處理。然後，一個F函數的輸出與另一個半塊異或之後，再與原本的半塊組合並交換順序，進入下一個回次的處理。在最後一個回次完成時，兩個半塊需要交換順序，這是費斯妥結構的一個特點，以保證加解密的過程相似。

**費斯妥函數（F函數）**
圖2中顯示了費斯妥函數（F函數）的過程。其每次對半塊（32位）進行操作，幷包括四個步驟：
File:DES-f-function.png|thumb|250px|圖2—DES的費斯妥函數（F函數）
rect 10 88 322 170 E函數
rect 9 340 77 395 S盒1
rect 89 340 157 395 S盒2
rect 169 340 237 395 S盒3
rect 247 340 315 395 S盒4
rect 327 340 395 395 S盒5
rect 405 340 473 395 S盒6
rect 485 340 553 395 S盒7
rect 565 340 633 395 S盒8
rect 9 482 630 565 P置換
circle 319 232 21 XOR
# 擴張—用擴張置換（圖中的E）將32位的半塊擴展到48位，其輸出包括8個6位的塊，每塊包含4位對應的輸入位，加上兩個鄰接的塊中緊鄰的位。
# 與密鑰混合—用異或操作將擴張的結果和一個子密鑰進行混合。16個48位的子密鑰—每個用於一個回次的F變換—是利用密鑰調度從主密鑰生成的（見下文）。
# S盒—在與子密鑰混合之後，塊被分成8個6位的塊，然後使用“S盒”，或稱“置換盒”進行處理。8個S盒的每一個都使用以查找表方式提供的非線性的變換將它的6個輸入位變成4個輸出位。S盒提供了DES的核心安全性—如果沒有S盒，密碼會是線性的，很容易破解。
# 置換—最後，S盒的32個輸出位利用固定的置換，“P置換”進行重組。這個設計是為了將每個S盒的4位輸出在下一回次的擴張後，使用4個不同的S盒進行處理。
S盒，P置換和E擴張各自滿足了克勞德·香農在1940年代提出的實用密碼所需的必要條件，“混淆與擴散”。

**密鑰調度**
File:DES-key-schedule.png|thumb|250px|圖3—DES的密鑰調度
rect 96 28 298 58 PC-1
rect 127 122 268 155 PC-2
rect 127 216 268 249 PC-2
rect 127 357 268 390 PC-2
rect 127 451 268 484 PC-2
rect 96 91 127 116 左移1位
rect 268 91 299 116 左移1位
rect 96 185 127 210 左移1位
rect 268 185 299 210 左移1位
rect 96 326 127 351 左移2位
rect 268 326 299 351 左移2位
rect 96 419 127 444 左移1位
rect 268 419 299 444 左移1位
圖3顯示了加密過程中的密鑰調度—產生子密鑰的算法。首先，使用選擇置換1（PC-1）從64位輸入密鑰中選出56位的密鑰—剩下的8位要麼直接丟棄，要麼作為奇偶校驗位。然後，56位分成兩個28位的半密鑰；每個半密鑰接下來都被分別處理。在接下來的回次中，兩個半密鑰都被左移1或2位（由回次數決定），然後通過選擇置換2（PC-2）產生48位的子密鑰—每個半密鑰24位。移位（圖中由47組選擇明文。DES被設計為對DC具有抵抗性。- 線性密碼分析由松井充（Mitsuru Matsui）發現，需要243組已知明文；該方法已被實現，是第一種公開的實驗性的針對DES的密碼分析。沒有證據顯示DES的設計可以抵抗這種攻擊方法。一般概念上的LC—“多線性密碼分析”—在1994年由Kaliski和Robshaw所建議，並由比留科夫等人於2004年所改進。線性密碼分析的選擇明文變種是一種類似的減少數據複雜性的方法。帕斯卡爾·朱諾德（Pascal Junod）在2001年進行了一些確定線性密碼分析的實際時間複雜性的實驗，結果顯示它比預期的要快，需要約239–241次操作。- 改進的戴維斯攻擊：線性和差分密碼分析是針對很多算法的通用技術，而戴維斯攻擊是一種針對DES的特別技術，在1980年代由唐納德·戴維斯（Donald Davies）首先提出，並於1997年為畢漢姆和亞歷克斯·比留科夫（Alex Biryukov）所改進。其最有效的攻擊形式需要250已知明文，計算複雜性亦為250，成功率為51%。
也有一些其它的針對削減了回次的密碼版本，即少於16回次的DES版本。這些攻擊顯示了多少回次是安全所需的，以及完整版本擁有多少“安全餘量”。差分線性密碼分析於1994年為蘭福德（Langford）和海爾曼所提出，是一種組合了差分和線性密碼分析的方法。一種增強的差分線性密碼分析版本可以利用215.8組已知明文可以以229.2的時間複雜性破解9回次的DES。

**次要的密碼學特性**
DES有補碼特性，即
其中是的補碼，是以為密鑰的加密函數，和分別表示明文和密文。這樣的性質表明暴力破解的工作量在選擇明文攻擊下可以減少一半。
DES有四個所謂的弱密鑰。若使用弱密鑰，加密和解密有相同的效果（參見對合)：
或
也有6對半弱密鑰。若使用某個半弱密鑰進行加密，則相當於使用其對應的半弱密鑰進行解密：
或，
在實現中可以輕易的避開弱密鑰和半弱密鑰，可以顯式的測試密鑰，或簡單的隨機選擇密鑰：剛好選到弱或半弱密鑰的可能性幾乎沒有。這些密鑰事實上並不比其它的密鑰弱，因為他們沒有給攻擊以任何可利用的好處。
DES也被證明不是群，或更精確的，集合（對於所有可能的密鑰）在複合函數之下不是一個群，也不“近似”於一個群。這有時是一個開放式的問題，而且若是這種情況，破解DES是可能的，且類似於3DES的加密模式不能增加其安全性。
DES的最大密碼學安全性被限制在了約64位，除非獨立選擇每個回次的子密鑰而不是從密鑰中生成，這樣做可以將允許768位的安全性。

**參考文獻**

**引用**

**來源**
 Ehrsam 等：《用於數據安全的塊密碼系統產品》, 3962539, 1975年2月24日發佈- Gilmore, John. 《破解DES：加密研究的秘密，竊聽政策和芯片設計》, 1998, O'Reilly, ISBN 978-1-56592-520-5

**外部鏈接**
  EFF的DES破解器計劃-  針對DES的密碼學提示-  John Savard對DES的描述DES-  可以顯示中間值的基於Javascript的DES計算器 date=20170520071415 -  COPACOBANA，魯爾大學和基爾大學的基於FPGA的價值$10,000的DES破解器-  RFC4772 :使用DES的安全隱患 date=20210506112135 -  一份簡單的DES/3DES實現文檔 date=20160409113224 

**參見**
 密鑰密碼學- Skipjack加密- 布萊恩特·塔克曼- 3DES