3DES

三重数据加密算法概述

首次发布| 1998 (ANS X9.52)
衍生自| DES
密码细节
密钥长度| 168，112或56 位 (对应密钥选项 1, 2, 3)
分组长度| 64位
结构| Feistel网络
重复回数| 相当于DES的48
最佳公开破解
Lucks：232组已知明文，2113次操作，包括290次DES加密，288位内存； Biham：以每个密钥对应的少数选择平文和284次加密操作找到228个目标密钥中的一个

密码学中，三重数据加密算法（英語：Triple Data Encryption Algorithm，縮寫為TDEA，Triple DEA），或稱3DES（Triple DES），是一種對稱密鑰加密块密码，相当于是对每个数据块应用三次資料加密標準（DES）算法。由于计算机运算能力的增强，原版DES由於密钥长度過低容易被暴力破解；3DES即是设计用来提供一种相对简单的方法，即通过增加DES的密钥长度来避免类似的攻击，而不是设计一种全新的块密码算法。

## 标准中的定义

[编辑]

TDEA算法在以下标准中被定义：

* ANS[註 1] X9.52-1998 三重数据加密算法的工作模式[註 2] (已失效)
* FIPS PUB 46-3 数据加密标准 (DES)（页面存档备份，存于互联网档案馆） (PDF) (已失效[1])
* NIST Special Publication 800-67 使用三重数据加密算法（TDEA）块密码的建议PDF（483 KB）
* ISO/IEC 18033-3:2005 信息技术—安全技术—加密算法—第三部分：块密码（页面存档备份，存于互联网档案馆）

## 算法的名称

[编辑]

最早的定义了该算法的标准（ANS X9.52，1998年发布）将其描述为“三重数据加密算法（TDEA）” — 即ANSI X3.92中定义的数据加密算法（DEA）的三次重复操作 — 而完全没有使用术语“3DES”或“DES”。FIPS PUB 46-3（1999）定义了“三重数据加密算法”（TDEA），也使用了术语“Triple DES”和“DES”。该标准中互换的使用“数据加密算法”（DEA）和“DES”的概念，其中以此开始DES的定义：

> 数据加密标准（DES）应当包括下文中的数据加密算法（DES[註 3]）与三重数据加密算法（TDEA，如ANSI X9.52中所描述的）

NIST SP 800-67（2004，2008[註 4]）主要使用术语TDEA，但也提到了“Triple DES（TDEA）”。ISO/IEC 18033-3（2005）使用“TDEA”，但其中提到：

> TDEA通称Triple DES（数据加密标准）。

没有一个定义了本算法的标准使用术语“3DES”。

## 算法

[编辑]

3DES使用“密钥包”，其包含3个DES密钥，K1，K2和K3，均为56位（除去奇偶校验位）。加密算法为：

密文 = EK3(DK2(EK1(明文)))

也就是说，使用K1为密钥进行DES加密，再用K2为密钥进行DES“解密”，最后以K3进行DES加密。

而解密则为其反过程：

明文 = DK1(EK2(DK3(密文)))

即以K3解密，以K2“加密”，最后以K1解密。

每次加密操作都只处理64位数据，称为一块。

无论是加密还是解密，中间一步都是前后两步的逆。这种做法提高了使用密钥选项2时的算法强度，并在使用密钥选项3时与DES兼容。

## 密钥选项

[编辑]

标准定义了三种密钥选项（Keying option），“密钥选项n”是标准中(X9.52, FIPS PUB 46-3, SP 800-67, ISO/IEC 18033-3)定义的TDEA的术语。然而，其它标准中，推荐和通用描述中也使用了其它术语。

* 密钥选项1：
* 三个密钥是独立的。常用名称为3TDEA或“三倍长度密钥”（triple-length keys）[2][3]
* 密钥选项1的强度最高，拥有3 x 56 = 168个独立的密钥位。在NIST SP 800-57[4]与SP 800-78-2[5]中定义。
* 密钥选项2（已弃用）：
* K1和K2是独立的，而K3=K1。常用名称为2TDEA，或“双倍长度密钥”（double-length keys）[2][3]
* 密钥选项2的安全性稍低，拥有2 x 56 = 112个独立的密钥位。该选项比简单的应用DES两次的强度较高，即使用K1和K2，因为它可以防御中途相遇攻击。 这是对“双重DES”（double DES）的改进，双重DES仅需要256步即可进行攻击。 國家標準技術研究所（NIST）已弃用此选项。[6]在NIST SP 800-57[4]和SP 800-78-1[5]中定义。
* 密钥选项3（已弃用）：
* 三个密钥均相等，即K1=K2=K3
* 密钥选项3等同与DES，只有56个密钥位。这个选项提供了与DES的兼容性，因为第1和第2次DES操作相互抵消了。该选项不再为NIST所建议[7]，亦不为ISO/IEC 18033-3所支持。

