【密码算法 之一】对称加密算法 DES \ 3DES 浅析

这篇具有很好参考价值的文章主要介绍了【密码算法 之一】对称加密算法 DES \ 3DES 浅析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 什么是DES

  DES(Data Encryption Standard)是1977年美国联邦信息处理标准(FIPS)中所采用的一种对称密码(FIPS 46-3)。DES一直以来被美国以及其它国家的政府和银行等广泛使用。
  然而,随着计算机的进步,现在DES已经能够被暴力破解,强度大不如从前了。20世纪末,RSA公司举办过破译DES的比赛(DES Chanllenge),结果1997年的 DES Challenge I 中用了96天破译秘钥,1998年 DES Challenge II-1 中用了41天,1998年的 DES Challenge II-2 中用了56小时,1999年的 DES Challenge III 中只用了22小时15分钟。
  由于DES的密文可以在短时间内被破译,因此除了用它来解密以前的密文以外,现在我们不应该再使用DES了。

  DES是以64比特的明文(比特序列)为一个单位进行加密的,这个64比特的单位称为“分组”。以分组为单位进行处理的密码算法称为“分组密码”,DES就是分组密码的一种。
  DES每次只能加密64比特的数据,因此,如果需要加密的明文比较长,就需要对DES加密进行迭代(反复),而迭代的具体方式就称为模式(mode)。关于模式的详细分析可参考另一篇文章:【密码算法 之三】分组密码工作模式 (ECB \ CBC \ CFB \ OFB \ CTR \ XTS)浅析。
【密码算法 之一】对称加密算法 DES \ 3DES 浅析

2. 原理

  DES的基本结构是由Horst Feistel设计的,因此称为Feistel网络(Feistel network)、Feistel结构(Feistel structure)或者Feistel密码(Feistel cipher)。这一结构不仅用于DES,在其他的很多密码算法中也有应用。
  在该网络中,加密的各个步骤称为轮(round),整个加密过程就是若干轮的循环。DES是一种16轮循环的Feistel网络。

2.1 单轮 Feistel 网络

【密码算法 之一】对称加密算法 DES \ 3DES 浅析
  上图表示了Feistel网络的一轮数据处理的情况。输入的数据被等分为左右两半部分分别进行处理。在上图中左半部分称为“左侧”,由半部分称为“右侧”。
  中间的“子秘钥”指的是本轮加密所使用的秘钥,在Feistel网络中,每一轮都需要使用不同的子秘钥。由于子秘钥只能在一轮中使用,因此属于“局部秘钥”,因此才称为子秘钥(subkey)。
  轮函数的作用是根据“右侧”和子秘钥生成对“左侧”进行加密的比特序列,它是整个密码系统的核心。将轮函数的输出与“左侧”进行XOR运算,得到的结果过就是“加密后的左侧”,而输入的“右侧”则会直接称为“加密后的右侧”。

一轮运算的整体步骤如下:

  • 将输入数据等分为左右两半部分;
  • 将输入的右侧直接发送到输出的右侧;
  • 将输入的右侧发送给“轮函数”;
  • 轮函数根据右侧数据与子秘钥,计算出一串随机比特序列;
  • 将步骤4中得到的随机比特序列与“左侧数据”进行异或(XOR)运算,并将数据结果作为加密后的左侧。

2.1 多轮 Feistel 网络

【密码算法 之一】对称加密算法 DES \ 3DES 浅析

  • 在Feistel运算时,需要使用不同的子秘钥对一轮数据进行重复若干次,并在每一轮处理之间将“左侧数据”和“右侧数据”对调;
  • 最后一轮计算的输出,不需要对调;
  • 由于XOR的特性,那么使用同一秘钥,进行一轮加密,再重新运行一次,则又会得到明文;
  • Feistel网络的解密过程只需按照加密的相反顺序使用子秘钥,就可以完成数据的解密操作;
  • Feistel网络的轮数可以任意增加,无论进行多少轮的运算,都不会出现无法解密的情况;
  • 加密和解密使用完全相同的结构来实现,这是 Feistel网络的一个特点;

