常用的加密算法,包括对称加密、非对称加密、和散列加密。由于对称加密接收方和发送方采用相同的秘钥且效率比较高,使用的比较广泛。但是在一对多的通信过程中分发秘钥的时候秘钥有泄漏的风险,所以引入了非对称加密。非对称加密接收方和发送方采用了不同的秘钥这样就能确保秘钥内容在发送的过程中不会被泄漏。很多时候我们加密不需要反向解密,只需获得内容的一个特征值,这时候就需要用到散列加密算法。
对称加密算法
所谓对称加密就是,信息的发送方和接收方采用相同的秘钥对内容进行加密和解密。流程如下图所示:
常用的加密算法有DES、IDEA、AES、和国密SM1和SM4
DES(数据加密标准,Data Encryption Standard)
DES应该是最早的密码学算法之一,由美国政府提出,秘钥长度为56位.目前暴力破解56位秘钥的时间已经能控制在24小时之内。
DES实际上是一个过时的密码学算法,目前已经不推荐使用了。关于DES,还有一点特别有意思。DES包含一个关键模块:S盒,其设计的原理一直没有公开。因此,很多人都相信,这个S盒中存在后门,只要美国政府需要,就能够解密任何DES密文。
AES(高级加密标准,Advanced Encryption Standard)
DES被破解后,美国推出的加密算法,提供了128位,192位、256位三种秘钥长度.通常情况下使用128位的秘钥就可以获得足够的加密强度,同时不影响性能。目前AES是国际上最认可的密码学算法。在算例没有突破性进展的前提下,AES在可预见的未来都是最安全的对称加密算法。
IDEA(国际数据加密算法,International Data Encryption Algorithm)
IDEA是瑞士研究人员设计的一种加密算法,秘钥长度128位,相比于其它的对称加密算法,IDEA的优势在于没有专利的限制。DES和AES算法受美国政府的控制。
国密SM1(SM1 Cryptographic Agorithm)和SM4(SM4 Cyptographic Algorithm)
中国政府提出了一系列加密算法。其中,国密算法SM1和SM4都属于对称加密的范畴。SM1算法不公开,属于国家机密,只能通过相关安全产品进行使用。
SM4属于国家标准,算法公开,可自行实现使用。
国密算法受国家的支持,在某些涉及国家安全的应用场景必须使用国密算法。
对于大部分公司来说,选取AES128进行加解密运算,就能获得较高的安全性和性能。如果是金融或政府行业,在涉及国家层面的对抗上,有一定的合规需求,则需要应用国密算法。
非对称加密算法
使用对称加密的时候,在一对多的通信场景下,为了防止秘钥的泄漏,需要引入非对称加密。非对称加密代表加密和解密使用不同的密钥。具体的加解密过程就是,发送方使用公钥对信息进行加密,接收方收到密文后,使用私钥进行解密。非对称加密主要解决了秘钥分发的问题。
除了加密功能外,大部分的非对称算法还提供签名的功能。这也就是说,我们可以使用私钥加密,公钥解密。一旦接收方通过公钥成功解密,我们就能够证明发送方拥有对应的私钥,也就能证实发送方的身份,也就是说,私钥加密就是我们说的签名。
常用的非对称加密算法有:RSA、ECC、和国密SM2
RSA算法
基于质数数学难题, RSA是比较静定的加密算法,主要优势是性能比较快,但要想获得比较高的加密强度需要很长的秘钥。
ECC算法(椭圆加密算法,Elliptic Curve Cryptography)
基于椭圆曲线数学难题, ECC是目前国际上加密强度最高的非对称加密算法
国密SM2(SM2 Cyptographic Algorithm)
国密算法SM2也是基于椭圆曲线问题设计的,属于国家标准,算法公开,加密强度和国际标准的ECC相当。而国密的优势在于国家的支持和认可。
如果遇到需要使用非对称加密的场景(比如多对一认证,推荐使用ECC算法),在涉及国家安全和政府业务的时候推荐使用国密SM2算法.
散列加密算法
散列算法应该是最常见到的密码学算法了。作为密码学的算法,散列算法除了提供唯一的id。由于其不可逆的特性,我们可以避免信息泄漏。当用户注册,提交账号密码时,作为一个安全的应用,是绝对不能够存储明文密码的。可以存储密码对应的散列值。但目前很多加密算法可以通过彩虹表来匹配对应的哈希值,从而暴力查到到对应的信息明文。
经典的散列算法包括MD5、SHA、国密SM3。
MD5(消息摘要算法,Message-Digest Algorithms 5)
MD5可以用来生成一个128位的消息摘要,它是目前应用比较普遍的散列算法。虽然,因为算法的缺陷,它的唯一性已经被破解了,但是大部分场景下,这并不会构成安全问题
SHA(安全散列算法,Secure Hash Algorithm)
SHA是美国开发的政府标准散列算法,分为SHA-1和SHA-2两个版本,SHA-2还有很多细分版本。和MD5相同,虽然SHA的唯一性也被破解了,但是这也不会构成大的安全问题。目前,SHA-256普遍被认为是相对安全的散列算法,推荐使用。
国密SM3(SM3 Cryptographic Agorithm)
国密算法SM3是一种散列算法。其属于国家标准,算法公开,加密强度和国际标准的SHA-256相当。
使用散列算法的时候,一定要注意加“盐”。所谓“盐”,就是一串随机的字符,是可以公开的。将用户的密码“盐”进行拼接后,再进行散列计算,这样,即使两个用户设置了相同的密码,也会拥有不同的散列值。使用盐可以对抗彩虹表暴力破解, “盐”值越长,安全性就越高。
总结
对称加密具备较高的安全性和性能,要优先考虑。在一对多的场景中(如多人登录服务器),存在密钥分发难题的时候,我们要使用非对称加密来进行秘钥的分发;不需要可逆计算的时候(如存储密码),我们就使用散列算法加盐进行处理。
对称加密用AES-CTR、非对称加密用ECC、散列算法用SHA256加盐。这些算法就能够满足大部分的使用场景了,并且在未来很长一段时间内,都可以保持一个较高的安全强度。
在涉及国家安全的时候和涉及政府业务的时候使用,使用国密算法,对称加密采用国密SM1和SM4算法,非对称加密使用国密SM2算法,求散列值的时候使用国密SM3算法。