DAY 7- 《区块密码1》DES(1)- 加密过程

そうですね。

今天来介绍过去被广泛使用,甚至被定为标准的区块加密演算法,
DES(Data Encryption Standard),资料加密标准。

DES

DES由IBM所提出,1976年被NBS(NIST的前身)制定为国家标准。
DES 使用的密钥长度为56位元,这个56位元的密钥可以推导出16把48位元的子密钥,
进行16回合重复的运算。
而加密区块的大小是64位元,也就是说如果你有128位元的资料,就得切成两半加密。

大纲

首先先来大概看一下我们会经过哪些过程,
我们有一个64位元的资料,将他用DES加密

第一关
他会先遇到
初始排列 IP(Initial Permutation),这是一个将资料打乱的过程。

接着这64位元的讯息会来到第二关。

第二关 是一连串的运算,会将输入的64位元分成左右两边,
右半边先原封不动的成为输出的左半边,
右半边再经过一个函数运算後和左半边进行XOR成为输出的右半边
这个函数里总共有4个步骤,

第二关会重复16遍。
最後来到第三关

第三关是名为最终排列 FP(Final Permutation)的打乱过程,
他是初始排列的逆运算,意思是说将如果中间没有经过第二关的话,原始资料就会原封不动的跑出来。

而我刚说了56位元的密钥会生成16个46位元的子密钥,就是用於第二关的每一轮。
接下来要细讲每一关的实际操作方式。

一、 初始排列 IP

IP是一个重新排列的过程,方式是查底下这张表。
这张表由左往右、由上往下读。
所以依序得到58、50、42、...、2、60、...
意思是输入的第58位是输出的第1位、输入的第50位是输出的第2位...
依序排列直到最後:输入的第7位是输出的第64位

这样就完成了初始排列。

二、左右分半运算

可以看到下图中IP下面的部分,
资料被分成左右两边,右半经过函数运算、和左边XOR後成为下一轮的左半
右半再原封不动成为下一轮的左半。
而中间的函数称为F-function。

F-function 有 4个步骤

1.扩张(Expansion)
右半边输入的32位元会经过扩张的过程变成48位元,
而扩张的方式如右图,
看法跟上面所讲的初始排列是相同的。

2.跟子密钥(k)做XOR
扩张完後的48位元和48位元的子密钥进行XOR。

3.S-Box 代换

XOR完之後,48位元的资料分成6位元一组,总共有8组。
每一组都经过指定的S-Box做代换,6位元经过代换後成为4位元。

查表方式是这样:假设输入是110001,
第一位和第六位合在一起(11)是十进位的3

中间四位(1000)是十进位的8
所以查第3列第8行得到5,再转换成2进位(0101)
这样就完成了。

注意到S-box总共有8个,不同位置的资料要使用不同的S-box做代换。
於是原先的48位元回到32位元。

4.排列(Permutation)

最後用一样的方式查表得到最终输出值。

以上的四个步骤是F-function的内容。

三、 最终排列 FP

前面提到,最终排列其实就是初始排列的逆运算,也就是下图中的(b)
经过同样的方式重新排列,得到密文


OK,我想今天够了。
明天再来看看我们要怎麽由56位元的密钥产生16个48位元的子密钥,
以及DES的安全性问题和替代方案。

图片来源:
https://www.geeksforgeeks.org/data-encryption-standard-des-set-1/
https://www.tutorialspoint.com/cryptography/data_encryption_standard.htm
http://www.umsl.edu/~siegelj/information_theory/projects/des.netau.net/Dataencryptionalgorithm.html
https://www.researchgate.net/figure/Data-Encryption-Standard-DES-Algorithm_fig4_321587376
https://captanu.wordpress.com/2015/04/05/des/
https://www.coursehero.com/tutors-problems/Computer-Science/19056208-Referring-to-the-lecture-notes-on-DES-there-are-one-Expansion-Permuta/
https://www.oreilly.com/library/view/computer-security-and/9780471947837/sec9.3.html
https://www.hebergementwebs.com/cryptography-tutorial/data-encryption-standard
https://sandilands.info/crypto/DataEncryptionStandard.html


<<:  Day 5 - 安全签章: 取得 SHA256 加密後的 Sign 值

>>:  Day 5 : HTML - 网页排版超强神器,CSS Flex到底是什麽?

【PHP Telegram Bot】Day05 - 程序语言的运作原理

众所皆知:「不会写程序的人都认为程序语言是写给电脑看的, 会写程序的人都知道程序语言是写给人看的。...

[Day24]程序菜鸟自学C++资料结构演算法 – 选择排序法(Selection Sort)和谢尔排序法(Shell Sort)

前言:今天要来介绍的两个排序法,是基础排序的最後两个,让我们来看看它们的特点吧! 选择排序法: 也是...

Day 25 -资料库应用小程序 创建资料库

从我们上一篇设计出的实体关系模型 ( Entity - Relationship Model, E-...

[DAY3] PHP语法小练习

废言 昨天我们讲了环境架设了,那今天我们来讲一下PHP的一些基本语法吧! 一开始的Hello,Wor...

[DAY 26] 分散式训练

前言 在上一章我们知道如何在一台机器上使用多张 GPU 来Training,这对我们 Train 大...