AES的数学基础

摘要:
1.有限域GF1.AES中的许多运算是按byte定义,一个byte=8个bit,还有是按字,一个4个字节的字=32bit2.将字节看成有限域的一个元素,一个4个字节的字看程GF中并且次数小于4的多项式3.有限域的元素在本算法中采用传统的多项式表达式,GF中的所有元素的系数为GF中,且次数小于8的多项式4.将b7b6b5b4b3b2b1b0构成的一个字节看成多项式b7x七次方+b6x六次方+。。。

1.有限域GF(2的8次方)

1.AES中的许多运算是按byte定义,一个byte=8个bit,还有是按字,一个4个字节的字=32bit

2.将字节看成有限域的一个元素,一个4个字节的字看程GF(28)中并且次数小于4的多项式

3.有限域的元素在本算法中采用传统的多项式表达式,GF(28)中的所有元素的系数为GF(2)中,且次数小于8的多项式

4.将 b7b6b5b4b3b2b1b0构成的一个字节看成多项式

b7x七次方+b6x六次方+。。。+b1x+b0,其中bi∈GF(2),0≤i≤7

5.例如:十六进制数'57'对应的二进制数为01010111,看成一个字节,对应的多项式为x6+x4+x2+x+1。采用的运算又加法,乘法和X乘运算

加法运算:

有限域GF(28)中的两个元素相加,结果是一个次数不超过7的多项式,其系数等于两个元素对应系数的模2加(比特异或)

有限域GF(28)中的两个元素加法与两个字节的按位模2加是一致的。

例如: 十六进制数表示:'57'+'83'='D4' 多项式表示为:(x6+x4+x2+x+1)=(x7+x+1)=x7+x6+x4+x2 二进制数表示为:01010111+10000011=11010100

乘法运算:

要计算有限域GF(28)上的乘法,必须先确定GF(2)上的八次不可约多项式

GF(28)上两个元素的乘积就是这两个多项式模乘(以此8此不可约多项式为模)。如果一个多项式除了1和自身没有其它因子,则就是不可约的。

对于AES,这个八次不可约多项式确定为m(x)=x8+x4+x3+x+1,十六进制表示为011b,二进制表示为0000000100011011

例如, 十六进制数表示'57'⊗'83' = 'C1' , 多项式表示 (x6+x4+x2+x+1)(x7+x+1) =x13+x11+x9+x8+x7+x7+x5+x3+x2+x+x6+x4+x2+x+1 =x13+x11+x9+x8+x6+x5+x4+x3+1 (x13+x11+x9+x8+x6+x5+x4+x3+1)modm(x) =x7+x6+1

对于任何系数在二元域GF(2)中并且次数小于8的多项式b(x),可用推广的欧几里得算法得出    b(x)*a(x)+m(x)*c(x) = 1

即 a(x)b(x) = 1 mod m(x)

X乘运算:

(b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0)⨂x=b7x8+b6x7+b5x6+b4x5+b3x4+b2x3+b1x2+b0x 将上面的结果模m(x)求余得到x∙b(x)。

1.如果b7=0,则结果就是xb(x)

2.如果b7=1,则乘积结果先减去m(x),结果也为xb(x)

用x乘以一个多项式简称x乘

x(十六进制数表示为02)乘可以用字节内左移一位和紧接着一个1b的按位模2加来实现,该运算几位xtime运算。

2.系数在GF(28)上的多项式

多项式的系数可以定义为GF(28)中的元素,通过这个方法,四个字节构成的字可以表示为系数在GF(28)上的次数小于4的多项式,多项式的加法就是对应系数相加。GF(28)中的加法为按模2加,因此两个字节的加法就是按模2加。

乘法比较复杂,规定多项式的乘法运算必须要取模M(x)=x4+1,这样使得次数小于4的多项式的乘积仍然是一个次数小于4的多项式,将多项式的模乘运算计为⨂

例如:

设a(x)=a3x3+a2x2+a1x+a0和b(x)=b3x3+b2x2+b1x+b0为GF(28)上的两个多项式,

有 c(x)=a(x)⨂b(x)=c3x3+c2x2+c1x+c0 则 c0=a0∙b0⨁a3∙b1⨁a2∙b2⨁a1∙b3       c1=a1∙b0⨁a0∙b1⨁a3∙b2⨁a2∙b3

c2=a2∙b0⨁a1∙b1⨁a0∙b2⨁a3∙b3

c3=a3∙b0⨁a2∙b1⨁a1∙b2⨁a0∙b3

AES的数学基础第1张

M(x)不是GF(28)中的不可约多项式

AES的数学基础第2张

AES的数学基础第3张

AES的数学基础第4张

免责声明:文章转载自《AES的数学基础》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇精讲RestTemplate第9篇-如何通过HTTP Basic Auth认证skynet源码分析之sproto使用方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

一梦江湖费六年——QQ群聊天分析

本文结构: 一、那些年我们加过的QQ群 二、数据读入和整理(一)——来自蓝翔的挖掘机 二、数据读入和整理(二)——你不知道的事 三、聊天宏观(1)——寤寐思服 三、聊天宏观(2)日月篇 三、聊天宏观(3)七曜篇 四、聊天微观(1)——黄金档和午夜频道 四、聊天微观(2)——充电两小时聊天五分钟 四、聊天微观(3)——幸存者偏...

JAVA实现二进制,十六进制输出

public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(Integer.toBinaryString(320*1024)); System....

React中的AES加解密请求

引言   在我们使用React开发Web前端的时候,如果是比较大的项目和正常的项目的话,我们必然会用到加解密,之前的文章中提到.NET的一些加解密,那么,这里我就模拟一个例子:   1.后台开发API接口,但API接口需要加密请求,或者需要解密输出参数   2.前端使用React开发web调用API接口 让我们开始吧   那么针对于上述问题,我们可以使用"...

R语言-文本挖掘

---恢复内容开始--- 案例1:对主席的新年致辞进行分词,绘制出词云 掌握jieba分词的用法 1.加载包 library(devtools) library(tm) library(jiebaR) library(jiebaRD) library(tmcn) library(NLP)library(wordcloud2) 2.导入数据 new...

C语言二进制(基础篇十二)

......   位(bit)     在计算机内部,开关导通时,表示1;断开表示0。这样,电压不稳时计算机还能照样工作。     一个通断开关叫做一个“位”。   字节(byte)     计算机内部经常把8个位作为一组,用来表示许多我们平时生活中用到的东西。如:       00000000表示事物为假,11111111表示为真(非0即为真)     ...

开源加密解密库比较

第一个:OpenSSLC语言实现,整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。   作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的...