AES加密算法的数学基础

原创 2018年04月14日 22:58:01

AES加密算法的数学基础

目录

1.数学基础

1.1群的概念

有限域有时也称为伽罗瓦域,它指的是拥有有限个元素的集合。大致来讲, 伽罗瓦域是一个由有限个元素组成的集合,在这个集合内可以执行加、减、乘和逆操作。在介绍域的定义前,我们首先需要理解一个更简单的代数结构概念,即群.

群(Group)
群指的是元素集合 G 及 G 内任意两个元素的联合操作。的集合。群具有以下特性:
1. 群操作。是封闭的,即对所有的 a,b,c∈G, a。6 = c∈G 始终成立
2. 群操作是可结合的,即对所有的 a,b,c∈G 都有 a。(b。c)=(a。b)。c
3. 存在一个元素 l∈G, 对所有 a∈G 都满足 a。l =l。a 此元素l称为中性元(或单位元)
4. 对每个 a∈G 都存在一个元素 使得 a-1 ∈G ,使得a·a-1= a-1·a=1, 而a-1就称为 a 的逆元.
5. 在上面的特性的基础上, 如果对所有的 a, b∈G 都有 a。b=b。a 则称此群为阿贝尔群(或交换群)

1.2域的概念

域(field)
域F是拥有以下特性的元素的集合。
F中的所有元素形成一个加法群,对应的群操作为“+” , 中性元为 0。
F中除 0 外的所有元素构成了一个乘法群,对应的群操作为“x”,中性元为 1。
当混合使用这两种群操作时,分配定理始终成立,即对所有的 a,b,c∈F,
都有 a(b+c)=(ab)+(ac)

假设p 是一个素数,整数环Zp 表示为GF(p), 也称为是拥有素数个元素的素数域或伽罗瓦域。GF(p) 中所有的非零元素都存在逆元, GF(p)内的算术运算都是模p 实现的。

2.AES算法

2.1 概述

高级加密标准(AES)是目前使用最为广泛的一种对称密码。尽管 AES 名称中的术语“标准”仅仅是对美国政府应用而言, 但有些商业系统也强制使用 AES 分组密码。此外, AES还可用于多种商业系统。除了 AES 外,商业标准还包括 Internet 安全标准 IPsec、 TLS、Wi-Fi 加密标准 IEEE 802.1.lli安全外壳网络协议 SSH(安全外壳)、 Internet 手机 Skype 和世界上的各种安全产品。到目前为止,己知的针对 AES 最有效的攻击就是蛮力攻击

2.2 AES加密算法

AES加密的流程如下:

//以AES128为例,in表示输入128位分组,C伪代码

status = Transposition(in); //输入转置变换
AddRoundKey(&status,roundkey[0]);
for(round = 1;round <Nr -1;round++)
{
  SubBytes(&status);//字节替换变换
  ShiftRows(&status);//行移位变换
  MixColumns(&status);//列混淆变换
  AddRoundKey(&status,roundkey[round]);//轮秘钥加变换
}//for循环里面只执行了9次循环体

SubBytes(&status);//字节替换变换
ShiftRows(&status);//行移位变换
AddRoundKey(&status,roundkey[round]);//轮秘钥加变换
out = Transposition(status); //输出转置变换

1

单轮AES流程图
2

2.3 实例加密流程

以第一轮加密为例
Input,0x格式明文:
62696E62
696E7A68
616E677A
78637662
tInput,0x格式明文转置后:
62696178
696E6E63
6E7A6776
62687A62
跟踪加密过程state[0]:
62696178
696E6E63
6E7A6776
62687A62
加No0轮密钥后state[1]
535C554A
515C5950
56495642
57504B57
1轮正向查表后state[2]:
ED4AFCD6
D14ACB53
B13BB12C
5B53B35B
1轮正向移位后state[3]:
ED4AFCD6
4ACB53D1
B12CB13B
5B5B53B3
1轮正向混淆后state[4]:
F5A5F457
EAE8C191
333423BF
618F5BF6
1轮正向加钥No1后state[5]:
06630697
CAFAE487
9DA98F27
77A144DC

2.4 AES中的列混淆变换

在讨论AES中的列混淆变换 MixColumns(&status)之前,我们先回过头去看一下域的概念。一般在AES中用到的是GF(2^8)有限域内乘法。什么是有限域呢?有限域通俗的讲就是函数的运算结果全都包含在一个域中,不同于实数域,有限域有一个最大值,所有超过这个最大值的数都会经过一定的方法使他回到这个域中,在密码学中应用很广泛,2^8意味着这个域的最大值是256.

字节乘法 *操作定义:
x*(a+b)=x*a xor a*b
x*0=0
x*1=x
对于x*2

if x左移1位时溢出“1”比特 x*2=x<<1 xor 0x1B
else x*2 = x<<1


举例:
01010111*2 = 10101110
01010111*4 = 10101110*2 = 01011100 xor 0x1B(00011011) = 01000111


