密码学基础

1. 对称加密算法

对称加密,代表加密和解密使用同一个密钥。如下图所示:
在这里插入图片描述
具体过程:
如果我想给你发一段消息,又不想被其他人知道。那么我作为发送方,会使用加密算法和密钥,生成消息对应的密文;而你作为接收方,想要阅读消息,就需要使用解密算法和一个同样的密钥,来获得明文。

我们常见的经典对称加密算法有 DES、IDEA、AES、国密 SM1 和 SM4

1.1 DES(数据加密标准,Data Encryption Standard)

DES 应该是最早的现代密码学算法之一。它由美国政府提出,密钥长度为 56 位。目前,它暴力破解 56 位密码的时间,已经能控制在 24 小时内了。
DES 实际上是一个过时的密码学算法,目前已经不推荐使用了。关于 DES,还有一点特别有意思。DES 包含一个关键模块:S 盒,其设计的原理一直没有公开。因此,很多人都相信,这个 S 盒中存在后门,只要美国政府需要,就能够解密任何 DES 密文。

1.2 IDEA(国际数据加密算法,International Data Encryption Algorithm)

IDEA 由瑞士研究人员设计,密钥长度为 128 位。对比于其他的密码学算法,IDEA 的优势在于没有专利的限制。相比于 DES 和 AES 的使用受到美国政府的控制,IDEA 的设计人员并没有对其设置太多的限制,这让 IDEA 在全世界范围内得到了广泛地使用和研究。

1.3 AES(高级加密标准,Advanced Encryption Standard)

在 DES 被破解后,美国政府推出了 AES 算法,提供了 128 位、192 位和 256 位三种密钥长度。通常情况下,我们会使用 128 位的密钥,来获得足够的加密强度,同时保证性能不受影响。目前,AES 是国际上最认可的密码学算法。在算力没有突破性进展的前提下,AES 在可预期的未来都是安全的。

1.4国密 SM1(SM1 Cryptographic Algorithm)和 SM4(SM4 Cryptographic Algorithm)

我们知道,密码学作为安全的基础学科,如果全部依靠国外的技术,对于国家安全可能产生不利影响。因此,中国政府提出了一系列加密算法。其中,国密算法 SM1 和 SM4 都属于对称加密的范畴。SM1 算法不公开,属于国家机密,只能通过相关安全产品进行使用。而SM4 属于国家标准,算法公开,可自行实现使用。国密算法的优点显而易见:受到国家的支持和认可。

在这里插入图片描述
大部分情况下选取 AES128 进行加解密运算,就能获得较高的安全性和性能。如果是金融或政府行业,在涉及国家层面的对抗上,有一定的合规需求,则需要应用国密算法。
另外,在选取加密算法的时候,存在不同的分组计算模式:ECB/CBC/CFB/OFB/CTR。这些模式的具体细节不是我们学习的重点,在这里就不展开了。你需要知道的是:选取 CBC和 CTR 这两种推荐使用的模式就可以满足大部分需求了,它们在性能和安全性上都有较好的保证。

2. 非对称加密算法

非对称加密代表加密和解密使用不同的密钥。具体的加解密过程就是,发送方使用公钥对信息进行加密,接收方收到密文后,使用私钥进行解密。具体如下图,可以和上面的对称加密算法的图一起对照着看一下。可以看到,非对称加密和对称加密算法的最大区别就是,加密和解密使用的密钥是不同的。
在这里插入图片描述
所有的非对称加密算法,都是基于各种数学难题来设计的,这些数学难题的特点是:正向计算很容易,反向推倒则无解。经典的非对称加密算法包括:RSA、ECC 和国密 SM2。接下来,我们一个个来看

2.1 RSA 加密算法,RSA Algorithm

RSA 的数学难题是:两个大质数 p、q 相乘的结果 n 很容易计算,但是根据 n 去做质因数分解得到 p、q,则需要很大的计算量。RSA 是比较经典的非对称加密算法,它的主要优势就是性能比较快,但想获得较高的加密强度,需要使用很长的密钥。

2.2 椭圆加密算法,Elliptic Curve Cryptography

