 |
 |
最新调查 |
|
|
|
 |
 |
频道统计 |
|
|
|
|
|
 |
 |
利用VB实现AES算法[VB知识库-Visual Basic Knowledge base] |
|
|
| 利用VB实现AES算法[VB知识库-Visual Basic Knowledge base] |
| 作者:Admin 来源:VB知识库 录入:Admin 更新时间:2008-5-3 10:04:32 点击数:1 |
【字体:
】 |
自 20 世纪 70 年代以来一直广泛使用的“数据加密标准”(DES) 日益显出衰老的痕迹,而一种新的算法 -- Rijndael -- 正顺利地逐渐变成新标准。这里,Larry Loeb 详细说明了每一种算法,并提供了关于为什么会发生这种变化的内幕信息。 DES 算法是全世界最广泛使用的加密算法。最近,就在 2000 年 10 月,它在其初期就取得的硬件方面的优势已经阻碍了其发展,作为政府加密技术的基础,它已由“高级加密标准”(AES) 中包含的另一种加密算法代替了。AES 是指定的标准密码系统,未来将由政府和银行业用户使用。AES 用来实际编码数据的加密算法与以前的 DES 标准不同。我们将讨论这是如何发生的,以及 AES 中的 Rijndael 算法是如何取代 DES 的算法的。
“高级加密标准”成就 但直到 1997 年,美国国家标准技术局 (NIST) 才开始打着 AES 项目的旗帜征集其接任者。1997 年 4 月的一个 AES 研讨会宣布了以下 AES 成就的最初目标: • 可供政府和商业使用的功能强大的加密算法 • 支持标准密码本方式 • 要明显比 DES 3 有效 • 密钥大小可变,这样就可在必要时增加安全性 • 以公正和公开的方式进行选择 • 可以公开定义 • 可以公开评估
AES 的草案中最低可接受要求和评估标准是: A.1 AES 应该可以公开定义。 A.2 AES 应该是对称的块密码。 A.3 AES 应该设计成密钥长度可以根据需要增加。 A.4 AES 应该可以在硬件和软件中实现。 A.5 AES 应该 a) 可免费获得。 A.6 将根据以下要素评价符合上述要求的算法: 1. 安全性(密码分析所需的努力) 2. 计算效率 3. 内存需求 4. 硬件和软件可适用性 5. 简易性 6. 灵活性 7. 许可证需求(见上面的 A5) Rijndael:AES 算法获胜者 1998年8月20日NIST召开了第一次AES侯选会议,并公布了15个AES侯选算法。经过一年的考察,MARS,RC6,Rijndael,Serpent,Twofish共5种算法通过了第二轮的选拔。2000 年 10 月,NIST 选择 Rijndael(发音为 "Rhine dale")作为 AES 算法。它目前还不会代替 DES 3 成为政府日常加密的方法,因为它还须通过测试过程,“使用者”将在该测试过程后发表他们的看法。但相信它可以顺利过关。 Rijndael 是带有可变块长和可变密钥长度的迭代块密码。块长和密钥长度可以分别指定成 128、192 或 256 位。 Rijndael 中的某些操作是在字节级上定义的,字节表示有限字段 GF(28) 中的元素,一个字节中有 8 位。其它操作都根据 4 字节字定义。 加法照例对应于字节级的简单逐位 EXOR。 在多项式表示中,GF(28) 的乘法对应于多项式乘法模除阶数为 8 的不可约分二进制多项式。(如果一个多项式除了 1 和它本身之外没有其它约数,则称它为不可约分的。)对于 Rijndael,这个多项式叫做 m(x),其中:m(x) = (x8 + x4 + x3 + x + 1) 或者十六进制表示为 '11B'。其结果是一个阶数低于 8 的二进制多项式。不像加法,它没有字节级的简单操作。 不使用 Feistel 结构! 在大多数加密算法中,轮回变换都使用著名的 Feistel 结构。在这个结构中,中间 State 的位部分通常不做更改调换到另一个位置。(这种线性结构的示例是我们在 DES 部分中讨论的那些表,即使用固定表的形式交换位。)Rijndael 的轮回变换不使用这个古老的 Feistel 结构。轮回变换由三个不同的可逆一致变换组成,叫做层。(“一致”在这里表示以类似方法处理 State 中的位。) 线性混合层保证了在多个轮回后的高度扩散。非线性层使用S-BOX的并行应用,该应用程序有期望的(因此是最佳的)最差非线性特性。S-BOX是非线性的。依我看来,这就 DES 和 Rijndael 之间的密钥概念差异。密钥加法层是对中间 State 的轮回密钥 (Round Key) 的简单 EXOR,如以下所注。
Rijndael算法
加密算法 Rijndael算法是一个由可变数据块长和可变密钥长的迭代分组加密算法,数据块长和密钥长可分别为128,192或256比特。 数据块要经过多次数据变换操作,每一次变换操作产生一个中间结果,这个中间结果叫做状态。状态可表示为二维字节数组,它有4行,Nb列,且Nb等于数据块长除32。如表2-3所示。
a0,0 a0,1 a0,2 a0,3 a0,4 a0,5 a1,0 a1,1 a1,2 a1,3 a1,4 a1,5 a2,0 a2,1 a2,2 a2,3 a2,4 a2,5 a3,0 a3,1 a3,2 a3,3 a3,4 a3,5
数据块按a0,0 , a1,0 , a2,0 , a3,0 , a0,1 , a1,1 , a2,1 , a3,1 , a0,2…的顺序映射为状态中的字节。在加密操作结束时,密文按同样的顺序从状态中抽取。 密钥也可类似地表示为二维字节数组,它有4行,Nk列,且Nk等于密钥块长除32。算法变换的圈数Nr由Nb和Nk共同决定,具体值列在表2-4中。 表3-2 Nb和Nk决定的Nr的值 Nr Nb = 4 Nb = 6 Nb = 8 Nk = 4 10 12 14 Nk = 6 12 12 14 Nk = 8 14 14 14
3.2.1圈变换 加密算法的圈变换由4个不同的变换组成,定义成: Round(State,RoundKey) { ByteSub(State); ShiftRow(State); MixColumn(State); AddRoundKey(State,RoundKey); (EXORing a Round Key to the State) } 加密算法的最后一圈变换与上面的略有不同,定义如下: FinalRound(State,RoundKey) { ByteSub(State); ShiftRow(State); AddRoundKey(State,RoundKey); }
ByteSub变换 ByteSub变换是作用在状态中每个字节上的一种非线形字节变换。这个S盒子是可逆的且由以下两部分组成: 把字节的值用它的乘法逆替代,其中‘00’的逆就是它自己。 经(1)处理后的字节值进行如下定义的仿射变换:
y0 1 1 1 1 1 0 0 0 x0 0 y1 0 1 1 1 1 1 0 0 x1 1 y2 0 0 1 1 1 1 1 0 x2 1 y3 0 0 0 1 1 1 1 1 x3 0 y4 = 1 0 0 0 1 1 1 1 x4 + 0 y5 1 1 0 0 0 1 1 1 x5 0 y6 1 1 1 0 0 0 1 1 x6 1 y7 1 1 1 1 0 0 0 1 x7 1
ShiftRow变换 在ShiftRow变换中,状态的后3行以不同的移位值循环右移,行1移C1字节,行2移C2字节,行3移C3字节。 移位值C1,C2和C3与加密块长Nb有关,具体列在表2-5中: 表3-3 不同块长的移位值 Nb C1 C2 C3 4 1 2 3
MixColumn变换 在MixColumn变换中,把状态中的每一列看作GF(28)上的多项式与一固定多项式c(x)相乘然后模多项式x4+1,其中c(x)为: c(x) =‘03’x3 + ‘01’x2 + ‘01’x + ‘02’
圈密钥加法 在这个操作中,圈密钥被简单地使用异或操作按位应用到状态中。圈密钥通过密钥编制得到,圈密钥长等于数据块长Nb。
在这个表示法中,“函数”(Round, ByteSub, ShiftRow,...) 对那些被提供指针 (State, RoundKey) 的数组进行操作。ByteSub 变换是非线性字节交换,各自作用于每个 State 字节上。在 ShiftRow 中,State 的行按不同的偏移量循环移位。在 MixColumn 中,将 State 的列视为 GF(28) 多项式,然后乘以固定多项式 c( x ) 并模除 x4 + 1,其中 c( x ) = '03' x3 + '01' x2+ '01' x + '02'。这个多项式与 x4 + 1 互质,因此是可逆的。 轮回密钥通过密钥计划方式从密码密钥 (Cipher Key) 派生而出。它有两个组件:密钥扩展 (Key Expansion) 和轮回密钥选择 (Round Key Selection)。轮回密钥的总位数等于块长度乘以轮回次数加 1(例如,块长度等于 128 位,10 次轮回,那么就需要 1408 个轮回密钥位)。 密码密钥扩充成扩展密钥 (Expanded Key)。轮回密钥是通过以下方法从这个扩展密钥中派生的:第一个轮回密钥由前 Nb(Nb = 块长度)个字组成,第二个由接着的 Nb 个字组成,以此类推。 加密算法由以下部分组成:初始轮回密钥加法、Nr-1 个轮回和最后一个轮回。 由于 Rijndael 是可逆的,解密过程只是颠倒上述的步骤。 最后,开发者将仔细考虑如何集成这种安全性进展,使之成为继 Rijndael 之后又一个得到广泛使用的加密算法。AES 将很快应一般商业团体的要求取代 DES 成为标准,而该领域的发展进步无疑将追随其后。
下载示例源码
至少要成为本站的注册会员才能下载! 注册点我!
|
|
|
发表评论 告诉好友 打印此文 收藏此页 关闭窗口 返回顶部 |
|
|
 |
 |
网友评论:(只显示最新5条。) |
|
|
|
|
|