1、信息安全的基础 - 机密性
- 明文:加密前的消息叫“明文”(plain text)
- 密文:加密后的文本叫“密文”(cipher text)
- 密钥:只有掌握特殊“钥匙”的人,才能对加密的文本进行解密,这里的“钥匙”就叫做”密钥”(key)
“密钥”就是一个字符串,度量单位是“位”(bit),比如,密钥长度是 128,就是 16 字节的二进制串
- 加密:实现机密性最常用的手段是“加密”(encrypt)
按照密钥的使用方式,加密可以分为两大类:对称加密和非对称加密。
- 解密:使用密钥还原明文的过程叫“解密”(decrypt)
- 加密算法:加密解密的操作过程就是“加密算法”
2、对称加密和非对称加密
2.1 对称加密
- 特点:只使用一个密钥,密钥必须保密,常用的有 AES算法
- 优点:运算速度快
- 缺点:秘钥需要信息交换的双方共享,一旦被窃取,消息会被破解,无法做到安全的密钥交换
对称加密即使被人拦截到信息,对方不知道密钥的情况下拦截的信息只能时密文,很好的保证了信息传递的机密性。
常用的对称加密算法:
- AES加密算法:密钥长度128、192或256,安全强度很高,性能好。
加密分组模式:将明文分组加密、微信支付中使用AEAD_AES_256_GCM
2.2 非对称加密
特点:使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,常用的有 RSA
- 优点:黑客获取公钥无法破解密文,解决了密钥交换的问题
- 缺点:运算速度非常慢
当明文使用公钥加密后只能用私钥来解密,反过来,私钥加密后也只能用公钥来解密。
RSA加密算法:最著名的非对称加密算法。
对称加密和非对称加密的优缺点:
对称加密的优点是传输效率快,不过对密钥安全性要求比较高。如果你的密钥作为双方共享,黑客截取到密钥,那么消息就会被破解,无法做到安全的密钥交换。而非对称加密就不一样,非对称的加密的公钥是公开的,私钥是保密的。即使你的公钥被黑客窃取,当对方不知道你的私钥情况下也无法破解你的信息。这也说明了非对称加密会比对称加密复杂,所以,它的传输运输效率就会慢。
所以,一般都将对称加密和非对称加密一起结合使用。首先,先用非对称加密算法将对称加密的密钥发送给对方,然后,对方通过非对称加密的私钥对密文进行解密。从而,解决了,加密算法传输密钥的不安全性。后续,就使用加密算法进行数据的加密解密的传输。这一方式也大大的提高了运算效率。微信支付安全也是采用对称加密和非对称加密的方式。
3、身份认证
假设Bob有公钥和私钥,Bob将公钥分发给Pat、Doug和Suan。任何人都可以得到Bob的公钥,但是只有Boy自己保存私钥。
当Suan想给Bob写信的时候,Suan就会使用Bob提供的公钥进行加密。而Bob收到Suan发过来的密文就会通过自己手中的私钥进行解密,然后,就可以看到明文了。
当Bob想给Suan写信的时候,Bob就会使用Suan提供的公钥对明文进行加密,当Suan收到Bob发过来的密文时,就会使用自己的私钥进行解密,从而查看明文内容。
当Bob使用密钥加密密文的时候,所有拿着Bob公钥的人都可以进行密文的解密,所以说公钥解密其实并不是为了加密。
当时使用私钥加密,公钥解密来说。公钥解密的作用其实就是身份认证。
- 公钥加密,私钥解密的作用是加密信息
-
4、摘要算法(Digest Algorithm)
摘要算法就是我们常说的散列函数、哈希函数(Hash Function),它能够把任意长度的数据“压缩”成
固定长度、而且独一无二的“摘要”字符串,就好像是给这段数据生成了一个数字“指纹”。
作用:保证信息的完整性
特性: 不可逆:只有算法,没有秘钥,只能加密,不能解密
- 难题友好性:想要破解,只能暴力枚举
- 发散性:只要对原文进行一点点改动,摘要就会发生剧烈变化
- 抗碰撞性:原文不同,计算后的摘要也要不同
常见摘要算法:
MD5、SHA1、SHA2(SHA224、SHA256、SHA384)
假设Bob给Pat写一封信,Bob首先通过hash算法将原文生成MessageDigest摘要,然后将这个摘要和明文一起打包发送给Pat。Pat接收到这封信的时候,首先,通过跟Bob生成摘要的方式,生成新的一份摘要。然后,将这份摘要和这封信传过来的摘要进行配对,如果一直那就说明这封信没有被篡改过。从而,说明了摘要算法保证信息的完整性,没有被篡改。
摘要算法也有弊端,当Bob给Pat写一封信的时候,这封信被黑客窃取了。黑客也通过摘要算法生成一份新的摘要,发给Pat。此时,Pat不知道这封信有没有被篡改。说明了摘要算法不具有机密性,所以需要引入密钥来确保数据的机密性。
5、数字签名
数字签名是使用私钥对摘要加密生成签名,需要由公钥将签名解密后进行验证,实现身份认证和不可否认
签名和验证签名的流程:
假设Bob给Pat发送一封信,Bob首先通过hash算法生成摘要,然后通过私钥对生成的摘要进行加密,这个过久就叫做签名。然后,将这个签名和这封信发给Pat。Pat收到这封信的时候,首先,通过Bob给的公钥进行解密,这个解密的过程就叫做验签。然后,将这封信使用相同的hash算法生成新的摘要,然后将这份生成的摘要和验签里面的明文摘要进行配对,如果比对两者是否一致,如果是就说明这封信是Bob发送给Pat的。从而,提高了传输的机密性。也说明了这封信没有被篡改,也体现了签名的完整性。
就算黑客把这封信拦截了,并对这封信的摘要进行了修改。但是,黑客不知道Bob的公钥,所以,无法对这个新的摘要进行签名,从而确保了传输额完整性和机密性。
6、数字证书
数字证书解决“公钥的信任”问题,可以防止黑客伪造公钥。
不能直接分发公钥,公钥的分发必须使用数字证书,数字证书由CA颁发
首先数字签名会存在公钥的信任问题,假设Doug伪造Bob的公钥给Pat,Doug发送一封信给Pat,使用自己的私钥对这封信进行加密,此时Pat收到这封信以为是Bob发送的,所以使用Doug伪造的公钥进行解密。Pat到死也不知道自己是跟黑客发送消息。
这就好像你以为是跟微信平台发送消息,结果跟背后发送消息的是黑客。所以判断公钥的真假需要用到数字证书。
数字证书信息的详细内容
首先,假设Bob要给Pat发送消息。前提是Bob要先生成数字证书与这封信一起发送给Pat。
生成数字证书的流程:
首先将数字证书通过函数算法生成摘要,这个过程叫做指纹,保证证书的完整性。然后通过证书里面的CA签名算法对摘要指纹进行签名。然后将这份签名和数字证书信息一起打包,生成数字证书给Bob。
此时Bob已经拿到数字证书,Bob再将发送的这封信进行hash算法生成摘要,然后再通过Bob的私钥对这份摘要进行签名。将这封信和生成的签名和数字证书一起发送给Pat。Pat收到这封信之后,取出里面的数字证书,然后,通过数字证书里面hash算法生成证书的摘要,然后将证书里面的CA签名算法对证书里面的签名进行验签。然后对签名里面的摘要和hash算法生成的证书摘要进行比对,如果一致,那就说明了证书的完整性和机密性,该证书没有被篡改。最后,对这封信进行验签,首先,通过hash算法生成这封信的摘要,然后,通过证书里面的Bob的公钥对这封信的签名进行验签,然后获取这封信的验签摘要与生成封信摘要进行配对,如果一致,那就说明这封信没有被修改,确保了这封信的完整性和机密性。
7、https协中的数字证书:
8、微信API V3证书
商户证书:
商户API证书是指由商户申请的,包含商户的商户号、公司名称、公钥信息的证书。
商户证书在商户后台申请:https://pay.weixin.qq.com/index.php/core/cert/api_cert#/
平台证书(微信支付平台):
微信支付平台证书是指由微信支付 负责申请的,包含微信支付平台标识、公钥信息的证书。商户可以使
用平台证书中的公钥进行验签。
平台证书的获取:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay3_0.shtml
平台证书的下载方式:
9、API密钥和APIv3密钥
都是对称加密需要使用的加密和解密密钥,一定要保管好,不能泄露。
API密钥对应V2版本的API
APIv3密钥对应V3版本的API