## 对多于一个块的加密

[编辑]

与其它的块密码一样，对多个数据块的加密和解密可以使用多种工作模式进行，而模式的定义可以与块密码算法相独立。然而，ANS X9.52和NIST SP 800-67（通过SP 800-38A[8]）确定了某些模式只能在特定限制下应用，而无需普遍的应用。例如，ANS X9.52提出对于CBC模式，初始化向量每次应当不同，而ISO/IEC 10116没有类似规定[9]。FIPS PUB 46-3和ISO/IEC 18033-3只定义了单块密码，而并没有对多块的工作模式做出限制。

## 安全性

[编辑]

普遍而言，有3个独立密钥的3DES（密钥选项1）的密钥长度为168位（三个56位的DES密钥），但由於中途相遇攻击，它的有效安全性仅为112位。密钥选项2将密钥长度缩短到了112位，但该选项对特定的选择明文攻击和已知明文攻击的强度较弱[10][11]，因此NIST认定它只有80位的安全性[4]。

对密钥选项1的已知最佳攻击需要约232组已知明文（又稱Sweet32攻击[12]），2113部，290次DES加密以及288位内存[13]（该论文提到了时间和内存的其它分配方案）。这在现在是不现实的，因此NIST认为密钥选项1可以使用到2030年[4]。若攻击者试图在一些可能的（而不是全部的）密钥中找到正确的，有一种在内存效率上较高的攻击方法可以用每个密钥对应的少数选择明文和约284次加密操作找到228个目标密钥中的一个[14]。

## 使用

[编辑]

电子货币业界和電子貨幣標準（如EMV）過往普遍使用3DES[15][16]，但3DES已經逐漸被更安全的AES代替。

Microsoft OneNote和Microsoft Outlook 2007使用3DES以密码保护用户数据[17][18]。

## 注释

[编辑]

1. ^ X9.52有时被错误的写作ANSI X9.52，然而标准自身的名称为ANS X9.52.
2. ^ X9.52将TDEA定义为DEA（定义于ANSI X3.92-1981中，数据加密算法）的一种复合操作，并没有包含DEA的算法内容。因此，X9.52必须与X3.92一起阅读。
3. ^ 疑为笔误，数据加密算法应为DEA。
4. ^ NIST SP 800-67第一版于2004年5月发布，并于2008年5月修订为1.1版，对弱密钥和半弱密钥的定义进行了修正和澄清。两个版本使用了相同的术语。

## 参考文献

[编辑]