3. 3DES(TDEA)

  三重DES(triple-DES)是为了增加DES的强度,将DES重复3次所得到的一种密码算法,也称为TDEA(Triple Data Encryption Algorithm),通常缩写为3DES。
  三重DES加解密流程如下:
【密码算法 之一】对称加密算法 DES \ 3DES 浅析

  • 加密流程:加密(秘钥1)-- 解密(秘钥2)-- 加密(秘钥3)
  • 解密流程:解密(秘钥1)-- 加密(秘钥2)-- 解密(秘钥3)
  • 若秘钥1、秘钥2、秘钥3,使用完全一样的秘钥,那么3DES与DES是完全一样的
  • 若秘钥1与秘钥3使用相同的秘钥,而秘钥2使用不同的秘钥,这种三重DES就称为DES-EDE2,如下图所示:

【密码算法 之一】对称加密算法 DES \ 3DES 浅析

4. 子秘钥

  DES的输入秘钥通常是64bit,其中每第8个位都作为前面7位的一个奇偶校验位,没有人清楚以这种方式规范DES的原因,这8个奇偶校验位都不是真正的秘钥位,也没有增加秘钥的安全性,所以说DES其实是一个56位的密码,而不是64位的。
  子秘钥(也称轮秘钥)是从原始的56位秘钥中得到16个轮秘钥 ki,其中每一个轮秘钥 ki 都是48位。

  轮秘钥的初始置换表PC-1如下:
【密码算法 之一】对称加密算法 DES \ 3DES 浅析
  如上表,置换的意思是,将置换前的第57位放在置换后的第0位,将置换前的第49位放在置换后的第1位,将置换前的第41位放在置换后的第2位,其它的依次类推。PC-2的置换原理与PC-1的置换原理是完全一样的。

  PC-2轮秘钥置换如下:
【密码算法 之一】对称加密算法 DES \ 3DES 浅析

  DES加密时轮秘钥生成过程如下图所示:
【密码算法 之一】对称加密算法 DES \ 3DES 浅析

  1. 将得到的56位秘钥分为 C0 和 D0 两部分,每一部分分别28bit;
  2. 长度均为28bit的左右两部分将周期性的向移动1位或者2位(即循环移动),而移动的位数则取决于轮数i,其规则如下:
      (1)在第i= 1, 2, 9, 16轮中,左右两部分均向左移1位;
      (2)在其它轮中,左右两部分均往左移2位;
      (3)循环移位的总数为:4*1 + 12 * 2 = 28,进而得到一个有趣的属性,即C0 = C16 和 D0 = D16,这对解密子秘钥的逆序生成非常有用。

5. 总结

  • DES 与 3DES 属于“分组密码”算法,目前属于“不推荐,慎用”的算法;
  • DES 与 3DES 的分组长度均为64bit(8字节)
  • DES 的秘钥长度为 64bit(8字节),真实的有效秘钥长度为 56bit
  • 3DES 的秘钥长度为 192bit(24字节),真实的有效秘钥长度为 168bit

各种算法的链接地址如下:
【密码算法 之零】对称算法(DES,、3DES、 AES、DM5、HMAC、CMAC、SHAxx、SM3、SM4),非对称算法(RSA、ECC、ECDSA、ECDH、SM2、SM9…)文章来源地址https://www.toymoban.com/news/detail-485177.html

