1. 支付安全
明文:加密前的消息叫“明文”(plain text) 密文:加密后的文本叫“密文”(cipher text) 密钥:只有掌握特殊“钥匙”的人,才能对加密的文本进行解密,这里的“钥匙”就叫做“密钥”(key) 按照密钥的使用方式,加密可以分为两大类:对称加密和非对称加密
1.1 对称加密和非对称加密
对称加密 特点:只使用一个密钥,密钥必须保密,常用的有 AES算法
优点:运算速度快 缺点:秘钥需要信息交换的双方共享,一旦被窃取,消息会被破解,无法做到安全的密钥交换 非对称加密 特点:使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,常用的有 RSA
优点:黑客获取公钥无法破解密文,解决了密钥交换的问题 缺点:运算速度非常慢
一般都是两个一起使用,如使用非对称加密先传输对称加密的密钥,这样就可以保证密钥被安全传递,后期的信息交换过程就可以安全得使用对称加密了。Https的底层协议就是这个原理。
1.2 身份认证
上面只能实现机密性,离安全还很远。
- 公钥加密,私钥解密的作用是加密信息
- 私钥加密,公钥解密的作用是身份认证
一般来说公钥加密之后,公钥都是公开的,通过私钥进行解密
而如果反过来,通过私钥加密,公钥解密,那就是身份认证,专属自已的唯一钥匙
1.3 数据的完整性(散列算法)
如何保证信息不被篡改,保证信息的完整性?我们使用摘要算法,也就是哈希函数。
过程:发送方把信息加密生成的摘要信息,放在文章后面。
接收方使用一样的加密算法加密源文,得到信息摘要,然后对比,就能判断是否被修改过。
这里有开发中遇到的问题:
1.hash算法如何保证结果长度最后都相同?
举个相似例子。
算法a,要求输出是10位。
现在有25位的内容用算法a处理,
首先在后面加5个0补成30位,再将三十位分成3个10位,这3个十位进行异或得到最终的输出(10位)
哈希函数使用了类似的原理,可以看源代码学习,或者看网上对于md5,sha加密的过程分析。
2.MD5为什么不安全
使用哈希口令时,还要注意防止彩虹表攻击。
什么是彩虹表呢?上面讲到了,如果只拿到MD5,从MD5反推明文口令,只能使用暴力穷举的方法。
然而黑客并不笨,暴力穷举会消耗大量的算力和时间。但是,如果有一个预先计算好的常用口令和它们的MD5的对照表。
即使用户使用了常用口令,我们也可以采取措施来抵御彩虹表攻击,方法是对每个口令额外添加随机数,这个方法称之为加盐(salt)
1.4 数字签名和数字证书
摘要算法只能保证数据的完整性,不能保证机密性。比如把源文改了,再次使用摘要算法,双方的摘要算法结果也是一样的。这样不就出问题了吗
想要两者兼具:数字签名。
数字签名:
将数据通过摘要算法之后还要再用私钥加密刚刚获取的摘要变成数字签名,放在信息的后面(这就是签名过程)
而获得数据的人,需要通过公钥进行解密以及通过摘要算法获取源文摘要,对比公钥解密的数据和摘要算法的结果是否一致,来验证数据的完整性(验证签名过程)
上面的公钥可以伪造
为此多了一个数字证书
这样就能完全防止对方篡改数据了。支付中的签名和验证签名就是这个原理。
数字签名:能验证身份且防止篡改。
数字证书:
数字证书解决“公钥的信任”问题,可以防止黑客伪造公钥。如A给B一个公钥说这是C的。然后A与B通话,这样B用的A的公钥能解密,但是却以为自己在和C通话
不能直接分发公钥,公钥的分发必须使用数字证书(内容包括公钥和公钥的持有者等等),数字证书由CA颁发
具体数字证书生成流程如下: 先对数字证书进行签名A用数字证书发送数据(证书本身也是信息所以也要签名),
B取到数据后,通过哈希算法也就是摘要算法进行确定完整性,再通过CA的公钥判定是否可以取出,取出之后就是A的公钥了。B再用取到的A公钥进行解密,以及摘要算法确定数据的完整性
这样A就不能伪造数字证书了,因为他想伪造必须向CA申请,提供真实的信息。
在科普一下https的数字证书:
![%%JH9NH@9K]E5@28@7}QM63.png](p1-juejin.byteimg.com/tos-cn-i-k3…?)