1. ^ Federal Register vol 70, number 96, 宣告联邦信息处理标准（FIPS）46-3，“数据加密标准”（DES）；FIPS 74，“实现和使用NBS数据加密标准指导”；FIPS 81，“DES的工作模式”的失效 （页面存档备份，存于互联网档案馆） (PDF)
2. ^ 2.0 2.1 密码学指导：3DES. Cryptography World.  [2010-07-11]. （原始内容存档于2010-03-11）.
3. ^ 3.0 3.1 Triple DES Encryption. IBM.  [2010-07-11].
4. ^ 4.0 4.1 4.2 4.3 NIST Special Publication 800-57 密钥管理的建议&mdash；第一部分：综述 (修订版), 2007年3月 （页面存档备份，存于互联网档案馆） (PDF)
5. ^ 5.0 5.1 NIST Special Publication 800-78-2, 个人身份认证的密码学算法与密钥长度, 2010年2月 （页面存档备份，存于互联网档案馆） (PDF)
6. ^ Barker, Elaine. NIST Special Publication 800-57: Recommendation for Key Management Part 1: General (PDF) 4\. NIST. January 2016  [2017-09-05]. （原始内容存档 (PDF)于2020-12-10）.
7. ^ NIST SP 800-67
8. ^ NIST Special Publication 800-38A, 块密码工作模式的建议，方法和技术, 2001版 （页面存档备份，存于互联网档案馆） (PDF)
9. ^ ISO/IEC 10116:2006 信息技术 — 安全技术 — n位块密码的工作模式.  [2010-09-23]. （原始内容存档于2012-03-17）.
10. ^ Ralph Merkle, Martin Hellman: 关于多加密的安全性 （页面存档备份，存于互联网档案馆） (PDF), Communications of the ACM, Vol 24, No 7, pp 465–467, July 1981.
11. ^ Paul van Oorschot, Michael J. Wiener, 一种针对双密钥三次加密的已知明文攻击, EUROCRYPT'90, LNCS 473, 1990, pp 318–325.
12. ^ Sweet32: Birthday attacks on 64-bit block ciphers in TLS and OpenVPN. sweet32.info.  [2024-07-23]. （原始内容存档于2018-04-08） （英语）.
13. ^ Stefan Lucks: 攻击三次加密 （页面存档备份，存于互联网档案馆） (PDF), Fast Software Encryption 1998, pp 239–253.
14. ^ Eli Biham: 如何使用228步解密DES加密的消息 （页面存档备份，存于互联网档案馆） (PostScript), 1996.
15. ^ EMV 4.2 Specifications, 第二部 - 安全性和密钥管理, 4.2版, 2008年6月.  [2010-09-23]. （原始内容存档于2017-07-18）.
16. ^ VISA.  [2010-09-23]. （原始内容存档于2019-07-09）.
17. ^ Daniel Escapa's OneNote Blog - Encryption for Password Protected Sections, November 2006.  [2010-09-23]. （原始内容存档于2007-02-23）.
18. ^ Microsoft - Encrypt E-mail Messages, Outlook 2007.  [2010-09-23]. （原始内容存档于2010-03-28）.

## 参见

[编辑]

* 密码学主题

* DES
* DES-X
* AES
* Horst Feistel
* Walter Tuchman

* 查
* 论
* 编

分组密码

常见加密算法|

* AES
* Blowfish
* DES
* 内部细节
* 3DES
* Serpent
* Twofish

次常见加密算法|

* Camellia
* CAST-128（英语：CAST-128）
* IDEA
* RC2（英语：RC2）
* RC5
* SEED（英语：SEED）
* Skipjack（英语：Skipjack）
* TEA
* XTEA

其他加密算法|

* 3-Way（英语：3-Way）
* ABC（英语：ABC (cipher)）
* Akelarre（英语：Akelarre (cipher)）
* Anubis（英语：Anubis (cipher)）
* ARIA（英语：ARIA (cipher)）
* BaseKing（英语：BaseKing）
* BassOmatic（英语：BassOmatic）
* BATON（英语：BATON）
* BEAR and LION（英语：BEAR and LION ciphers）
* CAST-256（英语：CAST-256）
* CIKS-1（英语：CIKS-1）
* CIPHERUNICORN-A（英语：CIPHERUNICORN-A）
* CIPHERUNICORN-E（英语：CIPHERUNICORN-E）
* CLEFIA（英语：CLEFIA）
* CMEA（英语：Cellular Message Encryption Algorithm）
* Cobra（英语：Cobra ciphers）
* COCONUT98（英语：COCONUT98）
* Crab（英语：Crab (cipher)）
* Cryptomeria/C2（英语：Cryptomeria cipher）
* CRYPTON（英语：CRYPTON (cipher)）
* CS-Cipher（英语：CS-Cipher）
* DEAL（英语：DEAL）
* DES-X（英语：DES-X）
* DFC（英语：DFC (cipher)）
* E2（英语：E2 (cipher)）
* FEAL（英语：FEAL）
* FEA-M（英语：FEA-M）
* FROG（英语：FROG）
* G-DES（英语：GDES）
* GOST（英语：GOST (block cipher)）
* Grand Cru（英语：Grand Cru (cipher)）
* Hasty Pudding cipher（英语：Hasty Pudding cipher）
* Hierocrypt（英语：Hierocrypt）
* ICE（英语：ICE (cipher)）
* IDEA NXT（英语：IDEA NXT）
* Intel Cascade Cipher（英语：Intel Cascade Cipher）
* Iraqi（英语：Iraqi block cipher）
* KASUMI（英语：KASUMI (block cipher)）
* KeeLoq（英语：KeeLoq）
* KHAZAD（英语：KHAZAD）
* Khufu and Khafre（英语：Khufu and Khafre）
* KN-Cipher（英语：KN-Cipher）
* Ladder-DES（英语：Ladder-DES）
* Libelle（英语：Libelle (cipher)）
* LOKI97（英语：LOKI97）
* LOKI89/91（英语：LOKI）
* Lucifer（英语：Lucifer (cipher)）
* M6（英语：M6 (cipher)）
* M8（英语：M8 (cipher)）
* MacGuffin（英语：MacGuffin (cipher)）
* Madryga（英语：Madryga）
* MAGENTA（英语：MAGENTA）
* MARS（英语：MARS (cipher)）
* Mercy（英语：Mercy (cipher)）
* MESH（英语：MESH (cipher)）
* MISTY1（英语：MISTY1）
* MMB（英语：MMB）
* MULTI2（英语：MULTI2）
* MultiSwap（英语：MultiSwap）
* New Data Seal（英语：New Data Seal）
* NewDES（英语：NewDES）
* Nimbus（英语：Nimbus (cipher)）
* NOEKEON（英语：NOEKEON）
* NUSH（英语：NUSH）
* Q（英语：Q (cipher)）
* RC6
* REDOC（英语：REDOC）
* Red Pike（英语：Red Pike (cipher)）
* S-1（英语：S-1 block cipher）
* SAFER（英语：SAFER）
* SAVILLE（英语：SAVILLE）
* SC2000（英语：SC2000）
* SHACAL（英语：SHACAL）
* SHARK
* SM4
* Speck
* Spectr-H64（英语：Spectr-H64）
* Square（英语：Square (cipher)）
* SXAL/MBAL（英语：SXAL/MBAL）
* Threefish（英语：Threefish）
* Treyfer（英语：Treyfer）
* UES（英语：UES (cipher)）
* Xenon（英语：Xenon (cipher)）
* xmx（英语：xmx）
* XXTEA
* Zodiac（英语：Zodiac (cipher)）

