跳轉到內容

密碼學/DES

來自華夏公益教科書,開放書籍,開放世界

資料加密標準 (DES) 是一種廣泛使用的加密資料演算法。它由 IBM 開發,名為 Lucifer,並在 1973 年對更優密碼系統的徵集響應中提交給 NBS。美國國家標準與技術研究院在國家安全域性的幫助下對 IBM 的設計進行了一些修改;DES 於 1977 年 1 月被採用為標準。

DES 是一種乘積分組加密演算法(一種密碼),其中 16 次迭代或輪次,即替換和置換(置換)過程級聯。分組大小為 64 位,因此可以將 64 位資料塊(明文)加密成 64 位密文。控制轉換的金鑰也包含 64 位。然而,只有其中 56 位可供使用者使用;其餘 8 位用於校驗奇偶校驗。因此,實際金鑰長度為 56 位。

金鑰位子集被指定為 K1、K2 等,下標表示輪數。在每輪中使用金鑰位進行的密碼函式(替換和置換)標記為 f。在轉換過程的每個中間階段,來自前一階段的密碼輸出被劃分為 32 個最左側位 Li 和 32 個最右側位 Ri。Ri 被置換以成為下一個更高中間密碼 Li+1 的左側部分。然而,下一個密碼的右側部分 Ri+1 是金鑰和整個前一中間密碼的複雜函式。DES 安全性的基本特徵是 f 包括一個非常特殊的非線性替換 - 即 f(A) + f(B) 不等於 f(A + B) - 由標準局?以表格函式形式指定,稱為 S 盒。此操作生成一個 32 位數字,邏輯上將其新增到 Ri 以生成新的中間密碼的左側部分。此過程重複 16 次。要解密密碼,按相反順序執行此過程,第 16 輪排在最前面。DES 演算法適合積體電路實現。到 1984 年,標準局已認證了超過 35 種 DES 的 LSI 和 VLSI 晶片實現,大多數都在單個 40 引腳晶片上,其中一些晶片的速度為每秒數百萬位。

當密碼首次釋出時,S 盒的設計標準沒有公佈。由於國家安全域性參與了 S 盒的設計,大多數安全研究人員對 DES 非常謹慎,並且普遍擔心 NSA 的修改是為了削弱密碼。

在 1990 年,隨著 Biham 和 Shamir 獨立發現和公開發表差分密碼分析,結果表明,至少有一部分謹慎是不必要的。在發表這篇論文後,參與設計的 IBM 人員公開宣告,設計的主要因素是加強對差分密碼分析的抵抗力。當時設計標準背後的保密性似乎是由於當時公眾不知道這種技術。

值得注意的是,DES 理論上容易受到 Matsui 後來發現的一種技術 - 線性密碼分析 - 的攻擊。目前尚不清楚 NSA 在 DES 最終確定時是否知道線性密碼分析,但大多數了解情況的觀察人士認為不知道。IBM DES 的設計者之一 Don Coppersmith 稱,IBM 本身當時並不知道線性密碼分析。

由於金鑰長度只有 56 位,DES 可以並且已被暴力破解方法(即窮舉所有可能的金鑰)破解。據信,選擇這種縮短金鑰長度的原因之一是,NSA 在 70 年代中期擁有足夠的計算能力來暴力破解這種長度的金鑰。自那以後,計算機硬體的進步使得現在幾乎任何人都可以擁有足夠的計算能力。EFF 是一個網路空間公民權利組織(沒有太多資金和人員),他們在不到兩天的時間裡完成了這項工作,時間大約與美國司法部的一名律師公開宣佈 DES 仍然不可破解時相同。

提高 DES 安全性的最明顯方法是用不同的金鑰對資料進行多次加密。用 DES 對資料進行雙重加密並不能增加太多安全性,因為它容易受到中間相遇攻擊。在這方面更進一步的是,許多以前的 DES 使用者現在使用三重 DES (3DES),它由 DES 的專利權人之一進行描述和分析(參見 FIPS 46-3);它涉及用不同的金鑰對每個資料塊進行三次 DES 加密。3DES 被廣泛認為目前足夠安全,儘管它非常慢。但是請注意,有幾種方法可以使用 DES 三次;其中只有一種是 Tuchman 的 3DES。

經過又一次長時間的延遲競賽,(NIST) 選擇了一種新的密碼,高階加密標準 (AES) 來取代 DES(2001 年秋季)。AES 由其設計者以 Rijndael 的名字提交。

實施

http://www.codeproject.com/KB/cs/NET_Encrypt_Decrypt.aspx (C#,程新文)
http://frank.anemaet.nl/crypto/DES/ (Java 實現,Frank Anemaet)
http://www.tero.co.uk/des/ (Javascript 實現,Paul Tero)

華夏公益教科書