第六章 高级加密标准

第六章 高级加密标准

美国国家技术研究所NIST在2001年发布了高级加密标准AES,一个对称分组密码算法,取代DES称为广泛使用的标准。

与公钥密码RSA相比,AES以及大多数的对称密码的结构都很复杂。

AES中所有的运算是在8位的字节上进行的。

一个域是一个结合,在集合内进行加减乘除运算的结果,也不会离开该域。例如\(Z_p=\{0,1,2,3,\dots,p-1\}\),其中\(p\)是一个素数,然后该域上的操作是取模。

1. AES的结构

明文分组长度为128位即16字节(对明文进行分组,每个组的昌都市128位)。密钥长度可以使16字节,24字节或是32位字节,对应的128位,192位,256位。根据密钥的长度。算法被称为AES-128等。
加密解密算法的明文输入是一个128位的分组。然后被分成一个\(4 \times 4\)的字节方针。
加密解密算法的密钥输入后也被组织成一个字节方阵,然后被扩展为:密钥字阵列。128位的密钥最终扩展为44个32位的序列:也就是说,128位的输入密钥,先按照\(4 \times 4\)字节的形式组织,然后扩展成44个4字节的序列\(w_i\)(数组),然后每4个序列组成一个\(4 \times 4\)的方阵(按列摆放),一共有11个方阵。128位密钥总共能够进行10轮(11次),192位对应12轮,256对应14轮。

每一轮都有:

  1. 字节代替
    . 行位移
    . 列混淆
    . 轮密钥加

组成。
其中第0轮只是一次轮密钥加。因此严格意义上,128位的还是10次。

1.1 字节替换

字节替换是一个简单的查表操作。为的是:防止已有的各种密码分析的攻击。
AES定义了一个S盒,是一个\(16 \times 16\)字节组成的矩阵,也就是一个表。包含了8位所有能表示的256个数的一个置换,其中要置换字节的高4位作为行值,低4位作为列值。
另外还有一个逆S盒,是解密时候用的。

