Cryptography Review


初次接触密码学是在大二的<<现代密码学>>课堂上,彼时仅对理论基础进行了学习,后来参加CTF比赛,为了解答其中 Crypto 模块,将课堂学到的知识运用了起来,但总的来说研究并不深,加之近段时间没有再碰过了,故此有了写此文的想法,一是为了自己复习,二是为了此刻正在看文章的你提供一点参考。

会议和期刊

密码学三大顶会

编号 会议简称 会议名称 出版社 会议网址
1 Crypto International Cryptology Conference Springer https://iacr.org/meetings/crypto/
2 Eurocrypt European Cryptology Conference Springer https://iacr.org/meetings/eurocrypt/
3 Asiacrypt Annual International Conferenceon the Theory and Application of Cryptology and Information Security Springer https://iacr.org/meetings/asiacrypt/

信息安全四大顶会

编号 会议简称 会议名称 出版社 会议网址
1 CCS ACM Conference on Computer and Communications Security ACM http://dblp.uni-trier.de/db/conf/ccs/
2 S&P IEEE Symposium on Security and Phivacy IEEE http://dblp.uni-trier.de/db/conf/sp/
3 Usenix Security Usenix Security Symposium USENIX Association http://dblp.uni-trier.de/db/conf/uss/
4 NDSS ISOC Network and Disthibuted System SecuritySyumposium ISOC https://www.ndss-symposium.org/

计算机类三大权威刊物

编号 名称 主办单位 网址
1 软件学报 中国计算机学会、中国科学院软件研究所 http://www.jos.org.cn
2 计算机学报 中国计算机学会、中国科学院计算技术研究所 http://cjc.ict.ac.cn/
3 计算机研究与发展 中国计算机学会、中国科学院计算技术研究所 http://crad.ict.ac.cn/

中国密码学会CACR推荐

地址:https://www.cacrnet.org.cn/site/content/96.html

期刊

会议

中国计算机学会CCF推荐

地址:https://www.ccf.org.cn/Academic_Evaluation/NIS/

期刊

会议

国密

国产密码算法(国密算法)是指国家密码局认定的国产商用密码算法,在金融领域目前主要使用公开的SM2、SM3、SM4三类算法,分别是非对称算法、哈希算法和对称算法

SM2算法:SM2椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,包括SM2-1椭圆曲线数字签名算法,SM2-2椭圆曲线密钥交换协议,SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。SM2算法与RSA算法不同的是,SM2算法是基于椭圆曲线上点群离散对数难题,相对于RSA算法,256位的SM2密码强度已经比2048位的RSA密码强度要高。

SM3算法:SM3杂凑算法是我国自主设计的密码杂凑算法,适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。为了保证杂凑算法的安全性,其产生的杂凑值的长度不应太短,例如MD5输出128比特杂凑值,输出长度太短,影响其安全性SHA-1算法的输出长度为160比特,SM3算法的输出长度为256比特,因此SM3算法的安全性要高于MD5算法和SHA-1算法。

SM4算法:SM4分组密码算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。要保证一个对称密码算法的安全性的基本条件是其具备足够的密钥长度,SM4算法与AES算法具有相同的密钥长度分组长度128比特,因此在安全性上高于3DES算法。

SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。

SM2公钥加密算法国密公钥加密标准之一,属于非对称加密算法,使用公钥加密,私钥解密,在安全性和运算速度方面要优于RSA算法。基于ECC椭圆曲线算法的SM2算法,则普遍采用256位密钥长度,它的单位安全强度相对较高,破译或求解难度基本上是指数级的。因此,SM2算法可以用较少的计算能力提供比RSA算法更高的安全强度,而所需的密钥长度却远比RSA算法低。

  • SM2公钥加密适用于加密长度较短的数据,如会话密钥和消息报文。

  • SM2公钥加密不仅对数据加密,还提供防篡改的特性,即被篡改的或伪造的密文可以在解密的过程中被检查发现,因此通过SM2公钥加密的消息无需格外的校验机制。

  • 消息经过SM2公钥加密后长度会增加不到100字节的长度,加密方在准备缓冲区时需要加以留意。

