《密码学系列》—— 分组密码

网友投稿 245 2022-10-18


《密码学系列》—— 分组密码

我无论做什么,始终在想着,只要我的精力允许我的话,我就要首先为我的祖国服务。——《巴甫洛夫选集》

本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues。x0 , x1 , …, xi , …,将其划分成长为 n 的组 x = ( x0 , x1 , …, xn - 1 ),各一个长度为 n 的分组都分别在密钥 k = ( k0 , k1 , …, kt - 1 ) 控制下,变换成长度为m的等长的输出数字序列 y = ( y0 , y1 , …, ym - 1 ),其加密函数 E: Vn× K→ Vm,Vn和Vm分别是 n 维和 m 维矢量空间,K为密钥空间。

在图中可以看到,输入一个长度为n的明文分组,经过加密器后输出一个长度为m的密文,但是在一般情况下,我们取m=n,如果遇到n>m,则说明在数据加密中存在数据压缩,若n

下面来看看几种简单的设计分组密码常用的方法。

代换:

如果明文和密文的分组长度都为 n 比特, 则明文的每一个分组都有2的n次方个可能的取值。

为保证加密后得到的密文可以通过解密运算还原成为明文消息,明文的每一个分组都应产生惟一的一个密文分组,我们把这样的变换称为可逆的, 称明文分组到密文分组的可逆变换为代换。

我们以n=4为例,来看看分组密码到底数怎样加密的?

对于分组长度为4的代换结构,我们可以依据代换表给出代换以后的密文。

但是,这种代换结构在实际应用中还有一些问题需要考虑。

如果分组长度太小,如 n = 4,系统则等价于古典的代换密码,容易通过对明文的统计分析而被攻破。

这个弱点不是代换结构固有的,只是因为分组长度太小。如果分组长度n足够大,而且从明文到密文可有任意可逆的代换,明文的统计特性就不会太过明显,这样以来,利用代换结构就不容易被攻破。

feistel结构:

Feistel,基本上使每一个刚接触密码学的小伙伴们最头疼的部分了,别怕别怕,今天龙叔跟你细说Feistel结构。

其实对于很多分组密码来说,它们的结构从本质上说都是基于一个称为 Feistel 网络的结构。Feistel 提出利用乘积密码可获得简单的代换密码,目的是为了使最后结果的密码强度高于每个基本密码系统产生的结果。

乘积密码:依次使⽤两个或两个以上基本密码。

下来我们看看真正的feistel结构。

上图为整个feistel的n轮结构,但其实每一轮都是进行同样的操作,接下来我们就分析在一轮中到底都做了些什么?

Feistel加密1轮的迭代过程

​ - 明⽂2w⽐特,被分为等⻓的两部分

​ - 第i轮⼦密钥由初始密钥K推导出的

​ - ⼀般来说,每轮⼦密钥与K不同,也互不相同

​ - F称为轮函数(每轮都⼀样)

在每一轮中,都要进行左右的一次运算,并将运算结果传递给下一轮。

再来看看我们的feistel解密过程。

Feistel解密1轮迭代过程

​ - 被解密的数据左右交换

​ - 解密过程按照与加密过程相反顺序使⽤密钥

解密同加密一样,也需要进行左右消息分组的运算,并且要将运算结果传递给下一轮。

通过feistel结构的加密和解密,我们可以发现在明文消息在经过加密以后的密文,可以通过解密算法将其还原为原始的明文,也就是说该加密算法是可逆的。

分组密码的应用非常广泛,它易于构造伪随机数生成器、流密码、消息认证码(MAC)和杂凑函数等,还可进而成为消息认证技术、数据完整性机制、实体认证协议以及单钥数字签字体制的核心组成部分。

实际应用中对于分组密码可能提出多方面的要求,除了安全性外,还有运行速度、存储量(程序的长度、数据分组长度、高速缓存大小)、实现平台 (硬件、软件、芯片)、运行模式等限制条件。 这些都需要与安全性要求之间进行适当的折中选择。

今天就先和大家说到这里,下一期呢,本应按照计划讲讲DES算法,但是DES算法在之前我们就已经说过啦,还有不明白的小伙伴可以翻回去再看看,链接给大家,请尽情暴击! 聊聊密码学中的DES算法

历史文章:

**求点赞


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用BGP EVPN方式部署分布式网关VXLAN
下一篇:Java持久层框架Mybatis入门详细教程
相关文章

 发表评论

暂时没有评论,来抢沙发吧~