登录

  • 登录
  • 忘记密码?点击找回

注册

  • 获取手机验证码 60
  • 注册

找回密码

  • 获取手机验证码60
  • 找回
毕业论文网 > 外文翻译 > 电子信息类 > 电子信息工程 > 正文

高级加密标准外文翻译资料

 2022-09-27 11:09  

英语原文共 14 页,剩余内容已隐藏,支付完成后下载完整资料


启示:RIVIER学刊,第6卷,第2号,2010年秋季

高级加密标准

道格拉斯·塞伦特

美国里韦学院计算机科学专业理学硕士

摘要

高级加密标准(AES)是当前私钥加密的标准。 AES是由两个比利时密码学家Vincent Rijmen和Joan Daemen创建,取代了旧数据加密标准(DES)。联邦信息处理标准197使用的称为Rijndael的标准化算法是一种高级加密标准。该算法使用一个带有S盒的异或运算(XOR)算法,具有行和列八位取代组合旋转,一列混合的特点。因为它易于实施,所以很成功,并且可以在一个普通电脑上运行一段时间。

1引言:

1997年1月2日,国家标准与技术研究所(NIST)举办了一次新加密标准竞赛。以前的DES加密标准,已不再足够安全。它是自1976年11月23日以来的加密标准。但是随着后来计算能力的大大提高,它不再是安全的了。 1998年,DES在不到三天的时间由一个特制的计算机名为DES裂解装置破解。该DES裂解装置是由电子前沿基金会花费不到$ 250,000创建的,并赢得了RSA DES挑战II-2。 [1]

目前一个新的加密标准替代品是国际数据加密算法(IDEA)和三重DES(3DES)。问题是IDEA和3DES都太慢和因想法不全面无法落实自由专利。 NIST想要一个免费的,易于实现的算法,且有好的安全性。此外,他们希望的算法是有效的和灵活的[2]。大赛三年后,NIST选择了由两名比利时计算机科学家Vincent Rijmen和Joan Daemen创建的算法。他们命名了他们的算法叫Rijndael算法[2]。据说Rijndael算法只能由可以说荷兰语的人说正确,发音近似英文 “莱茵达尔” [3] 。

2001年11月26日,美国联邦信息处理标准出版物197宣布Rijndael算法作为加密的新标​​准规范的形式。该标准被称为高级加密标准,是目前仍在进行加密的标准[4] 。

2 Rijndael算法模块和关键

在数据被算​​法加密之前,该块和密钥大小必须确定。 AES允许128,168,192,224,和256位的块大小。 AES允许128,192的密钥大小和256的位[2]。该标准加密使用的AES-128其中两个块和密钥长度为128位。块大小通常表示为Nb,密钥大小通常表示为Nk。Nb在列中,每行由AES-128块列[5]中四个单元的的8个字节组成。

下面的例子将显示数据是如何被分割成块的。使用AES-128是指每个块将包括128位。

Nb可以除以128由32 来划分,来计算32的块每列中的字节数。在这种情况下,Nb为4.原始明文存储在字节的块中。

例如,文本“这是一个测试...”将被存储在一个块作为图1中所示的下方。

图1. AES-128块的例子

每个字符被存储在该块的一个单元。图中所示的空白的空间不是真的空白,因为它们代表了文本的空间。根据该算法是如何实现的字符可以被存储为整数值,十六进制值,或者甚至二进制字符串。所以三种方式表示相同的数据。大多数图表显示的十六进制值,但是整型和字符串操控是很容易在实际编程中使用AES做。图1示出的值作为演示表示出了字符显示文本是如何存储成块。在纯文本

直到所有的数据存储在由块存储到块的块列[5]。在实例上面使用的是比较简单的,正好是16个字符。为了使用Rijndael算法,该数据必须是块大小的倍数,因为所有的块需要是完整的。当数据不是一个必须使用的块大小的一些形式填充的倍数。填充是当附加位被添加到原始数据。填充的一种形式包括加入数据从而达到相同的字节,直到所需要的大小。另一种选择是用全零填充,个数是最后字节代表的零的数目。填充空字符或随机字符也是可以使用形式填充的。 [6]用一旦选择一个填充形式的数据,来表示为一些数字的完整块。则关键是使用算法之前需要做的最后一步。键也被称为加密密钥,也是在本实施例的相同的尺寸的块。转换的密钥可以是大多数数据的任何值,没有任何限制,只要键的长度选择是由设计者正确设计的。关键的是要存储成类似于纯文本块。 [5]如果明文数据存储到和被选择的键一样的块,那么Rijndael加密算法就可以应用。以下一些步骤可以在加密过程之前完成启动,但为简化起见,在需要的时候再讨论他们。

