对称密码算法Rijndael解析—加密

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介:

   这篇文章是 对我的上一篇博文的延续,之前讲解了 AxCrypt的安装于环境配置,这一章就开始谈谈其内部算法的实现。下面一篇是对其加密部分的讲解。

    Rijndael算法是一种对称的密码算法。它允许可变动的数据区块及金钥的长度。数据块与金钥长度的变动是各自独立的。块长和密钥长度可以分别指定程128192或者256位。其在某些操作是在字节级上定义的。字节表示有限字段GF(2^8)中的元素,一个字节中有8位。其他操作都根据4字节来定义。程序的功能架构如图1-1所示:

                            图1-1 程序功能流程

一、程序的输入数据

Rijndael算法中,外部输入数据有两部分构成,一个是State、一个是Cipher KeyState是运算过程中锁产生的中间值,是一个4xNb的矩阵,Nb由数据长度除以32位求得,其实际的操作结果是把输入数据分割成了Nb个区块。Cipher Key是用来加密的密钥,也是一个4xNk的矩阵,Nk可由密钥长度除以32位求得,与State类似,实际的操作结果是把密钥分割成Nk32位的子密钥。

在操作过程中,数据均用十六进制表示法表示,例如:

32 = 00110010(1 byte)

在程序执行部分,主要分为两大部分:1、加密操作2、密钥编制

二、加密操作

   在这里的加密操作的对象就是上面介绍的State,按照该算法的标准文档可知,加密算法可以简单的描述为先将State进行AddRoundKey操作,而后经过多次的循环转置操作(包括:SubBytes操作、ShiftRows操作、MixColumns操纵、AddRoundKey操作),进行的次数Nr由上面提到的NbNk来共同决定,具体如表2-1所示。

                            表2-1 Nr取值表

Nr

Nb = 4

Nb = 6

Nb = 8

Nk = 4

10

12

14

Nk = 6

12

12

14

Nk = 8

14

14

14

   通过上表我们很容易得知对我我们的128位的操作,所进行的次数为10次。程序的大概执行框架图如图2-1所示。

                                          图2-1 程序执行框架图

程序的执行流程图与程序执行框架图类似,如图2-2所示

                      图2-2 加密部分程序流程图

下面就对该部分中的Transformations算法一一介绍。

1、1-SubBytes算法

1-SubBytes也叫做字节取代转换,是一个以字节为单位的非线性取代运算,取代表(S-Box)是经过两个运算过程而建立的。而且是可逆的。以下所说的运算数据是StateCipher Key通过异或运算获得的。(异或运算可表示为(a^b)=(a’and b) or (a and b’))这里用Data表示,在改运算中是通过DataS-Box中的一个映射进行的,用S-Box对应的坐标中的数值取代Data中的数值,例如在Data中的一个数值是十六进制的19,则在S-BoxX坐标就为1Y坐标就为9。则在S-Box中对应坐标的数值为d4,依次类推,将这个4xNr的矩阵中每个数值都进行映射替换。

22-ShiftRows算法

该操作也即为移位转换操作。在这个转换中Data(其实也就是State)的每一列以不同的偏移量做环状位移,第0列不动,接下来的几列按照Nb的大小进行相应的移位操作,我们现在的Nb=4,所以第1列移位1位,第2列移位2列,第3列移位3位。该移位是循环左移操作。具体的偏移量与区块数目Nb的关系如表2-2所示。

Nb

C1

C2

C3

4

1

2

3

6

1

2

3

8

1

3

4

33-MixColumns算法

该部分算法实则是一个混行转换算法,将Data(也即State)中的每一列单列出来,与一个固定的多项式进行乘法运算。

固定的多项式为:02  03 01  01

0102  03  01

0101  02  03

0201  01  02

在这部分就要涉及到一个多项式问题。假设一个字节bb7b6b5b4b3b2b1b0组成,那么就可以将其表示成为一个多项式形式:b7*x7+b6*x6+b5*x5+b4*x4+b3*x3+b2*x2+b1*x+b0.

多项式的乘法:在乘法里面,多项式相乘之后的结果很容易造成溢位的问题,解决溢位的方式是把相乘的结果,再模余一个不可分解的多项式m(x)。在Rijndael中,定义一个这样子的多项式为

m(x)=x8+x4+x3+x+1或是(11B)16

Data也即State)中的每一列都进行同样胡操作。

44-AddRoundKey算法

该部分主要是把每一个回合的子密钥通过与Data(也即State)位异或操作。可以以列的形式将Data中的数值与子密钥进行异或运算。有关每一个回合的子密钥来说在第三部分将会详细介绍。

一、密钥的编制(Key Schedule)

回合子密钥(Round Key)是从加密密钥(Cipher Key)经过运算产生出来的。密钥编制(Key Schedule)是由密钥扩充(Key Expansion)及回合密钥的选择(RoundKey Selection)组成的,基本的理论如下:

所有回合密钥的总位数是把区块长度(block length)乘上回合数加1(Nr-1个回合,加上一个终止回合(final round)),例如,128个位的区块长度经过10个回合运算,所需要用到的所有回合密钥的总位数为1408个位。

加密密钥(Cipher Key)必须扩充为扩充密钥(Expanded Key)

