对称密码
对称密码使用对称算法加密和解密数据。这些密码用于对称密钥密码学.对称算法使用同样关键像解密数据一样对数据进行加密。例如,对称算法将使用key 将一些明文信息(如密码)加密为密文。然后,它使用 再次将密文转换成密码。
对称密码是不对称密码的对立面,就像在公开密匙加密.这些密码使用非对称算法,使用一个密钥加密数据和不同的密钥解密密码。通常,这两个密钥被称为公钥和私钥,与RSA加密.公钥用于加密数据,私钥用于解密数据。
对称密码有很多重要的优点,比如速度。但他们在安全和密钥管理等其他领域却有所欠缺。然而,由于这些优点,在今天的生产中有许多重要的对称密码。其中最流行的是高级加密标准(AES)。但是,出于安全考虑,它通常用于一台机器上进行加密和解密。这消除了共享密钥的需要。当学习密码学时,对称密码是一个很好的开始,因为它们是现代计算中第一个广泛使用的系统。
概述
像所有形式的密码学一样,对称密钥密码学的一般过程是首先加密消息。这种加密算法会将任何明文数据转换为密文,一种不可读的代码。然后,该密文被传输到另一方,由后者解密以找到原始消息。
这个过程在加密和解密算法中使用某种密钥。通常这个键只有一系列位,表示某个数字。密钥究竟是什么取决于所使用的加密。对于对称密码,在中使用相同的密钥这两个加密和解密算法。加密和解密的算法函数是这样的:
对称密钥密码学要简单得多公开密匙加密.假设你想和你的网友交换秘密信息。你想要尽可能小心,但不幸的是,你不知道它们长什么样。您决定设置以下系统。
- 你在火车站买了一个储物柜和一把挂锁只有1关键。
- 当轮到你发信息时,你去车站,留下信息,并锁定它。
- 你选择一个时间和地点与你的网友见面。
- 当你看到他们时,你给他们钥匙(但是,你不能看到他们的脸)。
- 然后你的朋友可以去储物柜,打开它,阅读你的信息。
- 要向您发送消息,您的朋友必须经过相同的过程。
不幸的是,这个协议非常不安全。检查下面这个密码系统的一些优点和缺点。
简单对称密码
压缩空气蓄能密码
简单对称是最古老的密码学形式,可以追溯到凯撒密码这是凯撒大帝用来秘密通信的密码。这种密码,是一种替换密码他把凯撒可能写给某人的任何信息,并把信息中的每个字符都移动了一定程度。例如,消息“你好”
移位5会得到“mjqqt”
.此密码是对称的,因为相同的密钥(在本例中为5)用于加密和解密消息。
凯撒的密码特别容易受到频率分析等攻击。语言中的单词和字符不是随机的。如果攻击者拦截了足够多的消息,他们可能会知道他们在写信j
出现很多在密文代码中。现在攻击者有了线索j
凯撒密码是一个普通字母的密码,可能是年代
或者一个一个
.绝对不是z
.多次重复这个过程就会破坏代码。
一次性垫
的一次性垫是另一个著名的对称密码。它因冷战期间被克格勃和美国间谍使用而闻名。假设一个间谍想要向另一个间谍发送消息,为了简单起见,该消息采用二进制格式。这两个间谍事先已经见过面,并决定了一把钥匙10110
为了这一条信息。这个密钥通常是随机决定的,以提高安全性。第一个间谍,爱丽丝,想要发送信息01101
给第二个间谍鲍勃。为了加密Alice的消息,她创建了一个新的密文0
如果原始消息和密钥之间的对应位相同。否则,它有1
.这也叫做an布尔逻辑中的异或.
爱丽丝的加密信息是11011
.为了解密这条消息,Bob执行了完全相同的过程。在布尔逻辑中,两个异或操作将导致一个空操作。所以,
在哪里 是异或的数学符号。
这里有一个一次性填充的问题(除了对称密码的其他一般问题)。密钥必须和消息本身一样长。Alice和Bob可以通过简单地在到达结尾时循环到键的开头来解决这个问题。然而,这将使代码更容易被对方间谍使用暴力或统计分析破解。然而,一次性的护垫是完美的秘密理论上是这样。这意味着攻击者无法知道任何东西如果他们截获了密文。然而,在实践中,分配和交换密钥是不安全的。
对称密码的类型
二进制的明文和 比特的关键生产 密文。它们被称为分组密码,因为它们操作的是 一次比特。分组密码在目前的许多对称密码系统中都被使用。
现代对称密钥密码可以是两种类型之一。的分组密码在基本分组密码有几个重要的问题。他们是可塑的,这意味着它们传递的信息可能会被攻击者更改。如果你加密某条信息, , ,攻击者可以拦截它并将其更改为 .然后攻击者将其发送出去,而你的接收者将解密你的消息 ,而不是 .例如,攻击者可以截获一条解密为“晚上10点见”的消息,并将其更改为“晚上11点见”。此外,超过一个块长的消息需要被分割成更小的消息,这个过程称为电子密码簿(ECB).密码块链(CBC)通过在过程中引入一些随机元素来修复这些问题,但是它对性能有可怕的影响。
的流密码类似于一次性填充,即在带有伪随机序列的明文上使用XOR函数。所以,它不是静态的密钥,就像01011
从上面的ty问题来看,它是不断变化的,并且总是伪随机的。输入明文是增量加密的,通常一次一个字节。随机序列是不可能的,因为将它分发给接收者本身就是不安全的。因此,使用了伪随机序列。这些伪随机序列是给定初始值的生成器的输出种子.种子只是一个用于初始化伪随机数生成器的数字。
流密码也具有延展性,通常生成与输入明文统计相关的密文。如果算法的随机性执行得不好,这一点尤其正确。通常,键的部分被完全丢弃。即使是流行的流密码RC4,密钥的前几个千字节通常会被丢弃。
利与弊
在对称密码学和非对称密码学(通常称为公钥)之间进行选择是非常重要的,因为这种选择将对整个系统产生严重影响。对称密码和系统对性能有利,因为它们的运行速度比公钥密码系统快1000倍左右。加上对称密码更简单,更容易实现。因此,对称系统用于批量加密,特别是在安全性不那么重要的情况下。
一些对称密码可以通过蛮力攻击被破解,降低了它们的整体安全性。如果你决定使用凯撒密码为了加密你的数据,你可能会立即被黑客攻击,因为用brute破解它们对于目前的计算机来说是微不足道的。通常,这些攻击只是简单地尝试所有可能的密钥,直到找到正确的密钥。即使使用更高级的对称密码,这仍然是一个必须使用密钥更改和随机性来处理的问题。
对称密码是不利的,因为它们需要一个秘密通道来交换密钥。这个通道本质上是不安全的,因此攻击者可能会窃取密钥,从而使系统变得脆弱。此外,密钥管理在使用对称密钥的大型设置中成为一个问题。假设你有一家有100名员工的公司。如果你用过RSA加密,您总共只需要200个密钥(每个人一个公钥和一个私钥)。但是,如果使用对称键,则需要 !这是因为每对人都需要自己的对称密钥。
我们来分析一下例子看看我们的系统是如何与这些优点和缺点相匹配的。
- Alice和Bob有一个非常简单的系统,很容易实现。他们只需要制作一个密钥(而不是4个,每个人一个公钥和一个私钥),整个事情很快就开始运行了。
- 暴力攻击(攻击者尝试每一个可能的密钥来找到正确的密钥)可能比需要4个密钥来做到这一点更快地破坏系统,但这不是主要问题。
- 如果Alice和Bob想要将他们的系统扩展到更多人,其中每对人都有自己的储物柜来进行安全通信,他们就需要购买 键, 是系统中的人数。
- 这个系统最大的问题是密钥的共享。他们每次都需要见面来交接。他们互不相识,所以爱丽丝可能把钥匙给错了人。即使他们见过面,还是会有人来把钥匙拿走而他们正在进行交易。这两种攻击(模拟而且中间人攻击)这种事经常发生。
对称密码系统
数据加密标准(DES)
DES是一个对称系统,它曾经是20世纪70年代的主要标准,但后来由于安全性低而失去了我们的青睐。它的引入引发了关于标准在密码学中的作用的激烈辩论,并导致了该领域的大量研究和创新。然而,DES是分组密码系统的原型,今天的许多系统都是基于它的设计。
DES使用分组密码。DES中的分组密码由56个随机位组成,另外8个位用于错误检测。这些错误检测位使得DES不可篡改——攻击者无法在到达目的地的途中更改密码,因为他们可能会意外地删除用于错误检测的位,然后接收方就会知道数据受到了攻击。然而,即使在20世纪70年代,相对较小的密钥尺寸也是一个争论的问题。到1999年,DES可以在一天之内被破解。后来,通过将多个DES系统排序在一起解决了这个问题,称为3DES。
数据首先被送入系统,然后被切成两个32位的两半。这两部分被发送到整个系统,使用所谓的Feistel系统.DES中有16层,在每一层中,有一半数据经过Fiestel函数。一旦完成,它将与另一半数据一起XORd。每一层都有自己的注册表子项.子密钥是从主密钥派生出来的,56位密钥使用关键调度器.
Fiestel函数,它出现在每个标记的块中 在右边的图中,有3个步骤:
- 扩展:传入的32位块有一半的位被复制,使其成为一个48位块。
- 混合:新的48位输入块通过一个异或门,带有这一轮唯一的子键。
- 替换:混合的48位块被分成8个6位块。这8件作品中的每一件都经过了s区这将只输出4位使用非线性变换.*
- 排列:然后将32个输出位以特定的排列方式排列,以确保在下一轮中它们将分布在不同的s块中。
*这是DES安全性中最重要的部分,它有助于避免简单的、基于代数的攻击。
关键调度器:
- 56位的主键被拆分为两个28位的主键。这两半以后分别处理。
- 在每一轮中,每一半向左或向右旋转一个或两个比特(取决于轮)。
- 从左半部分中选择24位,从右半部分中选择24位,组成一个48位的子密钥。
因为我们在每一轮中都进行了轮换,所以每个位只在16轮中的大约14轮中使用。用于加密和解密的密钥调度器完全相同,只是用于解密的子密钥顺序相反。
早在20世纪70年代,DES就容易受到蛮力攻击,但它在其他方面也很脆弱。差分密码分析,或者研究输入的变化如何影响输出,在破解分组密码尤其是DES时非常有效。线性密码分析,适用于仿射变换对密码也广泛使用。
高级加密标准(AES)
AES类似于DES,它是对称的,使用分组密码。但是,它比DES安全得多,已成为国际标准。至少比3DES快6倍。AES不使用Fiestel函数,而是使用substitution-permutation网络.这个网络是一系列的操作,不是用输出位替换输入(替换),就是打乱比特(置换)。
它使用128位输入明文,但它操作于字节而不是比特。因此,输入被表示为16字节(因为128位= 16字节),排列在一个4 x 4矩阵中。这个矩阵叫做状态,会随着算法的进展而修改。AES也以轮为单位运行,但轮的数量是可变的,并基于所使用的密钥的长度。128位密钥将运行10轮AES, 192位密钥将运行12轮AES, 256位密钥将运行14轮AES。与DES类似,每一轮使用不同的密钥。这些注册表子项长度为128位,从原始密钥计算。
AES的过程如下:
第一轮
一。AddRoundKey
第2轮到(n-1)
一。SubBytes
b。ShiftRows
c。MixColumns
d。AddRoundKey
一轮n
一。SubBytes
b。ShiftRows
c。AddRoundKey
第一个函数,AddRoundKey
,获取当前状态(一个16字节的矩阵),并将其与此特定轮的键xor。结果就是新的状态。
SubBytes
是AES的替换函数之一。16字节的状态矩阵使用天地盒具体AES实现的设计。这一步与替换
它使用非线性和仿射变换来为系统提供安全性。
ShiftRows
移位每一行中的字节。通常情况下,状态的第一行将保持不变,第二行将左移1,第三行将左移2,第四行将左移3。这样做是为了确保列不是线性无关的,这将把AES变成4个独立的分组密码。
MixColumns
将状态的每一列乘以一个可逆函数,一个固定的多项式。
AES中的解密算法与加密算法相同,但方式相反。与Fiestel的结构不同,解密需要单独实现,因为函数的顺序是相反的,但它们非常相似。
河豚
Blowfish是另一种对称分组密码。它是在DES之后,AES之前创建的。它的块大小为64位,并且它可以使用从32位到448位的任何密钥长度。和DES一样,它是一个16轮Fiestel密码。它是s盒,不像DESkey-dependent,因此它们是动态生成的。
在Blowfish中有5个子密钥数组,1个18个条目的p数组和4个256个条目的s框。这些子键数组存储每一轮Blowfish中使用的子键。在每一轮中使用一个p数组子键,其余两个条目用最后一轮之后的最终输出进行异或运算。s盒接受8位输入并产生32位输出。的十六进制数字进行初始化π.河豚的关键调度器然后取这个密匙,把它和所有P项按顺序xor。然后,用该算法加密一个64位的全零块,结果替换P中的前两个条目。这个过程继续,使用新的子密钥,结果替换P中的下面两个条目,依此类推。整个P数组(9对条目)和4个s -box(每个128对)中的每一个都将在这个过程中被替换。生成所有子密钥总共需要运行521次。
河豚式16发每发有4次操作。在圆形的 :
- 对数据的左半部分进行异或 P中的第th项。
- 使用(1)的输出作为Blowfish的f函数的输入 .
- 将f函数的输出与右半部分的数据异或。
- 交换数据的左右半部分 .
f函数将32位输入分解为4段,并将它们馈送到4个s盒,从而产生4个32位输出。这些是模相加的 ,和异或产生32位输出。
在最后一轮之后,撤销这个交换。相反,用P中倒数第二项对数据的左半部分进行异或,用P中倒数第二项对数据的右半部分进行异或。
下面的例子是如果每个子键是8位而不是32位,第一轮Blowfish将如何进行。为了简单起见,这里没有描述s盒的内部工作原理,而且它们的输出是给定的。
P-array =[11010110,…]
输入数据=
0110011011010010
用p -数组中的第一个项对数据的左半部分进行异或。
使用第一步的输出作为f函数的输入。
8位的结果被分成4.2位的部分,并被送入4个s盒。结果是4个8位输出:11010110,11001010,00010101,01101010。这些加在一起并按以下方式异或:
将f函数的输出与右半部分的数据异或。
交换数据的左右半部分。
左:
11001101
正确的:
11010010
经过一轮河豚队的比赛,数据显示
1101001011001101
.
解密与加密(类似于DES)完全相同,除了一件事。解密不是从P的第一个条目到最后一个条目,而是从P的最后一个条目到第一个条目。
Twofish
双鱼是河豚的继承者,在很多方面都很相似。它几乎击败AES成为全球标准。当使用128位密钥大小时,它比AES慢,但当使用256位密钥大小时略快。twfish和Blowfish的空间复杂度更高,这意味着它们比AES占用更多的计算机内存,这使得它们不那么吸引人。由于它增加了密钥大小,Twofish在安全性上比Blowfish有所提高。
它使用128位的块大小和256位的键大小。它像DES和Blowfish一样,在加密和解密其消息和密码时使用Fiestel结构。它还使用预先计算的s盒,将其私钥分成两部分,并使用其中一部分修改加密算法。
参考文献
- Gothberg D。加密图.检索2016年7月13日,从https://commons.wikimedia.org/wiki/Category:Cryptography_diagrams
- 加密,M。加密图.检索2016年7月13日,从https://commons.wikimedia.org/wiki/Category:Cryptography_diagrams