到了这里,关于【密码算法 之一】对称加密算法 DES \ 3DES 浅析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 密码学【第三节:对称密码-DES\AES】

    对称加密     对称加密算法中,数据发送方将明文和密钥一起经过特殊加密算法处理成密文后,将它发送出去。接收方收到密文后,若想解读原文,则需要使用加密用到的相同密钥及相同算法的逆算法对密文进行解密,才能使其恢复成原文。     它的最大优势是加

    2024年02月07日
    浏览(47)
  • Java 中常见的加密算法,DES、3DES、AES、RSA

    加密算法是一种将数据转换为不可读形式的算法,以保护数据的机密性和完整性。加密算法被广泛应用于计算机网络、数据库、电子商务等领域,用于保护敏感数据的安全性,如用户密码、信用卡信息、医疗记录等。在 Java 中,有许多常见的加密算法,本文将对加密算法的基

    2024年02月03日
    浏览(45)
  • Sweet32漏洞,升级openssl或者禁用3DES和DES弱加密算法

    由于等保的原因,被服务商扫描出漏洞。 warnings: | 64-bit block cipher 3DES vulnerable to SWEET32 attack 如何不喜欢使用nmap,也可以使用如下工具testssl.sh,但是输出的内容太多了,本次我只截取部分 解决办法有两个,一个是升级OpenSSL 1.0.2k-fips 26 Jan 2017 以上,另外一个是更新nginx配置,禁

    2024年02月11日
    浏览(31)
  • php常用加密算法大全aes、3des、rsa等

    目录 一、可解密加解密算法 1、aes 加解密算法 2、旧3des加解密方法  3、新3des加解密方法 4、rsa公私钥加解密、签名验签方法 5、自定义加密算法1  6、自定义加密算法2 7、自定义加密算法3 二、不可解密加密算法  1、md5算法  2、crypt算法 3、sha1算法 5、hash 算法 6、 password_ha

    2024年02月09日
    浏览(39)
  • 通俗易懂,十分钟读懂DES,详解DES加密算法原理,DES攻击手段以及3DES原理。Python DES实现源码

    DES(Data Encryption Standard)是一种 对称加密 算法。它是在20世纪70年代初期由IBM研发的。它的设计目标是提供高度的数据安全性和性能,并且能够在各种硬件和软件平台上实现。 DES使用56位的密钥和64位的明文块进行加密。DES算法的分组大小是64位,因此,如果需要加密的明文长

    2024年02月03日
    浏览(63)
  • Python 基于pycryptodome,实现对AES、DES、3DES、RSA等常用加密算法的使用,文末附各种加密的源码示例

    (中文名:加密圆顶)pycryptodome是一个基于c实现的Python库,它在2.x中支持2.7以上版本,或3.x中支持3.5以上版本的Python。 可以使用以下命令安装它: 该库支持以下特性 认证加密模式 Authenticated encryption modes (GCM, CCM, EAX, SIV, OCB) AES加密在英特尔上的加速 Accelerated AES on Intel platf

    2023年04月09日
    浏览(75)
  • PHP 3DES加密

    不多说,直接上代码类 然后自行依据实际情况调用即可 自行了解引用,有测试示例在代码中 1. 2. 3. 4. 5. 6. 7.

    2024年02月13日
    浏览(43)
  • 关于怎么使用python实现 3DES 加密/解密

    3DES (Triple DES) 是一种对称加密算法,其特点是使用三次密钥加密来提高安全性。 3DES的原理是:对明文进行三次加密,每次加密的密钥不同。加密时,首先使用第一个密钥对明文进行加密,然后使用第二个密钥对加密后的数据进行解密,最后再使用第三个密钥对解密后的数据

    2024年02月15日
    浏览(28)
  • 密码学之DES,3DES与Python实现AES

    最近项目中需要用到DES,3DES解密算法,所以了解一下。正好CSDN上有关于DES,3DES的资料。边看边写一下总结。 密码学之DES,3DES详解与Python实现 DES(Data Encryption Standard-数据加密标准)属于对称加密,即使用相同的密钥来完成加密和解密。分组长度为8个字节64bit(密钥每个字节的最

    2024年02月08日
    浏览(26)
  • 浅析加密算法一【凯撒密码】

    在密码学中, 恺撒密码 (英语: Caesar cipher ),或称 恺撒加密、恺撒变换、变换加密 ,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是 3 3

    2023年04月10日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包