回合金钥是从扩充金钥中选出来的,选择的方式如下:第一个回合金钥由前Nb个字组组成,第二个回合金钥由接下来的Nb个字组组成,余此类推。

在该部分首先将Cipher Key中的第四列提取出来,将其循环下移一位(可以理解成将这一列数据旋转成为一行,而后对其循环右移一位),而后将该列进行1-SubBytes运算,与S-Box矩阵进行映射置换操作,接着将其结果与第一列以及回合常数进行异或操作。这边生成了第一回合的第一列子密钥,而后第二列与第一回合第一列子密钥进行异或运算后生成第一回合的第二列子密钥,一次类推,第三列与第二回合的第二列子密钥异或运算,得到第一回合的第三列子密钥等。接下来的第二轮回合则是拿第一回合的子密钥进行相同操作的。知道进行Nr次以后。回合常数如表3-1所示。

3-1 回合常数

01

02

04

08

10

20

40

80

1b

36

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

而后接下来的便是sha-1算法了,有关sha-1算法的介绍在我之前的博文http://yiluohuanghun.blog.51cto.com/3407300/950450中有所介绍。





     本文转自 驿落黄昏 51CTO博客,原文链接:http://blog.51cto.com/yiluohuanghun/1211182,如需转载请自行联系原作者


相关文章
|
18天前
|
存储 算法 安全
.NET 平台 SM2 国密算法 License 证书生成深度解析
授权证书文件的后缀通常取决于其编码格式和具体用途。本文档通过一个示例程序展示了如何在 .NET 平台上使用国密 SM2 算法生成和验证许可证(License)文件。该示例不仅详细演示了 SM2 国密算法的实际应用场景,还提供了关于如何高效处理大规模许可证文件生成任务的技术参考。通过对不同并发策略的性能测试,开发者可以更好地理解如何优化许可证生成流程,以满足高并发和大数据量的需求。 希望这段描述更清晰地传达了程序的功能和技术亮点。
89 13
.NET 平台 SM2 国密算法 License 证书生成深度解析
|
14天前
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
1月前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
7天前
|
存储 监控 算法
关于员工上网监控系统中 PHP 关联数组算法的学术解析
在当代企业管理中,员工上网监控系统是维护信息安全和提升工作效率的关键工具。PHP 中的关联数组凭借其灵活的键值对存储方式,在记录员工网络活动、管理访问规则及分析上网行为等方面发挥重要作用。通过关联数组,系统能高效记录每位员工的上网历史,设定网站访问权限,并统计不同类型的网站访问频率,帮助企业洞察员工上网模式,发现潜在问题并采取相应管理措施,从而保障信息安全和提高工作效率。
23 7
|
1月前
|
弹性计算 算法 Linux
使用SM4算法加密LUKS格式磁盘
本文介绍了在Anolis 8操作系统使用cryptsetup对磁盘进行分区、加密和挂载的过程。采用SM4加密算法。具体步骤包括:初始化加密卷、解锁加密分区、格式化并挂载设备。最后,展示了如何取消挂载并关闭加密卷以确保数据安全。整个过程确保了磁盘数据的安全性和隐私保护。
67 2
使用SM4算法加密LUKS格式磁盘
|
1月前
|
监控 算法 安全
内网桌面监控软件深度解析:基于 Python 实现的 K-Means 算法研究
内网桌面监控软件通过实时监测员工操作,保障企业信息安全并提升效率。本文深入探讨K-Means聚类算法在该软件中的应用,解析其原理与实现。K-Means通过迭代更新簇中心,将数据划分为K个簇类,适用于行为分析、异常检测、资源优化及安全威胁识别等场景。文中提供了Python代码示例,展示如何实现K-Means算法,并模拟内网监控数据进行聚类分析。
42 10
|
25天前
|
存储 监控 算法
探秘员工泄密行为防线:基于Go语言的布隆过滤器算法解析
在信息爆炸时代,员工泄密行为对企业构成重大威胁。本文聚焦布隆过滤器(Bloom Filter)这一高效数据结构,结合Go语言实现算法,帮助企业识别和预防泄密风险。通过构建正常操作“指纹库”,实时监测员工操作,快速筛查可疑行为。示例代码展示了如何利用布隆过滤器检测异常操作,并提出优化建议,如调整参数、结合日志分析系统等,全方位筑牢企业信息安全防线,守护核心竞争力。
|
13天前
|
机器学习/深度学习 自然语言处理 算法
生成式 AI 大语言模型(LLMs)核心算法及源码解析:预训练篇
生成式 AI 大语言模型(LLMs)核心算法及源码解析:预训练篇
113 0
|
14天前
|
存储 算法 安全
基于 Go 语言的公司内网管理软件哈希表算法深度解析与研究
在数字化办公中,公司内网管理软件通过哈希表算法保障信息安全与高效管理。哈希表基于键值对存储和查找,如用户登录验证、设备信息管理和文件权限控制等场景,Go语言实现的哈希表能快速验证用户信息,提升管理效率,确保网络稳定运行。
26 0
|
19天前
|
存储 算法 测试技术
【狂热算法篇】探秘图论之 Floyd 算法:解锁最短路径的神秘密码(通俗易懂版)
【狂热算法篇】探秘图论之 Floyd 算法:解锁最短路径的神秘密码(通俗易懂版)

热门文章

最新文章

推荐镜像

更多