SM3属于不可逆加密算法,类似于md5,常用于签名。

SM4属于对称加密算法,可用于替代DES/AES等国际算法, SM4算法与AES算法具有相同的密钥长度和分组长度,都是128位。

其中SM1、SM4、SM7、祖冲之密码(ZUC)是对称算法;SM2、SM9是非对称算法;SM3是哈希算法。

国密SSL证书采用上述国密SM签名算法,安全自主可控,并且基于ECC算法,加密强度更高、签名速度更快,并且可兼容所有国产操作系统。

Diffie-Hellman密钥交换

在基于对称加密进行安全通信的过程中,通信双方需要持有一个共享的密钥。只有这样,由任何一方加密的信息才能由另一方使用相同的密钥解密。但是在能够安全的通信之前,通信双方应该如何约定一个共享的密钥呢?这就是安全中的经典问题:密钥配送问题。

  1. 客户端和服务端协商出将要使用的大素数P及其原根G。

  2. 客户端生成一个秘密数字a作为私钥,然后对a进行幂模运算得到公钥A(G^a mod P)。

  3. 客户端将公钥A发送给服务端。

  4. 服务端生成一个秘密数字b作为私钥,然后对b进行幂模运算得到公钥B(G^b mod P)。

  5. 服务端将公钥B发送给客户端

  6. 客户端已知G、P、A、B、a,然后计算密钥S1 (G^ba mod P)。

  7. 服务端已知G、P、A、B、b,然后计算密钥S2(G^ab mod P)。

自此,客户端和服务端共享密钥 S = S1 = S2。

从DHKE协议的通信过程可见,只有G、P、A、B会在网络中进行传输,而a、b是不会通过网络进行传输的。同时,因为离散对数的难解,当G、P选的足够大时,通过A、B分别推算a、b是极其困难的。进而,破解出最终的对称密钥S也是极其困难的。

但是,由于DHKE本身不提供通信双方的身份验证。因此,DHKE容易受到中间人攻击(man-in-the-middle attack)。即,如果黑客Mallory以服务端的身份和客户端协商密钥,同时又以客户端的身份和服务端协商密钥。那么,黑客Mallory将会分别获得和客户端以及和服务端通信的密钥。通过这样的方式,Mallory就可以用中间人的身份肆意的修改被共享密钥保护的信息了。

DES

DES 的英文全称是 Data Encryption Standard,意思是数据加密标准,DES是一个分组加密算法,加密和解密用的是同一个算法。

  • 典型的 DES 以 64 位为分组对数据加密

  • 密钥长 64 位,但实际上只有 56 位参与 DES 运算

    • 第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1
  • 分组后的明文组和 56 位的密钥按位替代或交换的方法形成密文组

DES 算法的步骤,包括 IP置换密钥置换E扩展S盒代替P盒置换末置换

IP置换

IP置换:将输入的 64 位数据块按位重新组合,并把输出分为 L0、R0 两部分,每部分长度为 32 位。

58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7

表中的数字代表新数据中此位置的数据在原数据中的位置,即原数据块的第58位放到新数据的第1位,第50位放到第2位,……依此类推,第7位放到第64位。置换后的数据分为 L0 和 R0 两部分,L0 为新数据的左32位,R0为新数据的右32位。

注意:位数是从左边开始数的,最左边的位为1,最右边的位为 64。

例子🌰

密钥置换

不考虑每个字节的第8位,DES的密钥由64位减至56位,每个字节的第8位作为奇偶校验位。产生的56位密钥由下表生成(注意表中没有8,16,24,32,40,48,56,64这8位):

57 49 41 33 25 17 9 1 58 50 42 34 26 18
10 2 59 51 43 35 27 19 11 3 60 52 44 36
63 55 47 39 31 23 15 7 62 54 46 38 30 22
14 6 61 53 45 37 29 21 13 5 28 20 12 4

