山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第二周)

2021SC@SDUSC

这周主要是对AES算法进行理论上的了解与分析。

一、AES简介

高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法。对称加密算法也就是加密和解密使用相同的密钥。

首先介绍密码学的一些术语概念:

明文:没有经过加密的数据。

密钥:用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥,然后再通过网络传输给对方,或者直接面对面商量密钥。密钥是绝对不可以泄漏的,否则会被攻击者还原密文,窃取机密数据。

密文:经加密函数处理后的数据

AES加密函数
设AES加密函数为E,则 C = E(K, P),其中P为明文,K为密钥,C为密文。也就是说,把明文P和密钥K作为加密函数的参数输入,则加密函数E会输出密文C。

AES解密函数
设AES解密函数为D,则 P = D(K, C),其中C为密文,K为密钥,P为明文。也就是说,把密文C和密钥K作为解密函数的参数输入,则解密函数会输出明文P。

简单来说只要知道算法和密钥就能进行明密文转换。

二、AES加密算法分析

2.1 简要概括

AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。根据密钥的长度不同,推荐加密轮数也不同,这里主要分析的是AES-128,也就是密钥的长度为128位,加密轮数为10轮。

 
上面说到,AES的加密公式为C = E(K,P),在加密函数E中,会执行一个轮函数,并且执行10次这个轮函数,这个轮函数的前9次执行的操作是一样的,只有第10次有所不同。也就是说,一个明文分组会被加密10轮。AES的核心就是实现一轮中的所有操作。下图是AES执行的全部流程,下面会继续简要分析。

山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第二周)

 2.2 具体分析

2.2.1 密钥(128位)扩充

128位密钥用字节为单位的矩阵表示,矩阵的每一列被称为1个32位比特字。通过密钥编排函数该密钥矩阵被扩展成一个44个字组成的序列W[0],W[1], … ,W[43],该序列的前4个元素W[0],W[1],W[2],W[3]是原始密钥,后面40个字分为10组,每组4个字(128比特)分别用于10轮加密运算中的轮密钥加。

简而言之,需要将密钥扩充,得到40个新列,分组得到10个轮密钥。

当W[I]中的i为4的倍数时,取经过T函数变换的w[i-1]和w[i-4]进行异或操作得到新的w[i]

山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第二周)

当i不是4的倍数时,只需将w[i-1]和w[i-4]进行异或得到新的w[i]

山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第二周)

重复上述操作就能得到新扩展的40列,也就是10组轮密钥

山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第二周)

2.2.2 字节代换 

山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第二周)

山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第二周) 

S盒将明文中的分组进行逐一替换,如图中a1经过S盒变为b1

具体如下:假设如下图明文中第一个字节“19”,对比S盒,找到第“1”行,第“9”列对应的进行替换即可。

山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第二周)

替换全部明文后,就完成了字节代换,如下图:

山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第二周)

2.2.3 行位移

山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第二周)

简而言之就是简单的左位移,第n行就左位移n个字节,最终结果如下图:

山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第二周)

第0行无需位移:d4 e0 b8 1e

第1行左位移1位:bf b4 41 27  其中27因为左移顺移到最右边

接下来的两行以此类推 

2.2.4 列混合

山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第二周)

简而言之就是矩阵相乘,将每一列乘以固定矩阵得到新列放置对应位置即可。

简单回顾矩阵乘法:

山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第二周)

 1×7+2×9+3×11=58

因此列混合后的最终结果如下图:

山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第二周)

行位移与列混合为该密码系统提供了扩展性。

2.2.5 轮密钥加 

将2.2.1得到的轮密钥与经过字节代换、行位移和列混合得到的明文分组矩阵进行逐列异或操作,并将得到的结果进行对应位置的替换。

山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第二周)

因为是第一轮子循环,这里的round key是2.2.1密钥扩展图中得到的round key 1

山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第二周)

此时第一轮子循环已经完成,接着继续重复循环即可。

山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第二周)

从上图中可以发现最后一轮子循环没有“列混合” ,最终10轮结束得到密文。以上就是AES-128加密算法的具体分析。

参考博客:AES加密算法的详细介绍与实现_TimeShatter的博客-CSDN博客_aes加密

参考视频:5分钟搞定AES算法_哔哩哔哩_bilibili

 

 

 

 

 

 

文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览33845 人正在系统学习中

来源:qq_47801057

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年9月15日
下一篇 2021年9月15日

相关推荐