加密算法
加密算法
可逆加密算法
对称加密
对称加密就是加密和解密都使用相同的密钥。
常见的对称加密算法有DES,AES
-
DES
是对称加密算法领域中的典型算法,其密钥默认长度为56位。
-
3DES
它使用3条56位的密钥对数据进行三次加密。是DES的一个更安全的变形。
-
AES
高级数据加密标准,能够有效抵御已知的针对DES算法的所有攻击,默认密钥长度为128位,还可以供选择192位,256位。这个位指的是bit。
对称加密的缺点就是密钥的管理困难,一旦密钥泄露,会造成严重后果。
应用:
- 加密用户的敏感信息,例如名字,电话,银行卡
由于对称加密需要传输密钥,即A生成的密钥需要传输给B,那么在茫茫不可信任的互联网,你又怎么将密钥传输给我呢?这是对称加密最大的问题。
非对称加密
常见的非对称加密算法有RSA、SM2等
- RSA密钥至少为500位长,一般推荐使用1024位。
非对称加密是使用了一对密钥,公钥和私钥,私钥不能泄密,非对称性体现在使用公钥加密的只能通过对应的私钥来解密。
非对称加密算法的密匙是通过一系列算法获取到的一长串随机数,通常随机数的长度越长,加密信息越安全。通过私钥经过一系列算法是可以推导出公钥的,也就是说,公钥是基于私钥而存在的。但是无法通过公钥反向推倒出私钥,这个过程的单向的。
非对称加密非常安全,但是比起对称加密,计算时间长。
非对称加密生成的私钥并不需要传输,所以可以将大段的信息进行对称加密,再将对称加密的密钥进行非对称加密(HTTPS)。
应用:
- HTTPS中的SSL/TLS协议或SSH协议,核心原理都是非对称加密
- 使用提供商的接口,提供商可以给一个公钥,我们使用这个公钥进行数据加密,提供商使用私钥对数据进行解密
ECC(Elliptic Curves Cryptography):椭圆曲线算法
ECC 与 RSA 相比,有以下的优点:
- 相同密钥长度下,安全性能更高,如160位ECC已经与1024位RSA、DSA有相同的安全强度
- 计算量小,处理速度快,在私钥的处理速度上(解密和签名),ECC远 比RSA、DSA快得多
- 存储空间占用小 ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多, 所以占用的存储空间小得多
- 带宽要求低使得ECC具有广泛得应用前景
在 ssh-keygen 中,ECC算法的相应参数是 -t ecdsa
不可逆加密算法
常见的不可逆加密算法有MD5,HMAC,SHA1、SHA-2算法,采用的是散列算法。
一头活蹦乱跳的牦牛被加工成一包包牛肉干,这个就是一次MD5操作。在加工过程中,N多身体部位有损失,故无法通过牛肉干复原出一头牦牛。
MD5计算,对原始消息(Message)做有损的压缩计算,无论消息(输入值)的长度字节是多少,是1亿字节、1个字节、还是0个字节,都会生成一个固定长度(128位/16字节)的消息摘要(输出值)。
加密后的md5值:
79054025255fb1a26e4bc422aef54eb4
值得一提的是,MD5、SHA-1已被我国王小云教授破解。
王小云多年从事密码理论及相关数学问题研究。她提出了密码哈希函数的碰撞攻击理论,即模差分比特分析法,破解了包括MD5、SHA-1在内的5个国际通用哈希函数算法。
但是准确的说是快速碰撞,依然不可能反向推出原始信息,王小云的工作还是成就显著的,但不意味着MD5就不安全了,想根据MD5哈希值对原始报文信息进行篡改目前还是不可能的。
应用:
- 密码存储
- 数据完整性校验
- 数字签名
加密方案
当我们的数据库和代码泄露了,黑客也无法获取原密码。
-
一阶段,采用MD5的算法对密码进行加密,本身MD5加密算法是非常安全的,但是随着彩虹表的出现,导致大量强度不够的密码能够被推算出来。
常见密码库+MD5=彩虹表
-
二阶段,那么可以采用加盐的方式,就是在用户密码后面加上很长的固定盐字符串,再计算md5,那反推出原始密码就变得非常困难了。
但是如果我们的代码也泄露,攻击者拿到了盐,依然可以算出一个彩虹表,对简单的密码实施破解。
-
三阶段,我使用了加盐的慢哈希。慢哈希是指执行这个哈希函数非常慢,这样暴力破解需要枚举遍历所有可能结果时,就需要花上非常非常长的时间。比如:bcrypt就是这样一个慢哈希函数。
bcrypt(SHA512(password)+salt+cost)通过调整 cost 参数,可以调整该函数慢到什么程度。假设让 bcrypt 计算一次需要0.5秒,遍历6位的简单密码,需要的时间为:
((26 * 2 + 10)^6) / 2秒,约 900 年。 -
四阶段,我们采用随机盐来解决固定盐的泄露问题,我们每次都使用伪随机数生成一个比较长的随机盐,那么彩虹表就失效了,我们假设我们使用了两个不同的固定盐,那么攻击者就需要根据这两个盐去生成两份彩虹表,三个固定盐就是三份彩虹表,每个用户随机生成一个盐,那么需要为每个用户制作一个彩虹表...
其他常用算法
Base64
Base64不是安全领域下的加解密算法,只是一个编码算法,通常用于把二进制数据编码为可写的字符形式的数据,特别适合在http,mime协议下的网络快速传输数据。采用Base64编码不仅比较简短,同时也具有不可读性。
加密算法在生产中的应用
AES应用
背景:
业务需要对手机号进行加密处理然后传输给业务方
References
评论 (0)
登录后即可发表评论