3 Rijndael算法轮

在基本层面,Rijndael算法使用了多个环节同时来转换数据为每个块的方法。从前面的例子,对于AES-128,循环数是10。这是从6加上最大的(4,4)计算出来的。由于Nb和Nk都是4,循环数为6 4 = 10 [2]。初始块(也称为状态)是从初始密码密钥导出的扩展密钥。然后,接下来处理操作包括S盒,班次和列混合的操作。那么结果被添加到下一扩展密钥。随着该列混合操作,最后的结果是所有十个回合进行加密的密码块。 [5]

4 Rijndael算法密钥

扩展原始加密密钥需要从16字节到16*(R 1)个字节。在这个例子中,有十个回合,所以每一轮之后和第一轮之前,需要R = 10。每一轮的关键是需要16字节,因为块的大小是16字节。因此,密码密钥需要被扩大从16字节到16*(R 1)个字节或176个字节。然后扩展密钥被分割成循环密钥。循环密钥被每一轮后和第一轮之前添加到当前状态。细节密钥扩展算法是复杂的,将被跳过。 [4]

5 Rijndael算法S盒

第一步是由字节替换字节,称为S盒的查找表。 S盒是一对一的映射,所有字节值从0到255的S-框是用来改变原来纯文本的字节密文。 S盒如图2,所有值都表示为十六进制。这是S盒常有的状态。 [5]图2. S-盒。

例如,如果我们有一个字符“D”的明文,将翻译成的十六进制值44,通过使用一个ASCII查找表。在十六进制的S-Box,第一个数字代表的行表。第二位数字表示的是S-box的列,其中,在本例中,也是4.中使用的S-box,我们发现行号4和列号4,并发现在该小区中的十六进制值是“1b”。这表面S盒是如何工作的。使用此方法,所有普通文本将生成新的十六进制值。最明显的问题是: S盒从何而来?回答涉及模运算和伽罗华域。伽罗华域是与有限数量元素的领域。伽罗瓦​​域始终是一个字段,它是一个主要的力量。对于每一个素数只有一个伽罗瓦领域存在。符号表示伽罗瓦​​域是GF(p),其中p是素数。 [8]对于S盒,选择域GF(28)。为什么选择该字段有以下几个理由。一个明显的原因是,选择8的功率是因为这个是8位。选择素2,因为二进制表示为两个可能的数字是1或0。另外在这个领域算术是简单的事,因为加减被重新定义为排除或(XOR)运算。 Invertability形成S盒时,也被认为是代数具有攻击性的表现。 [5]要真正产生领域S盒需要做更多的工作。心思缜密是了为安全起见。使用纯文本算法的下一步,将使它更容易在S盒中形式。原来字节通过使用图3所示的乘法逆和亲和基质以使加密变换。图3.亲和基质。图4.乘法逆表GF(28)。

要计算乘法,太复杂;因此,用一给定表来代替。所有的乘法的字段如图4 [7]。使用乘法表示十六进制值“31”的一个例子,我们从表中得到值“45”。这是我们将使用的值。我们的基质是二进制,因此数据以二进制为好。 45H是0100 0101二进制。查看该矩阵的简便方法是多项式乘法。值0100 0101可以被表示为多项式为0x7 1X6 0x5 0x4 0x3 1times;2 0x1 1,这可以改写,并简化为5233 X2 1.使用基质可以分配的第一行中的每个位的变量。因此,1 0 0 0 1 1 1 1可以被表示为N0 N1 N2 N3 N4 N5 N6 N7。此推广到所有的行,因此,所有的行可以与在相同的顺序相同的变量表示。与第一行做乘法相比,看看哪些变量基质是1。由于第一行是1 0 0 0 1 1 1 1,我们只有值N0 N4 N5 N6 N7。接下来,我们看一下多项式5233 X2 1,该多项式对应N的下标是什么,无论多项式的功率是多少,在N的下标我们都可以分配为1。否则我们分配的值为0。这使得N0

N4 N5 N6 N7变为1 0 0 0 1,进一步的快捷方式可采取完全无视,全部为0。可以这样做是因为除了在域GF(28),这是是仅有的异或操作。因此,添加1的数目将导致一个0值,添加奇数1将导致值1。下面如图5所示是整个仿射变换的简化数学。 [7]

行1 = 1 0 0 0 1 1 1 1 = N0 N4 N5 N6 N7 1 0 0 1 0 = 0

行2 = 1 1 0 0 0 1 1 1 = N0 N1 的N5 N6 N7 1 0 0 1 0 = 0