S盒的构造:

  1. 首先按照\((x,y)\)初始化盒中\(16 \times 16\)表格中的每一个。例如,第9行,2列的值就是\(92\)
  2. 然后对\(16\times 16\)表格中的每一个值用它的逆替换。(这个后面再看,有点小看不懂
  3. 没看懂

S盒被设计成:能够防止已有的各种密码分析攻击。寻求输入和除数为之间相关性设计的很低,而且输出值不是输入值的线性数学函数时。

1.2 行位移变换

这个比较简单:第\(n\)行左移\(n\)个字节。(\(n\)从0开始)
行变换确保了某列中的四个字节被扩展到了4个不同的列:扩散

1.3 列混淆变换

列混淆变换的真相列混淆变换对每列独立的进行操作。
每列中的每个字节被映射为一个新值。辞职有改了中的每4个字节通过某个函数变换得来。其操作就是左乘一个\(4 \times 4\)的矩阵。

列混淆的矩阵中的值是基于码字间有最大距离的线性编码,使得每列的所有字节都有良好的混淆性。
列混淆和行变换使得在经过几轮变换后,所有的输出位于所有的输入位相关。

1.4 轮密钥加

是将前3个步骤的输出结果(其中第0轮,也就是第一次,直接使用第一组\(w_0\ ~\ w_3\)进行)与对应轮的密钥进行异或操作。

轮密钥加的变换操作影响了输入的每一位。密钥扩展的复杂性和AES其他阶段运算的复杂性,确保了该算法的安全性。

1.5 总结

AES不是一个Feistel结构,Feistel结构:数据分组中的一半使用密钥处理,然后用它来修改数据分组中的另一半,然后交换这两部分。

AES则是在每一轮都使用代替和混淆将这个数据分组作为一个单一的矩阵处理

2 AES密钥扩展算法

AES的密钥扩展算法输入值是16个字节(128位),输出是44个4字节的一维线性数组。(书上使用一个字表示4字节)

  1. 输入密钥被复制到扩展密钥数组的前4个字(原封不动的复制到了扩展密钥的前128位),这样就有了\(w[0] \dots w[3]\).
  2. 当\(w[i]\)的\(i\)是\(4\)的倍数时候,采用跟复杂算法计算一个tmp,也就是在第5的\(w\)的时候第一次计算tmp。其计算规则是:
    1. \(w[i-4]\)四个字节,都左移一个字节。
    2. 使用S盒替换其中的每个字节
    3. 与一个轮常量进行异或操作
  3. 然后每个\(w[i]\)是\(w[i-4]\)与tmp的异或结果。(tmp可以理解为,每4个\(w\)才会变一次的一个值)

轮常量是4个字节,右边3个字节都是0,左边一个字节每一轮都不同。虽然有固定的算法,但是每轮的轮常量最左一个字节是固定的。可以查表得到。

轮密钥的设计在于防止已有的密码分析攻击。轮常量则是为了防止不同的轮常量产生方式上的对称性或是相似性。

原文地址:https://www.cnblogs.com/perfy576/p/8996083.html

时间: 2024-10-14 04:10:14

第六章 高级加密标准的相关文章

Java 线程第三版 第六章 高级同步议题 读书笔记

多线程数据同步错误比较难检测,因为通常是与事件的特定发生顺序有关. 一.同步术语 Barrier(屏障) barrier是多个Thread的集合点:所有的Thread都应该到齐在这个barrier之后才能允许它们继续下去. Condition variable(条件变量) 实际上不是变量,而是与某个lock有关联的变量. Event variable(事件变量) 条件变量的另一个名称. Critical section(临界区) 临界区是synchronized方法或者block. Lock(锁

高级加密标准AES的工作模式(ECB、CBC、CFB、OFB)

高级加密标准(Advanced Encryption Standard: AES)是美国国家标准与技术研究院(NIST)在2001年建立了电子数据的加密规范.它是一种分组加密标准,每个加密块大小为128位,允许的密钥长度为128.192和256位. ECB模式(电子密码本模式:Electronic codebook) ECB是最简单的块密码加密模式,加密前根据加密块大小(如AES为128位)分成若干块,之后将每块使用相同的密钥单独加密,解密同理. CBC模式(密码分组链接:Cipher-bloc

深入理解Magento – 第六章 – 高级Magento模型(转)

深入理解Magento 作者:Alan Storm 翻译:Hailong Zhang 第六章 – 高级Magento模型 我们讲过Magento有两种模型,简单模型和EAV(Entity Attribute Value)模型.上一章我们讲过所有的Magento模型都是继承自Mage_Core_Model_Abstract / Varien_Object.简单模型和EAV模型的区别在于资源模型(Model Resource).虽然所有的资源模型都最终继承“Mage_Core_Model_Resro

AES高级加密标准简析

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

《Linux Device Drivers》第六章 高级字符驱动程序操作——note

ioctl 支持的操作,例如 简单数据传输 控制动作,例如用户空间发起弹出介质动作 反馈硬件的状态,例如报告错误信息 参数配置,例如改变波特率 执行自破坏 用户空间的ioctl方法原型:int ioctl(int fd, unsigned long cmd, -);每个ioctl命令就是一个独立的系统调用,而且是非公开的 驱动程序的ioctl方法原型:int (*ioctl) (struct inode *inode, struct file *filp, unsigned int cmd, u

深入理解Magento - 第六章 - 高级Magento模型

我们讲过Magento有两种模型,简单模型和EAV(Entity Attribute Value)模型.上一章我们讲过所有的Magento模型都是继承自Mage_Core_Model_Abstract / Varien_Object.简单模型和EAV模型的区别在于资源模型(Model Resource).虽然所有的资源模型都最终继承“Mage_Core_Model_Resrouce_Abstract”,但是简单模型是直接继承“Mage_Core_Model_Mysql4_Abstract”,而E

R in action读书笔记(22)第十六章 高级图形进阶(下)

16.2.4 图形参数 在lattice图形中,lattice函数默认的图形参数包含在一个很大的列表对象中,你可通过trellis.par.get()函数来获取,并用trellis.par.set()函数来修改.show.settings()函数可展示当前的图形参数设置情况.查看当前的默认设置,并将它们存储到一个mysettings列表中: > show.settings() > mysettings<-trellis.par.get() 查看叠加点的默认设置值: > mysett

R in action读书笔记(21)第十六章 高级图形进阶(上)

16.1 R 中的四种图形系统 基础图形函数可自动调用,而grid和lattice函数的调用必须要加载相应的包(如library(lattice)).要调用ggplot2函数需下载并安装该包(install.packages("ggplot2")),第一次使用前还要进行加载(library(ggplot2)). 16.2 lattice 包 lattice包为单变量和多变量数据的可视化提供了一个全面的图形系统.在一个或多个其他变量的条件下,栅栏图形展示某个变量的分布或与其他变量间的关系

第5章 编码/加密

在涉及到密码存储问题上,应该加密/生成密码摘要存储,而不是存储明文密码.比如之前的600w csdn账号泄露对用户可能造成很大损失,因此应加密/生成不可逆的摘要方式存储. 5.1 编码/解码 Shiro提供了base64(Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一)和16进制字符串编码/解码的API支持,方便一些编码解码操作,Shiro内部的一些数据的存储/表示都使用了base64和16进制字符串. String str = "hello"; String ba