《安全攻防技能》-密码学基础
来源极客时间《安全攻防技能30讲》
以下是自己总结笔记,仅用于学习思考!
密码学是认证、授权、审计的基础技术支撑。失去了密码学的保护,任何认证、授权、审计机制都是“可笑”的鸡肋。
以下笔记总结经典的密码学算法:对称加密算法、非对称加密算法和散列算法。
一、对称加密算法
对称加密,代表加密和解密使用的是同一个**。
举例子解释:如果我想给你发一段消息,又不想被其他人知道。那么我作为发送方,会使用加密算法和**,生成消息对应的密文;而你作为接收方,想要阅读消息,就需要使用解密算法和一个同样的**,来获得明文。
经典对称加密算法有 DES、IDEA、AES、国密 SM1 和 SM4。
1、DES(数据加密标准)
DES 应该是最早的现代密码学算法之一。它由美国政府提出,**长度为 56 位。目前,它暴力** 56 位密码的时间,已经能控制在 24 小时内了。(可能存在后面,一般不使用,且过时了)
2、 IDEA(国际数据加密算法)
DEA 由瑞士研究人员设计,**长度为 128 位。对比于其他的密码学算法,IDEA 的优势在于没有专利的限制。
3、AES(高级加密标准)
在 DES 被**后,美国政府推出了 AES 算法,提供了 128 位、192 位和 256 位三种**长度。通常情况下,我们会使用 128 位的**,来获得足够的加密强度,同时保证性能不受影响。目前,AES 是国际上最认可的密码学算法。在算力没有突破性进展的前提下,AES 在可预期的未来都是安全的。
4、国密SM1和SM2
中国政府提出的一系列加密算法。其中,国密算法 SM1 和 SM4 都属于对称加密的范畴。SM1 算法不公开,属于国家机密,只能通过相关安全产品进行使用。而SM4 属于国家标准,算法公开,可自行实现使用。
总结
应用
在加密通信中(如 HTTPS、v*n、SSH 等),通信双方会协商出一个加密算法和**,对传输的数据进行加密,从而防止第三方窃取。在类似数据库加密这种存储加密技术中,通信双方也是将存储空间中的数据进行加密,这样即使硬盘被物理窃取,也不会导致信息丢失。
在公司内部,为了避免用户的 Cookie 和隐私信息发生泄漏,也需要对它们进行加密存储。
二、非对称加密算法
非对称加密代表加密和解密使用不同的**。具体的加解密过程
就是,发送方使用公钥对信息进行加密,接收方收到密文后,使用私钥进行解密。具体我也画了一张图,你可以和上面的对称加密算法的图一起对照着看一下。可以看到,非对称加密和对称加密算法的最大区别就是,加密和解密使用的**是不同的。
非对称**解决了**分发的难题,提供签名的功能。
我们可以使用私钥加密,公钥解密。一旦接收方通过公钥成功解密,我们就能够证明发送方拥有对应的私钥,也就能证实发送方的身份,也就是说,私钥加密就是我们说的签名。
经典的非对称加密算法包括:RSA、ECC 和国密 SM2。
1、RSA(RSA 加密算法)
RSA 的数学难题是:两个大质数 p、q 相乘的结果 n 很容易计算,但是根据 n 去做质因数分解得到 p、q,则需要很大的计算量。RSA 是比较经典的非对称加密算法,它的主要优势就是性能比较快,但想获得较高的加密强度,需要使用很长的**。
2、ECC(椭圆加密算法)
ECC 是基于椭圆曲线的一个数学难题设计的。目前学术界普遍认为,椭圆曲线的难度高于大质数难题,160 位**的 ECC 加密强度,相当于 1088 位**的 RSA。因此,ECC 是目前国际上加密强度最高的非对称加密算法。
3、国密SM2
国密算法 SM2 也是基于椭圆曲线问题设计的,属于国家标准,算法公开,加密强度和国际标准的 ECC 相当。而国密的优势在于国家的支持和认可。
总结
应用
现在大部分的认证和签名场景,其实使用的都是非对称加密算法。比如,在SSH 登录、Git 上传等场景中,我们都可以将自己的公钥上传到服务端,然后由客户端保存私钥。
三、散列算法
散列算法应该是最常见到的密码学算法了。大量的应用都在使用 MD5 或者 SHA 算法计算一个唯一的id。利用它可以对任意长度的输入,计算出一个定长的 id。具有不可逆性能。
在密码学上,我们对散列算法的要求还有:鲁棒性(同样的消息生成同样的摘要)、唯一性(不存在两个不同的消息,能生成同样的摘要)。
经典的散列算法包括 MD5、SHA、国密 SM3。
1、MD5(消息摘要算法)
MD5 可以用来生成一个 128 位的消息摘要,它是目前应用比较普遍的散列算法,因为算法的缺陷,它的唯一性已经被**了,但是大部分场景下,这并不会构成安全问题。
2、SHA(安全散列算法)
SHA 是美国开发的政府标准散列算法,分为 SHA-1 和 SHA-2 两个版本,SHA-256 普遍被认为是相对安全的散列算法。
3、国密SM3
国密算法 SM3 是一种散列算法。其属于国家标准,算法公开,加密强度和国际标准的SHA-256 相当。和国密 SM2 一样,它的优势也在于国家的支持和认可。
总结
注意,我们在使用散列算法的时候,有一点需要注意一下,一定要注意加“盐”。所谓“盐”,就是一串随机的字符,是可以公开的。将用户的密码“盐”进行拼接后,再进行散列计算,这样,即使两个用户设置了相同的密码,也会拥有不同的散列值。同时,黑客往往会提前计算一个彩虹表来提升暴力**散列值的效率,而我们能够通过加“盐”进行对抗。“盐”值越长,安全性就越高。
四、总结
对称加密具备较高的安全性和性能,要优先考虑。在一对多的场景中(如多人登录服务器),存在**分发难题的时候,我们要使用非对称加密;不需要可逆计算的时候(如存储密码),我们就使用散列算法。