【密码学笔记】第3部分 对称密码

这是关于密码学笔记的第三篇专栏文章。在本文中,我们首先介绍的是XOR运算,该运算在密码学中有着极大的用处。其次,我们将介绍一次性密码本,该密码系统已被证明是绝对无法被破译的。之后,我们将重点介绍几种对称密码算法,包括DES、三重DES、AES以及Rijndael。最后,我们将谈谈在众多的对称密码算法中应该如何取舍。

跟诸位大牛相比,笔者阅历尚浅、经验不足,笔记中若有错误,还需继续修正与增删。欢迎大家的批评与指正。

查看上一篇请点击以下链接:【密码学笔记】第2部分 历史上的密码

文章目录

1. XOR运算

2. 一次性密码本

3. 对称密码算法

    3.1 DES

    3.2 三重DES

    3.3 AES

    3.4 Rijndael

4. 对称密码的选择

5. 对称密码的评价

参考书目


1. XOR运算

XOR运算,又称为异或运算,运算结果是同0异1

对同一个比特序列进行两次XOR之后就会回到最初的状态,因此XOR运算可用于对称密码的加密和解密。


2. 一次性密码本

一次性密码本(又称为维纳密码)是一种非常简单的密码,它的原理是“将明文与一串随机的比特序列进行XOR运算”。

一次性密码本是无法破译的。这是因为在对它尝试解密的过程中,所有的排列组合都会出现,既会包含规则字符串,也会包含英文单词,还会包含乱码。由于明文中所有可能的排列组合都会出现,因此我们无法判断其中哪一个才是正确的明文

一次性密码本是一种非常不实用的密码。原因如下:

a. 密钥的配送。(最大的问题)如果能够有一种方法将密钥安全地发送出去,那么就可以用同样的方法安全地发送明文。

b. 密钥的保存密钥的长度必须和明文的长度相等。如果能够有办法安全保存与明文一样长的密钥,那就有办法安全保存明文本身。

c. 密钥的重用。在一次性密码本中绝对不能重用过去用过的随机比特序列,因为作为密钥的比特序列一旦泄露,过去所有的机密通信内容将全部被解密。

d. 密钥的同步。在通信过程中,发送者和接收者的密钥的比特序列不允许有任何错位,否则错位的比特后的所有信息都将无法解密。

e. 密钥的生成。一次性密码本需要生成大量的随机数,这里的随机数并不是通过计算机程序生成的伪随机数,而必须是无重现性的真正随机数。

一次性密码本的思路孕育出了流密码。流密码使用的不是真正的随机比特序列,而是伪随机数生成器产生的比特序列。流密码虽然不是无法破译的,但只要使用高性能的伪随机数生成器,就能够构建出强度较高的密码系统。


3. 对称密码算法

3.1 DES

DES是一种将64比特的明文加密成64比特的密文的对称密码算法,它的密钥长度是56比特。

DES是以64比特的明文(比特序列)为一个单位来进行加密的,这个64比特的单位称为分组。以分组为单位进行处理的密码算法称为分组密码

DES每次只能加密64比特的数据,如果要加密的明文比较长,就需要对DES加密进行迭代,而迭代的具体方式就称为模式(mode)

DES的基本结构又称为Feistel网络,这一结构不仅被用于DES,在其他很多密码算法中也有应用。在Feistel网络中,加密的各个步骤称为轮(round),整个加密过程就是进行若干次轮的循环。下图展现的是Feistel网络中一轮的计算流程。DES是一种16轮循环的Feistel网络。

一轮的具体计算步骤如下:

a. 将输入的数据等分为左右两部分;

b. 将输入的右侧直接发送到输出的右侧;

c. 将输入的右侧发送到轮函数;

d. 轮函数根据右侧数据和子密钥,计算出一串看上去是随机的比特序列;

e. 将上一步得到的比特序列与左侧数据进行XOR运算,并将结果作为加密后的左侧。

我们需要用不同的子密钥对一轮的处理重复若干次,并在每两轮处理之间将左侧和右侧的数据对调。

Feistel网络的解密操作只要按照相反的顺序来使用子密钥就可以完成了。

Feistel网络的性质

a. 轮数可以任意增加;

b. 加密时无论使用任何函数作为轮函数都可以正确解密(即使该函数不存在反函数);

c. 加密和解密可以用完全相同的结构来实现。

综上所述,无论是任何轮数、任何轮函数,Feistel网络都可以用相同的结构实现加密和解密,且加密的结果必定能够正确解密。

3.2 三重DES

三重DES是为了增加DES的强度,将DES重复3次所得到的一种密码算法,也称为TDEA,通常缩写为3DES

