两类加密算法
1.对称加密
对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。
2.非对称加密
非对称加密,就是使用公私钥(采用数学方法,具体可查阅先关资料)的原理。公钥和私钥匙最大特点就是,公钥加密后的东西,只能由私钥来解密。不能用公钥再来解密。
理解https原理
为啥要用httpts,https解决了什么问题
假设有这样一种场景,A和B通信需要C来传递,那我们怎么保证C不去篡改A和B之间的通信信息呢。其实https就是用来解决这么一个问题,防止中间人攻击。中间人攻击通俗点讲,就是A和B通信的过程中需要c来传递消息的时候,C对消息做了修改,而且A和B还不能察觉。那么在这么一个场景中,我们该如何解决这个问题。(思考10分钟)
如何保证消息不被C篡改(采用对称机密)
A和B通信的过程中,假设A和B采用一个只有自己知道的秘钥的话,那么A和B的消息C就无法修改了。但是通常情况是A和B秘钥事先没有约定好,怎么办?也需要C来传递秘钥,那么C就可以获取A和B的秘钥,那么A和B的消息对于C来说就是透明的,C就可以为所欲为。所以我们发现这个时候还是解决不了问题,除非A和B的秘钥不通过C来传递,事先是知道的。
如何保证消息不被C篡改(采用非对称机密)
对称加密不可以,那我们来研究下非对称加密。A生成了公钥和私钥,他把他的公钥给了B,由于消息是通过C来传递的。因此C也有A的公钥。这个时候A用他的私钥加密信息,这个时候B和C都可以看到消息。但是C是不能修改消息。C不可以解密了消息,然后修改消息,再把消息再用A的公钥加密,传递给B(公钥加密后的东西,只能由私钥来解密,不能用公钥再来解密)。反过来B要发消息给A,C就完全看不到了,只有A可以看到。这个时候,是不是觉得用公钥和私钥就解决了这个问题。
其实并没有解决这个问题。
假设A和B一开始交换公钥和私钥的时候,A先生成了公私钥,准备把自己的公钥传递给B的时候。C也生成了一份公钥和和私钥。C把自己的公钥给了A。
这个时候A发消息给B,C拿A的公钥解密,修改数据然后保存。用自己的私钥加密数据,发给B。B拿C的公钥解密。也得到了数据。这个过程中,A和B的数据已经被篡改了。而且没办法察觉出来。
怎么保证A和B交换秘钥不被换掉
假如A和和B交换秘钥的过程中,对秘钥进行加密,保证C不看到就可以么。那么问题似乎陷入了死循环。这个时候。就会有些聪明的人提出了解决方案。假设存在一个人D。这个人把A和B和C都有它的公钥。A可以先把自己的公钥让D用它的私钥加密,然后把密文给自己,自己再把密文A传递给B经由C。这个时候C虽然拿到了A加密后的公钥,但是没办法篡改。但是假设C也把自己的公钥让D加密了的话。C又可以继续修改数据。
那么这个时候最大的问题是我们无法知道B拿到的公钥到底是A的还是C的。那么我们怎么解决这个问题呢。A可以先告诉B自己加密后的秘钥的hash值,但是这个值A可以请求D用自己的私钥匙加个密。A把加密后的hash传递给B虽然B和C都可以看到,但是C无法篡改信息。
全文小总结
https的主要原理可以概括为两点:
1.利用公钥和私钥匙最大特点就是,公钥加密后的东西,只能由私钥来解密。不能用公钥再来解密。
2.操作系统和浏览器内置些机构(颁发证书的机构)的公钥。