代码实现:unsigned char XTIME(unsigned char x);unsigned char multiply(unsigned char a, unsigned char b);

unsigned char XTIME(unsigned char x) {  
    return ((x << 1) ^ ((x & 0x80) ? 0x1b : 0x00));  
}  

XTIME函数的含义是求一个数x与0x02的乘积,一般求一个数的2倍,都是作移一位,在有限域内,要计算有限域的乘法,必须先确定一个GF上的8次不可约多项式,Rijndael密码中,这个多项式确定为x^8+x^4+x^3+x+1,如果最高位是1的话,左移一位的同时要异或0x1B(00011011),是因为最高位是1的话,再继续左移会超出域的最大值,这个时候需要取除以同余式,也就是异或0x1B 00011011。

unsigned char multiply(unsigned char a, unsigned char b) {  
    unsigned char temp[8] = { a };  
    unsigned char tempmultiply = 0x00;  
    int i = 0;  
    for (i = 1; i < 8; i++) {  
        temp[i] = XTIME(temp[i - 1]);  
    }  
    tempmultiply = (b & 0x01) * a;  
    for (i = 1; i <= 7; i++) {  
        tempmultiply ^= (((b >> i) & 0x01) * temp[i]);  
    }  
    return tempmultiply;  
}

2.5代码实例

#include <iostream>
using namespace std;

unsigned char XTIME(unsigned char x) {  
    return ((x << 1) ^ ((x & 0x80) ? 0x1b : 0x00));  
}  
unsigned char multiply(unsigned char a, unsigned char b) {  
    unsigned char temp[8] = { a };  
    unsigned char tempmultiply = 0x00;  
    int i = 0;  
    for (i = 1; i < 8; i++) {  
        temp[i] = XTIME(temp[i - 1]);  
    }  
    tempmultiply = (b & 0x01) * a;  
    for (i = 1; i <= 7; i++) {  
        tempmultiply ^= (((b >> i) & 0x01) * temp[i]);  
    }  
    return tempmultiply;  
}  

int main()
{
   printf("%x\n",multiply(0x3,0x6E));
   cout << "Hello World";
   return 0;
}
//output:
cd
Hello World

手工分析:
0x5 =  0000 0101
0x6E = 0110 1110

(0000 0101)·(0110 1110)=(0000 0010 + 0000 0001)·(0110 1110)
=(0000 0100) ·(0110 1110) xor (0000 0001)·(0110 1110)
=(01101110<<1)*2 xor 0110 1110
=11011100*2 xor 0110 1110
=11011100<<1 xor 0x1B(0x00011011) xor 0110 1110
=10111000 xor 0x00011011 xor 0110 1110
=1100 1101
=0xCD
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Erice_s/article/details/79945385

高级加密标准 AES (含AES的数学基础,算法实现,是目前世界上介绍AES最详细的书了)

  • 2008年09月07日 01:11
  • 4.96MB
  • 下载

AES加密算法-简单适用

  • 2010年03月18日 12:35
  • 429KB
  • 下载

加密与认证技术的数学基础 pdf

  • 2017年11月15日 10:16
  • 47.85MB
  • 下载

密码算法详解——AES(高级加密算法)

0 AES简介   美国国家标准技术研究所在2001年发布了高级加密标准(AES)。AES是一个对称分组密码算法,旨在取代DES成为广泛使用的标准。   根据使用的密码长度,AES最常见的...
  • Aeroleo
  • Aeroleo
  • 2015-11-09 15:13:25
  • 14892

aes加密算法的理解

高级加密标准(英语:Advanced Encryption Standard,缩写:AES) AES共有ECB、CBC、CFB、OFB、CTR五种模式 1、AES是基于数据块的加密方式,也就是说,每...
  • haohaojian
  • haohaojian
  • 2017-02-15 14:20:40
  • 2774

AES加密算法

  • 2011年11月05日 16:22
  • 301KB
  • 下载

AES加密算法动画演示

http://coolshell.cn/wp-content/uploads/2010/10/rijndael_ingles2004.swf
  • mendeliangyang
  • mendeliangyang
  • 2015-11-28 10:51:12
  • 536

图解AES加密算法

要搞定AES算法,基本变换包括Sub_Bytes(字节替代)、ShiftRows(行移位)、MixColumns(列混淆)、AddRoundKey(轮密钥加) 第一个难理解的地方:key_e...
  • sinat_23338865
  • sinat_23338865
  • 2017-03-23 14:34:42
  • 722

STM32 加密算法 源码代码(包括AES的5种模式)

  • 2014年09月15日 15:00
  • 6.7MB
  • 下载

AES加密算法的详细介绍与实现

AES简介高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具...
  • qq_28205153
  • qq_28205153
  • 2017-02-19 08:53:54
  • 62883
收藏助手
不良信息举报
您举报文章:AES加密算法的数学基础
举报原因:
原因补充:

(最多只允许输入30个字)