AES分组对称加密算法学习笔记

      • State说明
      • S盒变换SubBytes
      • 行变换ShiftRows
      • 列变换MixColumns
      • 与扩展密钥的异或运算AddRoundKey
      • 密钥扩展程序Key Expansion
      • 参考文献

我们首先对AES分组对称加密算法有一个宏观的了解,它的模式主要为

以下是AES主要加密过程的伪代码。

Cipher(byte in[4*4] , byte out[4*4] , word w[4*(Nr+1)])
begin
byte state[4,4]
state=in
AddRoundKey(state,w)   //See Sec.3 .1 .4
for round=1 step 1 to Nr-1
  SubBytes(state)   //See Sec.3 .1 .1
  ShiftRows(state)  //See Sec.3 .1 .2
  MixColumns(state)  //See Sec.3 .1 .3
  AddRoundKey(state ,w +round *4)
end for
SubBytes(stat e)
ShiftRows(state)
AddRoundKey(state ,w +Nr *4)
out=state
end

State说明

state是一个4*4的数组,如果输入是ABCDEFGHIJKLMNOP,那么state将是:

A E I M
B F J N
C G K O
D H L P

S盒变换SubBytes()

注:S盒是一个16*16的矩阵,这是一个事先设计好的矩阵,S盒的设计很大程度影响了该加密的安全性。

S盒变换的具体流程是:

(1)对于一个输入A,可以看做是一个8位二进制数。

比如A=11010100 这时转换为16进制即c4,分解为两部分x=c ,y=4

(2)从S盒中找出S[ x , y]的值

比如:S[ x , y] =S[ c , 4] ={1c}=00011101

即完成了变换

行变换ShiftRows()

在行变换中, 中间状态矩阵State 的第一行不变;第二至第四行做如下变换, 即将表3 的状态矩阵变为表4的状态矩阵。其中State是一个4*4的矩阵

列变换MixColumns()

列变换是对中间状态矩阵State 逐列进行变换。其变换为如下的矩阵运算

这里每运算一次,得到的是一列的结果,因此一共要运算4次,得到4列的结果。

这里得到的新列是:

S(0, c)′= ({02}×S(0, c))⊕({03}×S(1 , c))⊕S(2 , c)⊕S(3, c)

S(1, c)′=S(0 , c)⊕({02}×S(1, c))⊕({03}×S(2 , c))⊕S(3 , c)

