ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AES密码的基本介绍

2020-06-26 13:39:57  阅读:1120  来源: 互联网

标签:AES Nk 字节 变换 多项式 介绍 密码 密钥


因为刚开始接触到密码学,可能对AES的认识还不够深刻,在这里详细的把知识点罗列出来,希望对你们有所帮助。里面要是有什么错误请指出,一起进步gogogo。

AES的产生

1997年一直使用的DES密码被穷举法破译,1999年“DES破译者”仅仅使用22小时15分钟就找到其密钥,这意味着DES已经不足以保证敏感数据的安全,我们需要密钥长度更长,设计更精良的算法来替代DES.。1997年美国NIST发起征集AES候选算法的通知,从此AES走上了历史的舞台。
AES的特点

  • 分组密码,明文和密文的长度128bit,密钥长度可变(128bit,192bit,256bit等,现采用128bit)
  • 面向二进制的密码算法,能够加解密任何形式的计算机数据
  • 不是对合运算,加解密使用不同的算法,巧妙的是其结构相似,可以即保证其安全性又可方便操作。
  • 综合运用多种密码技术,置换,代替,代数
  • 整体结构:SP结构(S为非线性部件,是安全性的最重要部分), 基本轮函数迭代,迭代轮数可变(≥10)

AES的数学基础

有限域GF(2^8)
AES中许多运算是按字节定义的,一个字节为8位,有些是按字定义的,一个字为4个字节即32bit(这里要牢记,在以前接触的单片机,C之类的一个字等于2个字节,注意区分)。将一个字节看成有限域GF(2^8)中的一个元素或者可以理解为一个字节全体256种元素取值构成有限域。这样子一个4字节的字就可以看成系数在有限域中且次数小于4的多项式

  • GF(2^8)中的元素有多种表示:
    在这里插入图片描述

  • GF(2^8)的特征是2,即1+1=0

  • GF(2^8)的全体元素构成加法交换群,线性空间

  • GF(2^8)的非零元素构成乘法循环群 255个元素

  • 有一个生成元,其他元素均表示成生成元的幂次

  • 基本运算
    加法,表示成多项式的形式,然后进行相加,这里要注意两个多项式的公共次幂消失(1+1=0),单独存在的部分写下来
    乘法,首先确定8次不可约多项式,AES的8次不可约多项式确定为m(t),两个多项式进行乘积,乘积结果对m(t)进行取余运算即为最终结果
    在这里插入图片描述

  • 乘法运算单位元 ,字节01,多项式1
    X乘运算

  • 直接多项式与x相乘,最高位可能变成x^8
    因此分两种情况,一种是a7=0,这样子最高位为x^7,
    当a7≠0时候,用所得结果减去m(t),即为我们所求

  • AES的字表示与运算

  • 数据处理的单位是字与字节
    一个字=4字节=32比特
    一个字可表示为系数取自GF(2^8)上次数低于4次的多项式

  • 字相加:两个多项式系数按位模2加

  • 字乘法:设A and c 是两个字,a(x)和c(x)是其字多项式,
    AES定义a和c的乘积b为 b(x)=a(x)c(x)modx^4+1
    因为只可以写成多项式形式故乘法可以写成矩阵的形式

  • x^4+1是可约多项式,字c(x)不一定可逆
    判断是否可约多项式方法:0,1一定是在区间内的两个元素, x^4+1=0,0不是他的根,1是它的根,是可约。有偶数项一定可约

  • AES选择的有逆元的固定c(x)
    在这里插入图片描述
    c(x)与x^4+1互为素数,存在逆
    c(x)的系数选择: 系数0多1少,运算快,工程少
    c(x)有逆的条件是 (x^4+1,c(x))=1

  • 字x乘法
    设b(x)为一个字,p(x)=xb(x)modx^4+1
    可写成矩阵形式(原因同上)
    因为模x^4+1,字的x乘法相当于按字节循环移位

AES的算法描述

AES的基本变换

