加密的意义:
在互联网中,拦截与窃取是非常需要防范的,正所谓害人之心不可有,防人之心不可无,所以对私有的信息都需要一种安全的方式来处理。
对称加密:
双方规定同种加、解密方式(如发送方的信息加上循环字符串A,而接收方将信息减去A)对信息进行处理而后通信,从而方式信息被人窃取
缺点: 一旦密码被人窃取,那么通信信息将一览无余
非对称加密:
公钥加密用于隐藏信息,私钥加密为了证明身份,所以非对称加密的意义是私钥方希望收到的数据不被人窥探,而公钥方能确认信息来源。这句话很重要!!!!
通过某种算法(RSA)设置出一套可以双向加解密的一对密钥,满足:密钥A加密的信息,只有密钥B才能解密,密钥B加密的只有使用密钥A才能解密。且这个算法必须满足密钥A无法推出密钥B,否则无法保证安全性。无法被推出的密钥A被称为私钥,而密钥B被称为公钥
因为只有本人持有私钥,所以通过私钥加密的信息无疑能使接收方确认信息的来源
一个合格的程序员,不会以任何形式让私钥在网络上出现
通信过程:
发送方A将信息用公钥加密,发送给接收方B,接收方B用私钥解锁,因为只有私钥才能解密信息,所以即便被拦截了也无伤大雅
如果说公钥加密是为了隐藏明文,那么私钥加密呢? —— 证明身份
签名:
比如老李发信息:“老张,支付宝转10万给我”,那么小明如何证明自己的身份呢
老李将“老张,支付宝转10万给我”这个信息通过私钥加密(也就是签名),然后与明文一起发送给老张,老张收到以后先将签名使用公钥解密,然后与明文比对,如果一模一样就确定了老李的身份。
因为只要老李拥有私钥,也就是说这个签名只有老李做出来。
改进:
新的问题又来了:本来非对称加密就慢,这样一搞,不是更慢了? 有没有什么办法减少签名的工作量?
先用摘要算法与明文数据计算出摘要值(很快),然后将摘要值用私钥加密,这就是现在市面上常用的签名。
为什么是私钥签名,公钥验签(为什么将公钥放到服务器上而不是私钥)?
(我当时就是没懂非对称加密公钥和私钥的实际意义才一直有这个疑问)
登录验证的意义,就是确定发送方的身份,有什么密钥更能确认身份呢?
对称加密 VS 非对称加密
-
因为密钥基本上不会在网络中出现,所以非对称加密相对而言非常安全
-
因为非对称加密中使用的公钥和私钥在某种程度上是算数相关的,所以密钥本身也必须足够长,以此达到与对称加密算法(使用较短加密密钥)相同的安全级别。
所以非对称密钥很长,加密和解密的速度都慢,于是混合加密诞生了
混合加密:
通俗的讲,就是用非对称加密这种及其安全的模式传递对称密钥,而后使用对称密钥通信,
因为如果不出意外,非对称加密不会泄露对称密钥,那么之后的对称加密通信就可以认为是安全的。
数字证书(CA):
当然,非对称加密也不是没有缺点的,一旦公钥被人替代,那么对于接收方来说,身份就完全取代了,比如发送方A的公钥在发送给服务器B的途中被不法分子C拦截并使用C自己的公钥取代,那么后序A的所有信息服务器B都解密不出来,在服务器的眼中,C才是A,因为B存着他以为是A但其实是C的公钥,所以数字证书应运而生了
没有深究,感兴趣的可以点击下面的链接