密码设计|

* Feistel网络
* 密钥调度（英语：Key schedule）
* 乘积密码
* S盒
* P盒
* 代换-置换网络
* 混淆與擴散
* 雪崩效应
* 密钥白化
* 密钥长度
* 块大小

攻击（密码分析）|

* 穷举攻击/蛮力攻击
* EFF DES破解机
* 中途相遇攻击
* Biclique攻击（英语：Biclique attack）
* 三子集中途相遇攻击（英语：Biclique attack）
* 线性密码分析（英语：Linear cryptanalysis）
* 堆积引理（英语：Piling-up lemma）
* 差分密码分析
* 不可能差分密码分析（英语：Impossible differential cryptanalysis）
* 截断差分分析（英语：Truncated differential cryptanalysis）
* 高阶差分分析（英语：Higher-order differential cryptanalysis）
* 差分-线性攻击（英语：Differential-linear）
* 区分攻击（英语：Distinguishing attack）
* 已知密钥区分攻击（英语：Known-key distinguishing attack）
* 积分密码分析（英语：Integral cryptanalysis）
* 回力镖攻击（英语：Boomerang attack）
* 模n密码分析（英语：Mod n cryptanalysis）
* 相关密钥攻击（英语：Related-key attack）
* 滑动攻击（英语：Slide attack）
* 回旋密码分析（英语：Rotational cryptanalysis）
* 計時攻擊（英语：Timing attack）
* XSL攻击（英语：XSL attack）
* 插值攻擊
* Partitioning（英语：Partitioning cryptanalysis）
* 戴维斯攻击（英语：Davies' attack）
* 回弹攻击（英语：Rebound attack）
* 弱密钥（英语：Weak key）
* 肯德尔等级相关系数（英语：Kendall tau rank correlation coefficient）
* 卡方检验
* 时间、内存、数据取舍攻击（英语：Time/memory/data tradeoff attack）

密码标准|

* 高级加密标准（AES）评选过程
* CRYPTREC（英语：CRYPTREC）
* NESSIE（英语：NESSIE）

工作方式|

* 初始向量
* 工作模式
* 填充

* 查
* 论
* 编

密码学

* 密码学历史
* 密码分析
* 密碼學主題列表

* 對稱密鑰加密
* 分组密码
* 流密码
* 公开密钥加密
* 密碼雜湊函數
* 訊息鑑別碼
* 随机数
* 隐写术

* 分类
* 主题
* 专题

*[查]: 查看该模板
*[论]: 讨论该模板
*[编]: 编辑该模板