加密技术01-对称加密-DES原理

DES背景

DES 全称 Data Encryption Standard(数据加密标准)。DES 最初出现在 1970 年代早期。1972 年,在一个对美国政府的计算机安全需求的研究得出结果后,NBS(国家标准局,现在的NIST)开始征集用于加密政府内非机密敏感信息的加密标准。因此 1973 年 5 月 15 日,在咨询了美国国家安全局(NSA)之后,NBS向公众征集可以满足严格设计标准的加密算法。然而,没有一个提案可以满足这些要求。因此在,1974 年 8 月 27 日,NBS开始了第二次征集。这一次,IBM提交了一种在 1973-1974 年间发展的算法,这份提案被有限度的接受了。这种算法是基于早先霍斯特·费斯妥(Horst Fiestel)提出的Lucifer算法的。

注意在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm, DEA),已与作为标准的DES区分开来。

DES功能

给定一个 64 位的明文和一个 64 位的密钥,输出一个 64 位的密文。这个密文可以用相同的密钥解密。所谓 64 位的密钥,其实里面只有 54 位在起作用。剩余的位当作奇偶校验位。虽然 DES 一次只能加密 8 个字节,但我们只需要把明文划分成每 8 个字节一组的块,就可以实现任意长度明文的加密。如果明文长度不是 8 个字节的倍数,则需要填充,目前填充方式主要是 PKCS7 / PKCS5。

DES加密原理

下来主要分析 8 个字节的加解密过程,下图是 DES 算法框架。

des_img01.png

密钥调度

所谓密钥调度,就是从 1 把 64 位的主钥匙,得到 16 把 48 位的子钥匙,然后把这些子钥匙用于迭代加密。

  1. 使用选择置换1(PC-1)从64位输入密钥中选出 56 位的密钥,剩下的 8 位要么直接丢弃,要么作为奇偶校验位,然后把 56 位分成两个 28 位的半密钥。
  2. 把两个半密钥都向左移 1 或 2 位(移位逻辑类似循环数组,具体移多少由回次数决定,见下表)。
  3. 合并两个半密钥,通过置换2(PC-2)产生 48 位的子密钥。
  4. 重复第 2 步和第 3 步 16 次,这样就得到了 16 把 48 位的子密钥。

流程图

des_img02.png

选择置换1(PC-1):输入的64位数据中只用到了56位,剩余的8位可以用于奇偶校验,也可以直接丢弃。

image.png
des_img05.png

左移回次表:全部移动完移动次数恰好是 28 次,最后一次移动完又回到初始状态。

image.png

选择置换2(PC-2):从56位的密钥调度状态中置换出48位的子密钥。

image.png
des_img06.png

轮函数(F函数)

轮函数(F函数)是整个算法的核心,以一个 48 位子密钥加密 32 位数据信息。

  1. 将 32 位数据进行扩展置换,生成 48 位的数据。
  2. 将置换后的 48 位结果与输入的 48 位子密钥进行异或运算,得到 48 位的运算结果。
  3. 将 48 位运算结果分成 8 组,每组 6 位数据,按照组号对应相应的 S 盒,进行 8 个 S 盒置换,生成 8 个 4 位的数据。
  4. 将这 8 个 4 位数据合并,得到一个 32 位数据。
  5. 将 32 位进行 P 置换就得到最后的 32 位处理结果。

流程图

des_img04.png

扩张函数 (E函数):输入中的某些位在输出中被用到了不止一次,例如输入的第 5 位出现在输出的第 6 和 8 位。因此,输入 32 位被扩张到了 48 位。这样也会带来雪崩效益,输入数据中当有 1 为发生变化时,有 50% 的概率使得 2 位输出位发生变化。

image.png
des_img07.png

置换盒 (S盒):每个 S 盒将 6 位输入变为 4 位输出。给定输入后,输出行由外侧两位确定,列由内侧的 4 位确定。

例如,在 S2 盒中输入 “011011”。在输入的外侧位为 “01”(十进制的 1),内侧位为 “1101”(十进制的 13),因此在 S2 中的对应输出为 “1001”(十进制的 9),即第 2 行,第 14 列。

des_img08.png