ECC 是基于椭圆曲线的一个数学难题设计的。目前学术界普遍认为,椭圆曲线的难度高于大质数难题,160 位密钥的 ECC 加密强度,相当于 1088 位密钥的 RSA。因此,ECC 是目前国际上加密强度最高的非对称加密算法。

2.3 国密 SM2(SM2 Cryptographic Algorithm)

国密算法 SM2 也是基于椭圆曲线问题设计的,属于国家标准,算法公开,加密强度和国际标准的 ECC 相当。而国密的优势在于国家的支持和认可。
在这里插入图片描述
我们前面说了,对比于对称加密算法,非对称加密算法最大的优势就是解决密钥分发的问题。因此,现在大部分的认证和签名场景,其实使用的都是非对称加密算法。比如,在SSH 登录、Git 上传等场景中,我们都可以将自己的公钥上传到服务端,然后由客户端保存私钥。

3.散列算法

散列算法应该是最常见到的密码学算法了。大量的应用都在使用 MD5 或者 SHA 算法计算一个唯一的 id。比如 Git 中的提交记录、文件的完整性校验、各种语言中字典或者 Map 的实现等等。很多场景下,我们使用散列算法并不是为了满足什么加密需求,而是利用它可以对任意长度的输入,计算出一个定长的 id。

作为密码学的算法,散列算法除了提供唯一的 id,其更大的利用价值还在于它的不可逆性。当用户注册,提交账号密码时,作为一个安全的应用,是绝对不能够存储明文密码的。因此,我们对用户的密码通过散列算法进行计算,存储最终的散列值。

在后续登录的过程中,我们如果计算出的用户提交的密码的散列值和你存储的散列值一致,就可以通过验证了。这样一来,任何人(即使是内部员工)都不知道用户真实的密码是什么,而用户也能够完成密码的校验。

除了刚才说的不可逆性,在密码学上,我们对散列算法的要求还有:鲁棒性(同样的消息生成同样的摘要)、唯一性(不存在两个不同的消息,能生成同样的摘要)。

经典的散列算法包括 MD5、SHA、国密 SM3。

3.1 MD5(消息摘要算法,Message-Digest Algorithm 5)

MD5 可以用来生成一个 128 位的消息摘要,它是目前应用比较普遍的散列算法,具体的应用场景你可以自行参阅。虽然,因为算法的缺陷,它的唯一性已经被破解了,但是大部分场景下,这并不会构成安全问题。但是,如果不是长度受限(32 个字符),不推荐继续使用 MD5 。

3.2 SHA(安全散列算法,Secure Hash Algorithm)

SHA 是美国开发的政府标准散列算法,分为 SHA-1 和 SHA-2 两个版本,SHA-2 细分的版本我们就不介绍了。和 MD5 相同,虽然 SHA 的唯一性也被破解了,但是这也不会构成大的安全问题。目前,SHA-256 普遍被认为是相对安全的散列算法,也是我推荐你用的散列算法。

3.3 国密 SM3(SM3 Cryptographic Algorithm)

国密算法SM3 是一种散列算法。其属于国家标准,算法公开,加密强度和国际标准的SHA-256 相当。和国密 SM2 一样,它的优势也在于国家的支持和认可。

在这里插入图片描述
另外,我们在使用散列算法的时候,有一点需要注意一下,一定要注意加“盐”。所谓“盐”,就是一串随机的字符,是可以公开的。将用户的密码“盐”进行拼接后,再进行散列计算,这样,即使两个用户设置了相同的密码,也会拥有不同的散列值。同时,黑客往往会提前计算一个彩虹表来提升暴力破解散列值的效率,而我们能够通过加“盐”进行对抗。“盐”值越长,安全性就越高。

4.总结

密码学是一门深奥的学科,在使用的时候,你要记住下面这些内容:对称加密具备较高的安全性和性能,要优先考虑。在一对多的场景中(如多人登录服务器),存在密钥分发难题的时候,我们要使用非对称加密;不需要可逆计算的时候(如存储密码),我们就使用散列算法。在具体算法的选取上,你只需要记住:对称加密用 AES-CTR、非对称加密用 ECC、散列算法用 SHA256 加盐。这些算法就能够满足大部分的使用场景了,并且在未来很长一段时间内,都可以保持一个较高的安全强度

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值