行3 = 1 1 1 0 0 0 1 1 = N0 N1 N2 N6 N7 1 0 1 1 0 = 1

行4 = 1 1 1 1 0 0 0 1 = N0 N1 N2 N3 N7 1 0 1 0 0 = 0

行5 = 1 1 1 1 1 0 0 0 = N0 N1 N2 N3 N4 1 0 1 0 0 = 0

行6 = 0 1 1 1 1 1 0 0 = N1 N2 N3 N4 N5 0 1 0 0 0 = 1

行7 = 0 0 1 1 1 1 1 0 = N2 N3 N4 的N5 N6 1 0 0 0 1 = 0

行8 = 0 0 0 1 1 1 1 1 = N3 N4 N5 N6 N7 0 0 0 1 0 = 1

图5.简化的乘法例子。行是多项式5233 X2 1乘以相乘的结果,向量0 0 1 0 0 1 0 1变换的最后一步是添加向量1 1 0 0 0 1 1 0到我们的载体。这为我们提供了1 1 1 0 0 0 1 1最终二进制串。既然我们要表示第一位的最后一排,我们需要扭转这一字符串给我们新的1 1 0 0 0 1 1 1的二进制串。在十六进制此值是C7。 [7]我们现在完成了。要知道,我们所做的一切都是正确的,我们回头看我们开始的地方。我们开始与从原来的表31中的十六进制值之后的所有工作所获得的值的和是

C7。因此,如果我们看一下31 S盒价值,我们应该看到C7。在S盒的所有值都与我们所做示例的方式相同。使用上面的例子“这是一个测试...”,下面块是S盒的代换结果。一个ASCII查找表也用于将字符值转换成十六进制值。由此产生在十六进制表示的所有值的块。如果这是一个真正实施的密钥,将被应用到之前第一轮的状态。因此,在S盒替代将与状态的密钥加入后完成。该块被示出在图6中。之后的S-box替换如图6:Rijndael算法班次。下一个步骤是将状态中的行移位。这些行被移位字节x个至左其中x是行号。这意味着行0将不被移位,行1将1个字节转移到左,行2将被移位2个字节到左侧,和行3将被移位3个字节到左边。结果的状态是通过将转移到先前的状态。如图7所示。注意,移位不影响字节替换,以便移位和S盒的操作能以不同的顺序进行。 [9]

7 Rijndael算法列混合

施加S盒和移动到状态后使用列混合的操作。在列混合查找表中,取一个字节并将其转换为四个字节。该列混合表由下面的算法所生成。表中的每个元素由通常表示为十六进制的四个字节值。第二和第三个字节用相同方法输入字节。因此,对于54值,将导致在54的第二和第三值。以及,第一个字节的输入字节要乘以2。如果结果是大于0xFF,则进行异或的结果值0x1B而不是mod 100。因此我们的字节0x54是(54 XOR 1b)的MOD 100 = A8的最后一个字节。是加到第一字节后[9]的输入字节。这样,最后一个字节是A8 XOR 54 = FC。这是产生在图8所示的列混合表的简单方法。图8.列混合表。我们目的是使生成表更加实用。它还避免乘法运算。这是在域GF(28)有些复杂。

2 3 1 1

1 2 3 1

1 1 2 3

3 1 1 2

图9.矩阵生成列混合表。

接下来的问题是如何使用列混合表。在我们的例子中,我们需要分裂出来成列的状态。每列都将应用它自己的列混合操作。使用查找表,找到第一列的所有值,我们得到以下。

0x20

40

20

20

60

0xF9

E9

F9

F9

10

0x92

3F

92

92

0X31

62

31

31

53

图10.与列混合表变换后的第一列

该列混合步骤是最好的说明图。该图如图11。

40 B3 = F3

E9 20 9C = 55

3F F9 20 53 = B5

62 92 9 60 = 69

31 92 10 = B3

31 AD = 9C

53

图11.列混合操作

在第一列中的列混合操作的结果是字节0x49,0x34,0xA7,和0xBD。图中的蓝色值表示在最终的结果中添加使用。同样,在其他列同样的过程。其结果是列混合状态过程之后的新值。

8 Rijndael算法解密

解密是加密过程简单的理解。它基本上是相反的。该算法适用于所有可逆的的步骤,解密基本上是倒着做上面所做的一切。因此,对于解密,开始于最后一轮。把每一轮做的过程中倒退。因此,循环密钥被加到第一个到最后一轮。另外就

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[150430],资料为PDF文档或Word文档,PDF文档可免费转换为Word

您需要先支付 30元 才能查看全部内容!立即支付

企业微信

Copyright © 2010-2022 毕业论文网 站点地图