一、非对称加密
非对称加密就是生成公钥私钥对,通信双方持有对方公钥(当然这个公钥可以被任何人获取,这就会造成后面说的不安全因素),用对方的公钥加密信息发给对方,对方用私钥解密。好处就是不用传递私钥。用对称加密的话会传递对称密钥,比较不好。
二、https加密通信
https通信不完全使用非对称加密,先用非对称加密交换对称密钥,再用对称密钥加密通信,因为非对称加密不适合对大量数据加密。
1、交换公钥
首先要使用非对称加密就要先交换公钥,交换公钥就是把公钥发给对方,但是可能出现“中间人”(可以自行google)拦截,为了防止中间人拦截问题引入ac证书
- ac证书
由第三方公信机构颁发,证书里记录着申请者的身份信息,
并且有申请者可以跟别人交换的公钥,然后把这些关键信息签名,
然后用自己的私钥加密签名,然后把这些一起放到证书,
那你想仿造证书,就要第三方的私钥了,
所以这里可以定一个结论,ac证书不可仿造而且可信。
引入证书后,交换公钥时,就把证书发过去,接收方的操作系统或浏览器已经植入了第三方公信机构的根证书,可以验证公钥证书的正确性,并得到公钥,这样就保证了公钥交换成功。
2、交换对称密钥
我们说了,对称加密不适合大量数据加密,所以只用在交换对称密钥上,当对称密钥成功交换后,就可以用对称加密方式通信,因为保证了对称密钥的安全,所以也就保证了对称加密的安全。下面说一下如何保证对称密钥安全送达的。
- 在公钥交换成功的前提下,我们就有了可靠的非对称加密
- 客户端产生一个随机数 对称密钥,先用公钥加密这个对称密钥,发给服务器
- 然后取得之前信息明文的签名,再用私钥加密,再用对称密钥加密
- 将这个两次加密的验证信息发送给服务器
发送这个两次加密的验证信息是非常重要的,同时使用对称加密和非对称加密。使用私钥加密的意义在于对方可以用公钥验证发送人的身份,因为中间人知道公钥,就是此处不能用公钥的原因,这就是上面说的公钥的隐患。
再用对称密钥加密的话,一则保证私钥加密不被公钥解密而看到内容,因为公钥大家都知道;二则判断对称密钥的正确性,如果对称密钥是被人换过的,那将不能解密这次验证信息。因为中间人没有私钥,所以这个验证信息不可仿造。
3、服务端验证
收到验证信息后,先用之前收到的对称密钥解密,如果能解密,说明对称密钥对;然后用公钥二次解密,如果也能对,那说明这个对的对称密钥是对的人发送的。如果对称解密不对,说明对称密钥不可信;如果公钥解密不对,那说明对称密钥是另一个人用公钥加密的自己的对称密钥来蒙骗服务器的。
如果验证通过,就完成了,可以用对称密钥交流了。
三、android apk证书签名
android 的apk证书签名是跟对称加密有关的,首先开发者生产证书即公钥私钥,然后取apk所有文件签名保存到文件1,再把文件1取签名保存文件2、再把文件2签名用私钥加密,然后将私钥加密的文件2签名和带有公钥的证书一起放到文件3。
验证时先验证apk文件签名和文件1是否对应,再验证文件和文件2是否对应,再用公钥解密的文件3里的文件2签名然后和现在的文件2签名进行比较。如果内容和文件1遭更改,然后文件2也跟着更改,到验证文件2签名的时候,就不对了,除非文件3跟着更改,但是文件3中放着私钥加密的内容,这部分内容不能伪造。就会出现文件3不能对应的错误。