S 盒作为 DES 算法中唯一的非线性器件,是加密的关键所在,然而,多年来,一直未有人将 S 盒的设计准则公开。从已有的关于 S 盒的推理不难看出有如下几条准则。

  1. S 盒的每一行是整数0,1,2,…,15 的一个置换。
  2. 每个 S 盒均为 6 位输入,4 位输出。
  3. S 盒的输出都不是其输入的简单线性或仿射函数。
  4. 改变 S 盒的 1 位输入,至少要引起 2 位的输出变化。

P置换:P置换将32位的半块数据重新排列。

image.png
des_img09.png

加密过程

  1. 输入的明文(长度为64的布尔数组)做一个置换(IP置换),得到64位的数组。
  2. 把得到的数组拆成左、右两半边。每边是32位长度。
  3. 每一轮迭代,都是接收一组 L, R,返回 L', R' ,作为下一轮迭代的 L, R。迭代过程如下:
L' = R;
R' = L^(F(k[i], R))
  1. 利用之前得到的 16 个子密钥,执行步骤 3 一共 16 次。
  2. 将最终的 R 与 L 拼接,再做一次置换(FP置换),即得到密文。
des_img03.png

IP置换

image.png
des_img10.png

FP置换:FP(亦被称为IP-1)是IP的逆过程。

image.png
des_img11.png

DES解码原理

对称加解密的基本数学原理是:一个数进行两次异或运算就能恢复,S ^ e ^ e = S。

比如:

10 ^ 6(二进制:1010 ^ 110)= 12(二进制:1100)
12 ^ 6(二进制:1100 ^ 110)= 10(二进制:1010)

DES 算法中解码只要处理好 F 函数的恢复即可,其他就是简单的查表置换即可

L' = R;
R' = L^(F(k[i], R))

最后一轮 F 函数形成密文是 L[16] 和 R[16]。

L[16] = R[15];
R[16] = L[15] ^ F(k[16], R[15])

我只要能从 L[16] 和 R[16] 得到 L[15] 和 R[15] 即可。由于 L[16] = R[15] 所以,只要获取 L[15] 即可。

再由于 R[16] = L[15] ^ F(k[16], R[15]),其中 k[16] 和 R[15] 都是已经知道的,所以

L[15] = L[15] ^ F(k[16], R[15]) ^ F(k[16], R[15]) = R[16] ^ F(k[16], R[15])

同理,根据 L[15] 和 R[15] 可以退出 L[14] 和 R[14],以此类推可以推出 L[1] 和 R[1]。

小结:解码过程其实就是把密钥逆序一下,然后就是跑 16 轮 F 函数。

关于3DES

三重数据加密算法(英语:Triple Data Encryption Algorithm,缩写为TDEA,Triple DEA),或称3DES(Triple DES),是一种对称密钥加密块密码,相当于是对每个数据块应用三次DES算法。由于计算机运算能力的增强,原版DES由于密钥长度过低容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。

注意:有3个独立密钥的3DES的密钥安全性为168位,但由于中途相遇攻击(知道明文和密文),它的有效安全性仅为112位。

算法实现

3DES使用“密钥包”,其包含3个DES密钥,K1,K2和K3,均为56位(除去奇偶校验位)。

密文 = Ek3(Dk2(Ek1(明文)))

而解密则为其反过程:

明文 = Dk3(Ek2(Dk1(密文)))

1、为什么是3DES,而不是2DES?

原因:中途相遇攻击(知道明文和密文),通过空间换时间的策略,安全度降为和DES一样。

具体做法:

第一步:枚举全部加密密钥对明文加密,生成有序集合S1,时间复杂度 O(2^56)

第二步:枚举全部解码密钥对密文解码,生成有序集合S2,时间复杂度 O(2^56)

第三步:通过双指针在有序集合S1和S2中找到相同的元素,时间复杂度 O(2^57)

于是总的时间复杂度就是 O(2^56) + O(2^56) + O(2^57) = O(2^58)

2、为什么是Ek3(Dk2(Ek1(明文))),而不是Ek3(Ek2(Ek1(明文)))?

原因:允许3DES用户通过重复密钥来解密由旧的单个DES用户加密的数据。

参考资料

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

推荐阅读更多精彩内容