对称密码算法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,如需转载请自行联系原作者


相关文章
|
1月前
|
存储 算法 安全
.NET 平台 SM2 国密算法 License 证书生成深度解析
授权证书文件的后缀通常取决于其编码格式和具体用途。本文档通过一个示例程序展示了如何在 .NET 平台上使用国密 SM2 算法生成和验证许可证(License)文件。该示例不仅详细演示了 SM2 国密算法的实际应用场景,还提供了关于如何高效处理大规模许可证文件生成任务的技术参考。通过对不同并发策略的性能测试,开发者可以更好地理解如何优化许可证生成流程,以满足高并发和大数据量的需求。 希望这段描述更清晰地传达了程序的功能和技术亮点。
114 13
.NET 平台 SM2 国密算法 License 证书生成深度解析
|
24天前
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
2天前
|
监控 算法 安全
基于 C# 的内网行为管理软件入侵检测算法解析
当下数字化办公环境中,内网行为管理软件已成为企业维护网络安全、提高办公效率的关键工具。它宛如一位恪尽职守的网络守护者,持续监控内网中的各类活动,以确保数据安全及网络稳定。在其诸多功能实现的背后,先进的数据结构与算法发挥着至关重要的作用。本文将深入探究一种应用于内网行为管理软件的 C# 算法 —— 基于二叉搜索树的入侵检测算法,并借助具体代码例程予以解析。
18 4
|
7天前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
17天前
|
存储 监控 算法
关于员工上网监控系统中 PHP 关联数组算法的学术解析
在当代企业管理中,员工上网监控系统是维护信息安全和提升工作效率的关键工具。PHP 中的关联数组凭借其灵活的键值对存储方式,在记录员工网络活动、管理访问规则及分析上网行为等方面发挥重要作用。通过关联数组,系统能高效记录每位员工的上网历史,设定网站访问权限,并统计不同类型的网站访问频率,帮助企业洞察员工上网模式,发现潜在问题并采取相应管理措施,从而保障信息安全和提高工作效率。
32 7
|
1月前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
158 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
1月前
|
监控 算法 安全
内网桌面监控软件深度解析:基于 Python 实现的 K-Means 算法研究
内网桌面监控软件通过实时监测员工操作,保障企业信息安全并提升效率。本文深入探讨K-Means聚类算法在该软件中的应用,解析其原理与实现。K-Means通过迭代更新簇中心,将数据划分为K个簇类,适用于行为分析、异常检测、资源优化及安全威胁识别等场景。文中提供了Python代码示例,展示如何实现K-Means算法,并模拟内网监控数据进行聚类分析。
47 10
|
1月前
|
存储 监控 算法
探秘员工泄密行为防线:基于Go语言的布隆过滤器算法解析
在信息爆炸时代,员工泄密行为对企业构成重大威胁。本文聚焦布隆过滤器(Bloom Filter)这一高效数据结构,结合Go语言实现算法,帮助企业识别和预防泄密风险。通过构建正常操作“指纹库”,实时监测员工操作,快速筛查可疑行为。示例代码展示了如何利用布隆过滤器检测异常操作,并提出优化建议,如调整参数、结合日志分析系统等,全方位筑牢企业信息安全防线,守护核心竞争力。
|
23天前
|
机器学习/深度学习 自然语言处理 算法
生成式 AI 大语言模型(LLMs)核心算法及源码解析:预训练篇
生成式 AI 大语言模型(LLMs)核心算法及源码解析:预训练篇
139 0
|
24天前
|
存储 算法 安全
基于 Go 语言的公司内网管理软件哈希表算法深度解析与研究
在数字化办公中,公司内网管理软件通过哈希表算法保障信息安全与高效管理。哈希表基于键值对存储和查找,如用户登录验证、设备信息管理和文件权限控制等场景,Go语言实现的哈希表能快速验证用户信息,提升管理效率,确保网络稳定运行。
28 0

推荐镜像

更多