AES数据处理方式

  • 按字节处理

  • 按字处理

  • 按状态处理
    状态:加解密过程中的中间数据,以字节为元素的矩阵或二维数组,数据长度128位,16个字节,4个字 4X4放置
    符号表示:
    Nb–明密文所含的字数
    Nk–密钥所含的字数
    Nr–迭代轮数

    AES的基本变换
    明文128bit,密钥128bit,一共进行10圈,前9圈叫做标准圈,最后 一圈叫做非标准圈

  • 标准轮变换,共有四部分:字节代换,行移位,列混合,轮密钥加,分别分析这四部分的变换

  • S盒对状态进行处理,16字节4个字,16个S盒同时变换,每个变换 一个字节,非线性部分。S盒是决定密码安全性的最重要部件,是其安全的关键。
    AES使用16个相同的盒子。DES使用8个不同的盒子
    AES的S盒有8位输入8位输出,是一种非线性置换,DES的S盒有6位输入4位输出,是一种非线性压缩
    工作步骤:
    第一步;将输入字节用其GF(2^8)上的逆来代替
    把输入字节看成GF(2^8)上的元素
    求出其在GD(2^8)上的逆元素
    用该逆元素替代原输入字节
    第二步:对上面的结果做如下的仿射变换(线性)
    (以x0-x7作输入,以y0-y7作输出)如下图:
    在这里插入图片描述

    矩阵每行每列都有5个1,因此输出的每一位都和5个输入相关

  • 行移位是线性运算
    行移位变换对状态的行进行循环移位
    第0行不移位,第1行移c1字节,第二行移c2字节,第3行移c3字节。
    c1,c2,c3按表取值
    nb=4,c1=1,c2=2,c3=3;
    nb=6,c1=1,c2=2,c3=3
    行移位变换属于置换,属于线性变换,本质在于把数据打乱重排,起扩散作用

  • 列混合,对状态列混合变换,本质是置换,线性运算
    列混合变换把状态的列视为FG(2^8) 上的多项式a(x),乘以一个固定的多项式c(x),并模x^4+1
    b(x)=a(x)c(x)modx^4+1 其中c(x) 可写成多项式的形式
    列混合变换属于线性变换,起扩散作用
    c(x)与x^4+1互素,从而保证c(x)存在逆多项式d(x),
    而c(x)d(x)=1modx^4+1。只有逆多项式d(x)存在,才能正确进行解密

-轮密钥加
轮密钥加变换(模2加)即把轮密钥与状态进行模2相加
轮密钥根据密钥产生算法产生
轮密钥长度等于数据块长度
轮密钥的生成:
轮密钥根据密钥产生算法通过用户密钥得到
密钥产生分两步进行

  • 密钥扩展
    密钥扩展将用户密钥扩展成一个扩展密钥
    用一个字元素的一维数组W[Nb*(Nr+1)]表示扩展密钥
    用户密钥放在该数据最开始的Nk个字节中,其他的字由他前面的字 经过处理得到的
    分Nk≤6和Nk≥6两种密钥扩展算法,当前使用的情况 NK≤6的密钥扩展,最前面的Nk个字是由用户密钥填充的,之后的每一个字W[j]等于前面的字W[j-1]与Nk个位置之前的字W[j-Nk]的异或,而且对于Nk的整数倍的位置处的字,在异或之前,对W[j-1]进行Rotl 变换和ByteSub变换,再异或一个轮常数Rcon
    j不是Nk的整数倍时候:Wj=Wj-1异或Wj-Nk
    j是Nk的整数倍:Wj=Wj-Nk异或ByteSub(Rotl(Wj-1)异或Rcon[j/Nk])
    Rotl变换是一个字里的字节循环左移函数设W=(A,B,C,D),则Rotl(W)=(B,C,D,A)
    轮常数Rocn与Nk无关,且定义为Rocn[i]=(RC[i],‘00’,‘00’,‘00’) RC[0]=‘01’ RC[i]=xtime(RC[I-1])
    NK≥6的密钥扩展,基本上与≤情况相似,不同在于:如果j被Nk除的余数=4,则在异或之前,对W[j-1]进行ByteSub变换,增加S变换,增强安全性
    轮密钥选择,从扩展密钥中选出轮密钥。

  • 非标准轮函数
    最后一轮轮函数,没有列混合

加密
AES加密算法
组成部分:
一个初始轮密钥加变换
Nr-1轮·的标准轮变换
最后一轮的非标准轮变换
解密*
解密算法 AES基本逆变换

  • 特点
    AES加密算法不是对合运算,解密算法与加密算法不同
    AES的巧妙之处:虽然接算法与加密算法不同,但是解密算法与加密算法结构相同
    把加密算法的基本运变换成逆变换,便得到解密算法

  • 求逆变换
    轮密钥加变换的逆就是他本身
    行移位变换的逆是状态的后三行分别移位Nb-C1,Nb-C2,Nb-C3个字节
    列混合变换的逆,因为列混合变换是把状态的每一列都乘以一个固定的多项式c(x):b(x)=a(x)c(x)modx^4+1.
    所以列混合变换的逆就是状态的每列都乘以c(x)的逆多项式d(x)
    在这里插入图片描述

  • S盒的逆
    第一步,首先进行逆仿射变换
    第二步,再把每个字节用其在GF(2^8)中的逆来变换,
    把输入字节看成GF(2^8)上的元素,
    求出其在GF(2^8)上的逆元素,
    用该逆元素代替原输入字节。
    解密密钥扩展
    解密的密钥扩展与加密的密钥扩展不同
    定义如下:加密算法的密钥扩展,把InvMixColumn 应用到除第一和最后一轮外的所有轮密钥上。

标签:AES,Nk,字节,变换,多项式,介绍,密码,密钥
来源: https://blog.csdn.net/qq_38324605/article/details/106904315

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有