AES加密算法实现C

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

AES加密算法实现C/S模式的通信

设计任务:

掌握AES的加密算法原理;

掌握用socket编程实现C/S模式的加密通信。

设计内容:

Socket编程实现客户端和服务器模式的通信;

编程实现AES加解密的过程;

将AES应用在C/S的通信中,对信息进行加密传输。

设计原理:

1、socket编程实现C/S模式的通信,当用户在客户端发出请求时,会在服

务器端做出相应的反应,并给出应答信息返回给客户端。

2、AES――对称密码新标准:高级加密标准。对称密码体制的发展趋势将以

分组密码为重点。分组密码算法通常由密钥扩展算法和加密(解密)算

法两部分组成。密钥扩展算法将b字节用户主密钥扩展成r个子密钥。

加密算法由一个密码学上的弱函数f与r个子密钥迭代r次组成。混乱

和密钥扩散是分组密码算法设计的基本原则。抵御已知明文的差分和线

性攻击,可变长密钥和分组是该体制的设计要点。AES是美国国家标准技

术研究所NIST旨在取代DES的21世纪的加密标准。AES的基本要求是,采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长

度128位,算法应易于各种硬件和软件实现。1998年NIST开始AES第一

轮分析、测试和征集,共产生了15个候选算法。1999年3月完成了第二

轮AES 2的分析、测试。最终将Rijndael数据加密算法作为高级加密标

准AES。在应用方面,尽管DES在安全上是脆弱的,但由于快速DES芯片

的大量生产,使得DES仍能暂时继续使用,为提高安全强度,通常使用

独立密钥的三级DES。但是DES迟早要被AES代替。

3、AES的主要算法原理:

AES 算法是基于置换和代替的。置换是数据的重新排列,而代替是用一个单元数据替换另一个。AES 使用了几种不同的技术来实现置换和

替换。为了阐明这些技术,让我们用 Figure 1 所示的数据讨论一个具

体的 AES 加密例子。下面是你要加密的128位值以及它们对应的索引数

组:

00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

192位密钥的值是:

00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17

0 1 2 3 4 5 6 7 8 9 10 1112 13 14 15 16 17 18 19 20 21 22 23

Figure 2 S-盒( Sbox )

当 AES 的构造函数(constructor)被调用时,用于加密方法的两个表被初始化。第一个表是代替盒称为S-盒。它是一个16×16的矩阵。S-盒的前五行和前五列如 Figure 2 所示。在幕后,加密例程获取该密钥数组并用它来生成名为w[]的

密钥调度表,Figure 3 所示。

Figure 3 密钥调度表(Key Sched)

w[] 最初的 Nk (6) 行被作为种子,用原始密钥值(0x00 到0x17)。剩余行从种子密钥来产生。变量 Nk 代表以 32 位字为单位的种子密钥长度。稍后我分析AES 实现时你将清楚地看到 w[] 是怎样产生的。关键是这里现在有许多密钥使用而不只是一个。这些新的密钥被称为轮密钥(round keys)以将它们与原始种

子密钥区别开来。

Figure 4 State (态)数组

AES 加密例程开始是拷贝 16 字节的输入数组到一个名为 State 的4×4 字节矩阵中。AES 加密算法取名为 Cipher,它操作 State[]。在规范中,加密算法实现的一个预备的处理步骤被称为 AddRoundKey(轮密钥加)。AddRoundKey 用密钥调度表中的前四行对 State 矩阵实行一个字节一个字节的异或(XOR)操作,并用轮密钥表 w[c,r] 异或输入 State[r,c]。

举个例子,如果 State 矩阵的第一行保存的字节是{ 00, 44, 88, cc }第一列密钥调度表是{ 00, 04, 08, 0c },那么新的 State[0,2] 值是用 w[2,0]( 0x08 或 0x80 )异或 State[0,2](0x88)的结果:

1 0 0 0 1 0 0 0

0 0 0 0 1 0 0 0 XOR

1 0 0 0 0 0 0 0

AES 算法的主循环对 State 矩阵执行四个不同的操作,在规范中被称为SubBytes(字节替换)、ShiftRows(行位移变换)、MixColumns(列混合变换)和 AddRoundKey。除了每次循环 AddRoundKey 都被调用并使用密钥调度表的下面四行外,AddRoundKey 与预备处理步骤中的 AddRoundKey 相同。SubBytes 例程是一个代替操作,它将 State 矩阵中的每个字节替换成一个由 Sbox 决定的新字节。比如如果 State[0,1]的值是 0x40 如果你想找到它的代替者,你取State[0,1] 的值 (0x40) 并让 x 等于左边的数字(4)并让 y 等于右边的数字(0)。然后你用 x 和 y 作为索引进到 Sbox 表中寻找代替值,如 Figure 2 所

示。

ShiftRows 是一个置换操作,它将 State 矩阵中的字节向左旋转。Figure 6 示范了 ShiftRows 如何操作 State[]。State 第0行被向左旋转0个位置,State 第1行被向左旋转1个位置,State 第2行被向左旋转2个位置,而 State 的

第3行被向左旋转3个位置。

Figure 6 对 State 进行 ShiftRows 操作

MixColumns 是一个代替操作,它是理解 AES 算法时最具技巧(或者说是最需要动脑筋的部分)的部分。它用 State 字节列的值进行数学域加和域乘的结果代替每个字节。假设 State[0,1] 的值是0x09,并且列1上的其它值分别为 0x60,

0xe1 和 0x04,那么,

State[0,1] = (State[0,1] * 0x01) + (State[1,1] * 0x02) +(State[2,1] * 0x03)

+(State[3,1] * 0x01)

= (0x09 * 0x01) + (0x60 * 0x02) + (0xe1 * 0x03) +(0x04 * 0x01) = 0x57

此处加法和乘法是专门的数学域操作,而不是平常整数的加法和乘法。

SubBytes、ShiftRows、MixColumns 和 AddRoundKey 四个操作在一个执行Nr 次的循环里被调用,Nr 为给定密钥大小的轮数减 1。加密算法使用的轮数要么是10,12,要么是14,这依赖于种子密钥长度是128位、192 位还是 256 位。在这个例子中,因为 Nr 等于12,则这四个操作被调用11次。该迭代完成后,在拷贝 State 矩阵到输出参数前,加密算法调用 SubBytes、ShiftRows 和AddRoundKey 后结束。

大致说来,AES 加密算法的核心有四个操作。AddRoundKey 使用从种子密钥

相关文档
最新文档