明文经过三次DES处理才能变成最后的密文,由于DES密钥的长度实质上是56比特,因此三重DES的密钥长度就是168比特。

三重DES并不是进行三次DES加密,而是加密→解密→加密的过程,目的是让三重DES能够兼容普通的DES,当所有密钥都相同时,三重DES也就等同于普通的DES。

如果密钥1和密钥3使用相同的密钥,而密钥2使用不同的密钥,这种三重DES就称为DES-EDE2。密钥1、密钥2、密钥3全部使用不同的比特序列的三重DES称为DES-EDE3

尽管三重DES目前还被银行等机构使用,但其处理速度不高,除了特别重视向下兼容性的情况以外,很少被用于新的用途。

3.3 AES

AES是取代其前任标准(DES)而成为新标准的一种对称密码算法。全世界的企业和密码学家提交了多个对称密码算法作为AES的候选,最终选出了一种名为Rijndael的对称密码算法,并将其确定为AES。

AES的选拔并不仅仅考虑一种算法是否存在弱点,算法的速度、实现的容易性等也都在考虑范围内。此外,这种算法还必须能够在各种平台上有效工作。

3.4 Rijndael

Rijndael是由比利时密码学家设计的分组密码算法,被选为新一代的标准密码算法——AES。

和DES一样,Rijndael算法也是由多个构成的,其中每一轮分为SubBytesShiftRowsMixColumnsAddRoundKey共4个步骤。DES使用Feistel网络作为其基本结构,而Rijndael使用的是SPN结构

加密过程

a. 首先,需要逐个字节地对16字节的输入数据进行SubBytes处理,即以每个字节的值(0~255)为索引,从一张拥有256个值的替换表(S-Box)中查找出对应值(类似于简单替换密码)。

b. 进行ShiftRows处理,即以4字节为单位的行(row)按照一定的规则向左平移,且每一行平移的字节数是不同的。

c. 进行MixColumns处理,即对一个4字节的值进行比特运算,将其变为另外一个4字节值。

d. 最后,将MixColumns的输出与轮密钥进行XOR,即进行AddRoundKey处理。至此,Rijndael的一轮就结束了。实际上,在Rijndael中需要重复进行10~14轮计算。

在SPN结构中,输入的所有比特在一轮中都会被加密。和每一轮都只加密一半输入的比特的Feistel网络相比,这种方式的优势在于加密所需要的轮数更少。此外,这种方式还有一个优势,即SubBytes、ShiftRows和MixColumns可以分别以字节、行和列为单位进行并行计算

在Rijndael的加密过程中,每一轮所进行的处理为:

SubBytes→ShiftRows→MixColumns→AddRoundKey

而在解密时,则是按照相反的顺序来进行的,即:

AddRoundKey→InvMixColumns→InvShiftRows→InvSubBytes

Inv表示与原始步骤相对应的逆运算。

解密过程

Rijndael算法背后有着严谨的数学结构,即从明文到密文的计算过程可以全部用公式来表达,这是以前任何密码算法都不具备的性质。如果Rijndael的公式能够通过数学运算来求解,那也就意味着Rijndael能够通过数学方法进行破译,这也为新的攻击方式的产生提供了可能。


4. 对称密码的选择

(1) 因为现在用暴力破解法已经能够在现实的时间内完成对DES的破译,DES不应再用于任何新的用途。但是也需要保持与旧版本软件的兼容性。

(2) 尽管在一些重视兼容性的环境中会使用三重DES,但我们也没有理由将三重DES用于新的用途,它会逐渐被AES所取代。

(3) 现在应该使用的算法是AES(Rijndael),因为它安全、快速,而且能够在各种平台上工作。

(4) AES最终候选算法应该可以作为AES的备份,因为这些密码算法也都经过了严格的测试,且没有发现任何弱点。

(5) 一般来说,我们不应该使用任何自制的密码算法,而是应该使用AES。


5. 对称密码的评价

优点

使用一种密钥空间巨大,且在算法上没有弱点的对称密码,就可以通过密文来确保明文的机密性。巨大的密钥空间能够抵御暴力破解,算法上没有弱点可以抵御其他类型的攻击。

不足

a. 用对称密码进行通信时,还会出现密钥的配送问题,即如何将密钥安全地发送给接受者。为了解决密钥配送问题,需要公钥密码技术

b. 尽管使用对称密码可以确保机密性,但仅凭这一点还并不能完全放心。例如发送者可能发送伪造的密文,并利用解密时返回的错误来盗取信息。


参考书目

[1] 《图解密码技术》(第3版),[日]结城浩著,周自恒译,人民邮电出版社,2014年。


衷心感谢您的阅读。


查看下一篇请点击以下链接:【密码学笔记】第4部分 分组密码的模式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354

推荐阅读更多精彩内容