S(2, c)′=S(0 , c) ⊕S(1, c)⊕({02}×S(2 , c))⊕({03}×S(3 , c)

S(3, c)′=({03}×S(0 , c))⊕S(1, c)⊕S(2 , c)⊕({02}×S(3 , c))

其中⊕是异或运算,而×是按模乘同余规则计算。

所模乘同余规则就是,对于一个8位二进制数{b7b6b5b4b3b2b1b0}可以视为b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0

若两个数相乘,比如{57}×{83} 即{?00111001?}×{?01010011?}=

(x6+x4+x2+x+1)×(x7+x+1)=x13+x11+x9+x8+x6+x5+x4+x3+1

但是很显然,乘完后结果的位数超过了8,这里为了恢复为8位长,将该结果模一个八次不可约多项式,在AES 中这个八次不可约多项式为m(x)=x8+x4+x3+x+1 则:

(x13+x11+x9+x8+x6+x5+x4+x3+1)mod(x8+x4+x3+x+1)=x7+x6+1

得到结果为{11000001}={c1}

也就是{57}×{83}={c1}

与扩展密钥的异或运算AddRoundKey()

扩展密钥只参与了这一个变换。根据加密的轮数用相应的扩展密钥的四个数据项和中间状态矩阵上的列进行按位异或。

[ S(0 , c)′,S(1 , c)′, S(2, c)′, S(3 , c)′] =[ S(0 , c), S(1 , c), S(2 , c),S(3 , c)] XOR[W(round ×nb +c)]

密钥扩展程序Key Expansion

AES 算法利用外部输入密钥K(密钥串的字数为

Nk), 通过密钥扩展程序得到共4 (Nr + 1)字的扩展密

钥w[ 4 ×(Nr +1)] 。涉及如下三个模块:

(1)位置变换RotWord()。把一个四个字节的序列

[ a0 , a1 , a2 , a3] 左移一个字节变为[ a1 , a2 , a3 , a0] 。

(2)SubWord()。对一个四字节的输入字[ a0 , a1 ,

a2 , a3] 的每一个字节进行S 盒变换, 然后作为输出(见

3.1.1)。

(3)变换Rcon[ ] 。Rcon[ i] 表示32 比特字符串

[ xi-1 , 00 , 00 , 00] 。这里x =(02), xi-1 是x =(02)的(i-1)

次幂的十六进制表示。例如, Rcon[ 1] =[ 01000000] , Rcon[ 2] =

[ 02000000 ] , Rcon [ 3] = [ 04000000] , Rcon [ 4 ] = [ 08000000 ] , … ,

Rcon[ 10] =[ 36000000] 。

(4)扩展密钥的生成。扩展密钥的前Nk 个字就是

外部密钥K ;以后的字w[ [ i] ] 等于它前一个字w[ [ i-1] ]

与前第Nk 个字w[ [ i-Nk] ] 的异或, 即w[ [ i] ] =w[ [ i-1] ]

XOR w[ [ i-Nk] ] 。但是若i 为Nk 的倍数, 则w[ i] =w[ i

-Nk] XOR SubWord(RotWord(w[ [ i-1] ] ))XOR Rcon[ i/

Nk] 。

举例:

①设外部输入的加密密钥CipherKey = 2b 7e 15 16

28 ae d2 a6 ab f7 15 88 09 cf 4f 3c

Nk =4 , 则w0=2b7e1516 w1 =28aed2a6 w2 =abf71588 w3=09cf4f3c;

w4 =w0 XOR SubWord(RotWord(w3))XOR Rcon[ 4/ Nk] =a0fafe17 ;

w5 =w[ [ i-1] ] XORw[ [ i-Nk] =w[ [ 4] ] XOR w[ [ 1] ] =88542cb1 ;…

w43 = b6630ca6 。

参考文献:

何明星, 林昊. AES算法原理及其实现[J]. 计算机应用研究, 2002, 19(12):61-63. DOI:10.3969/j.issn.1001-3695.2002.12.018.

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-09 00:56:07

AES分组对称加密算法学习笔记的相关文章

分组统计查询(学习笔记)

查询出公司每个月支出的工资总和 --查询出公司每个月支出的工资总和 SELECT SUM(sal) FROM emp; 查询出公司的最高工资,最低工资和平均工资 --查询出公司的最高工资,最低工资和平均工资 SELECT MAX(sal),MIN(sal),ROUND(AVG(sal),2) FROM emp; 统计出公司最早雇佣和最晚雇佣的雇佣日期 --统计出公司最早雇佣和最晚雇佣的雇佣日期 SELECT MIN(hiredate) 最早雇佣日期 , MAX(hiredate) 最晚雇佣日期

Crypto++入门学习笔记(DES、AES、RSA、SHA-256)

最先附上 下载地址 背景(只是个人感想,技术上不对后面的内容构成知识性障碍,可以skip): 最近,基于某些原因和需要,笔者需要去了解一下Crypto++库,然后对一些数据进行一些加密解密的操作. 笔者之前没接触过任何加密解密方面的知识(当然,把每个字符的ASCII值加1之流对明文进行加密的“趣事”还是干过的,当时还很乐在其中.),甚至一开始连Crypto++的名字都没有听过,被BS了之后,就开始了Crypto++的入门探索过程. 最初,大概知道了要了解两大类算法中的几个算法——对称加密算法:D

Java加密技术(二)对称加密算法DES&AES

接下来我们介绍对称加密算法,最常用的莫过于DES数据加密算法. DES  DES-Data Encryption Standard,即数据加密算法.是IBM公司于1975年研究成功并公开发表的.DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密. DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位. 通过jav

Java 加密解密之对称加密算法AES

Java 加密解密之对称加密算法AES 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用.经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准.2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一.该算法

对称加密算法DES、3DES和AES 原理总结(转载)

1.对称加密算法 1.1 定义 对称加密算法是应用较早的加密算法,技术成熟.在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yue)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去.收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文.在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥. 1.2 优缺点 优点:算法公开.计算量小.加密速度快.加

常用加密算法的Java实现总结(二) ——对称加密算法DES、3DES和AES

常用加密算法的Java实现总结(二) ——对称加密算法DES.3DES和AES 日期:2014/7/6 文:阿蜜果 1.对称加密算法 1.1 定义 对称加密算法是应用较早的加密算法,技术成熟.在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yue)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去.收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文.在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥

java-信息安全(二)-对称加密算法DES,3DES,AES,Blowfish,RC2,RC4

概述 信息安全基本概念: DES(Data Encryption Standard,数据加密标准) 3DES(Triple DES,三重数据加密算法(TDEA,Triple Data Encryption Algorithm)) AES(Advanced Encryption Standard,高级加密标准) Blowfish RC2 RC4 DES DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定

Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA

[前言] 本文简单的介绍了加密技术相关概念,最后总结了java中现有的加密技术以及用法和样例 [最简单的加密] 1.简单的概念 明文:加密前的信息 密文:机密后的信息 算法:加密或解密的算法 密钥:算法使用的钥匙(读作miyao.正确应该是miyue,可是大家都读miyao) 2.简单的样例 将123456每位数字都加1后得到234567, 当中123456就是明文.234567就是密文.加密密钥就是1,加密算法是每位加 3.对称加密和非对称加密 以上为例. 123456-->234567的加密

对称加密算法:DES加密和DESede加密和AES和PBE

对称加密算法是说加密方和解密方使用相同的密钥.常见的对称加密算法包括4个,DES,DESede(3DES),AES,PBE. 本文讨论的内容是加密算法,不是Message Digest,不是编码.下面区分一下这三个概念. 加密算法是一对一映射,明文密文一一对应.加密是不明确的,是隐晦的. 信息摘要是一个密文对应多个明文,它只是明文整体的一个指纹,一个反映,一个摘要. 编码是一对一映射,是明确的,是显然易见的,比如base64编码. DES(Data Encryption Standard)名叫数