在DES的每一轮中,从56位密钥产生出不同的48位子密钥,确定这些子密钥的方式如下:

  1).将56位的密钥分成两部分,每部分28位。

  2).根据轮数,这两部分分别循环左移1位或2位。每轮移动的位数如下表:

轮数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
位数 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1

移动后,从56位中选出48位。这个过程中,既置换了每位的顺序,又选择了子密钥,因此称为压缩置换。压缩置换规则如下表(注意表中没有9,18,22,25,35,38,43,54这8位):

14 17 11 24 1 5 3 28 15 6 21 10
23 19 12 4 26 8 16 7 27 20 13 2
41 52 31 37 47 55 30 40 51 45 33 48
44 49 39 56 34 53 46 42 50 36 29 32

置换方法同上,此处省略。

E扩展

E扩展置换: 将 IP 置换后获得的右半部分 R0(32位)扩展为 48位 (6位×8组),达到与密钥相同长度的数据以进行异或运算;提供更长的结果,在后续的替代运算中可以进行压缩。

32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 1

表中的数字代表位,两列橙色数据是扩展的数据,可以看出,扩展的数据是从相邻两组分别取靠近的一位,4位变为6位。靠近32位的位为1,靠近1位的位为32。表中第二行的4取自上组中的末位,9取自下组中的首位。

扩展置换之后,右半部分数据R0变为 48 位,与密钥置换得到的轮密钥进行异或。

例子🌰

S盒

压缩后的密钥与扩展分组异或以后得到48位的数据,将这个数据送人S盒,进行替代运算。替代由8个不同的S盒完成,每个S盒有6位输入4位输出。48位输入分为8个6位的分组,一个分组对应一个S盒,对应的S盒对各组进行代替操作。

S盒1

14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13

S盒2

15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9

S盒3

10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12

S盒4

7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 19
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14

S盒5

2 12 4 1 7 10 11 6 5 8 3 15 13 0 14 9
14 11 2 12 4 7 13 1 5 0 15 13 3 9 8 6
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3

S盒6

12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13

S盒7

4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12

S盒8

13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11

P盒

S 盒输出的 32 位再经过 P 盒进行置换。

16 7 20 21 29 12 28 17
1 15 23 26 5 18 31 10
2 8 24 14 32 27 3 9
19 13 30 6 22 11 4 25

表中的数字代表原数据中此位置的数据在新数据中的位置,即原数据块的第16位放到新数据的第1位,第7位放到第2位,……依此类推,第25位放到第32位。

IP-1置换

IP-1 置换是 IP 置换的逆过程,DES 最后一轮后,左、右两半部分并未进行交换,而是两部分合并形成一个分组做为末置换的输入。末置换规则如下表:

40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25

参考

原创]密码学基础:DES加密算法-密码应用-看雪论坛-安全社区|安全招聘|bbs.pediy.com

DES加密算法|密码学|信息安全 - 哔哩哔哩 (bilibili.com)

DES加密算法|密码学|信息安全_哔哩哔哩_bilibili

DES算法详解 - songoo - 博客园 (cnblogs.com)

DES加密算法解析与实现 - luogi - 博客园 (cnblogs.com)

赞助💰

如果你觉得对你有帮助,你可以请我喝一杯冰可乐!嘻嘻🤭

支付宝支付 微信支付

文章作者: 简简
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 简简 !
评论
填上邮箱会收到评论回复提醒哦!!!
 上一篇
Python:PyQt学习 Python:PyQt学习
PyQt是一个用于创建GUI应用程序的跨平台工具包,它将Python与Qt库融为一体。PyQt允许使用Python语言调用Qt库中的API。这样做的最大好处就是在保留了Qt高运行效率的同时,大大提高了开发效率。 基础第一个 PyQt 程
2021-07-23
下一篇 
Qt 学习记录 Qt 学习记录
Qt是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。 Qt 基础文件 xxx.pro .pro就是工程文件(project),
2021-06-28
  目录