加密

简单来说分为两种,对称加密和非对称加密。
对称加密
加密和解密用的是同一个秘钥,在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA等。这类加密算法的优点就是计算量小、加密速度快、加密效率高;但是缺点也很明显,在传输数据前,双方必须商定并保存好秘钥,任何一方的秘钥被泄露,加密信息就不再安全了。另外,每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。

非对称加密
非对称加密需要两个秘钥来进行加密和解密,这两个秘钥非别是公有秘钥(公钥)和私有秘钥(私钥),公钥与私钥是一对,如果用公钥对数据进行加密,那么就必须用对应的私钥才能解密;同理,如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。在非对称加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。

公钥和私钥

公钥和私钥是非对称密码学中的概念。他们的特点是用公钥加密的密文只能用私钥解密,用私钥加密的密文只能用公钥解密。在通信过程中,私钥由服务器持有,不可外泄,公钥则通过HTTP发送给客户端。服务器发送经过私钥加密的密文给客户端,客户端可以通过公钥解开密文;客户端发送经过公钥加密的密文给服务器,服务器通过私钥解开密文。这个过程如图所示

简易版理解

一、公钥加密
假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。

我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用
数字2,就是我的私钥,来解密。这样我就可以保护数据了。

我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2就是我的私钥,
只有我才能解密,解密后就得到a。这样,我们就可以传送加密的数据了。

二、私钥签名
如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2是我的私钥),结果所有的人都看到我的内容了,因为他们都知
道我的公钥是1,那么这种加密有什么用处呢?

但是我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他
解密看是不是c。他用我的公钥1解密,发现果然是c。
这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。
这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是数字签名。

三、举例
比如有两个用户Alice和Bob,Alice想把一段明文通过双钥加密的技术发送给Bob,Bob有一对公钥和私钥,那么加密解密的过程如下:

1.Bob将他的公开密钥传送给Alice。
2.Alice用Bob的公开密钥加密她的消息,然后传送给Bob。
3.Bob用他的私人密钥解密Alice的消息。

公钥和私钥是成对的,它们互相解密。
公钥加密,私钥解密。
私钥数字签名,公钥验证。

优缺点

非对称加密的优点:

非对称加密采用公有密匙和私有密匙的方式,解决了http中消息保密性问题,而且使得私有密匙泄露的风险降低。

因为公匙加密的消息只有对应的私匙才能解开,所以较大程度上保证了消息的来源性以及消息的准确性和完整性。

非对称加密的缺点:

非对称加密时需要使用到接收方的公匙对消息进行加密,但是公匙不是保密的,任何人都可以拿到,中间人也可以。那么中间人可以做两件事,第一件是中间人可以在客户端与服务器交换公匙的时候,将客户端的公匙替换成自己的。这样服务器拿到的公匙将不是客户端的,而是中间人的。服务器也无法判断公匙来源的正确性。第二件是中间人可以不替换公匙,但是他可以截获客户端发来的消息,然后篡改,然后用服务器的公匙加密再发往服务器,服务器将收到错误的消息。

中间商可以冒充服务器篡改公钥,如下图↓

为了防止中间商篡改公钥,需要用到数字证书,在讲数字证书之前还需要先了解一下数字签名

数字签名

数字签名是个什么东西呢?它是信息的指纹。但是这不是重点,重点是数字签名的生成过程。数字签名的生成有两个步骤:

对明文进行哈希,得到一串哈希值;
对第一步得到的哈希值用私钥加密。

数字签名是如何使用的呢?其实看一张图就明白了。数字签名会随着内容一起被发送出去,接收方首先用公钥解密数字签名得到哈希值h1,然后对内容用同样的算法计算哈希值h2,如果h1=h2,那么说明内容没有被串改过。

然而这个过程也存在风险,如果中间商篡改了公钥,那么他就可以伪造数字签名,一样完蛋。如下

所以引入数字证书

数字证书

数字证书包含两部分内容:

  • 服务器信息
  • 数字签名

这里的服务器信息中就包含了服务器的公钥,当然还有一些其他信息,比如证书名称、发布机构、有限期、哈希算法等。数字签名就是对服务器信息进行哈希,然后用CA认证中心的私钥加密的结果。

这里特别强调数字签名是用CA认证中心的私钥加密的,因为这样才能防止中间商串改公钥。这里还有一点需要注意,那就是操作系统会自动安装CA认证中心的公钥,所以,每个客户端都默认有CA认证中心的公钥。

如果中间商想伪造数字证书,篡改数字证书中的公钥,由于中间商没有CA认证中心的私钥,无法伪造数字签名,于是也就无法伪造数字证书了。

但是这样就万无一失了吗?并不是,如果中间商也在CA认证中心注册了数字证书,并且用这个合法的数字证书替换了服务器的数字证书,还是会完蛋。但这就不是我们该操心的问题了,这是CA认证中心该考虑的问题,应该给什么人发证书,拒绝给什么人发证书。只有CA认证中心能够区分好人和坏人,我们才是安全的。
其实到最后就是客户端把对服务器的信任委托给了CA认证中心,因为服务器是不一定可信的,那就创造一个相对一定可信的第三方。

PS:真正的HTTPS通信并不是通过公钥和私钥加密的,公钥和私钥只用在握手过程中,当客户端请求到真正的公钥后,会生成一个随机数(对称密钥)并用公钥加密,发送给服务器,后续的通信就用对称密钥加密了。这样做的原因是非对称加密的性能相对对称加密来说会慢上几倍甚至几百倍,比较消耗系统资源。正是因为如此,https将两种加密结合了起来。详见HTTP和HTTPS

参考1

公钥 私钥 数字签名 CA证书相关推荐

  1. 数字签名、公钥、私钥、CA证书之间的关系

    原文地址:https://www.jianshu.com/p/3c5212b47bec 解说如下: 鲍勃有两把钥匙,一把是公钥,另一把是私钥. 鲍勃把公钥送给他的朋友们----帕蒂.道格.苏珊---- ...

  2. 【计算机网络】网络安全 : 公钥分配 ( 公钥使用者 | 公钥分配 | CA 证书格式 | CA 证书吊销 )

    文章目录 一.公钥使用者 二.公钥分配 三.CA 证书格式 四.CA 证书吊销 一.公钥使用者 公钥密码体质中 , 用户的公钥也不能随意的公布 , 公钥无法防止伪造 , 欺骗 , 接收者无法确认公钥使 ...

  3. 关于数字证书,数字签名,CA证书,Https都在这里了

    Http协议大家都不陌生了,但是http的请求内容都是明文的内容,如果被拦截了请求,就能看到你的请求内容,比如账号密码之类的,这样的话就是不安全的, 然后就有了http+SSL/TLS =https ...

  4. 加密通信(三):CA证书

    一 出现背景 加密通信(二):加密通信模型 所述的加密通信中还有两个问题: 如何确认公钥的安全性(确保你拿到的接收者的公钥是真正的接收者的.没有被篡改的).如果每次通信开始时接收者将公钥发送给发送者, ...

  5. 聊聊公钥私钥的那点事儿

    文章目录 前言 对称加密和非对称加密 RSA算法 加密通讯 数字签名 数字证书 前言 加密技术是个好东西,可以有效地保证我们在沟通和存储过程中的信息安全.但我敢打赌,没有多少程序员喜欢加解密算法,更多 ...

  6. Apache OpenSSL生成CA证书使用

    最近在学习SSL协议,这次是基于Apache服务器自带的openssl来实现的 TLS:传输层安全协议 SSL:安全套接字层 KEY:私钥 CSR:证书签名请求,即公钥,生成证书时需要将此提交给证书机 ...

  7. 罗剑锋透视HTTP协议学习笔记---25 | 固若金汤的根本(下):数字签名与证书

    25 | 固若金汤的根本(下):数字签名与证书 黑客虽然拿不到会话密钥,无法破解密文,但可以通过窃听收集到足够多的密文,再尝试着修改.重组后发给网站.因为没有完整性保证,服务器只能"照单全收 ...

  8. 数据加密类型及创建和申请CA证书

    数据加密类型及创建和申请CA证书 1.数据在互联网上传输必须保证以下3点特性: 私密性:  数据加密 完整性:   数据传输过程没有被人修改 身份验证: 确认对方的身份,防止中间人伪装*** 2.私密 ...

  9. ca证书 linux 导入_CA搭建与证书申请

    一:创建私有CA openssl的配置文件:/etc/pki/tls/openssl.cnf 根据此配置文件创建CA dir:CA相关文件存放路径 /etc/pki/CA certs:证书存放目录 / ...

最新文章

  1. pytorch JIT浅解析
  2. 一道让你拍案叫绝的算法题
  3. 模板 - 上下界网络流
  4. 用python画xy散点图-python使用Plotly绘图工具绘制散点图、线形图
  5. git - 简明指南
  6. 被同事嘲笑说技术方案没深度?
  7. JVM(一)史上最佳入门指南
  8. java中的多态与继承_【Java学习笔记之十六】浅谈Java中的继承与多态
  9. 每次获取不同的图片按顺序从1-xxx
  10. linux中的帮助命令man(manual 手册,帮助,指南)
  11. 字符串连接符(Java)
  12. python 返回函数,偏函数,装饰器,itertools,collections,dir()type()
  13. db2mysql下载_db2SQL命令
  14. css003 选择器:明确设置哪些样式
  15. matlab入门基础函数
  16. 现代三角钢琴音源 Native Instruments The Grandeur 1.2
  17. 【全部译文】Deep-Waveform: A Learned OFDM Receiver Based on Deep Complex Convolutional Networks
  18. FPS综述:植物次生代谢物与微生物组互作研究进展
  19. 手机安装php7,php7.3编译安装时报错system libzip must be upgraded to version = 0.11
  20. JS JQuery实现简单的鼠标移动动画效果

热门文章

  1. MOS管工作原理的应用驱动电路详解
  2. APS炒币机器人投资随记2:短时需留意冲高回落风险,谨慎追高
  3. 小猿圈分享-web报表中电子印章/水印的轻松实现
  4. 物联网——Zigbee协议简介
  5. linux小白命令,linux命令---小白笔记
  6. 费翔林, 骆斌. 操作系统教程(第五版).Page118第19题笔记
  7. jenkins+python自动化测试持续集成
  8. 磁盘不足怎么办?LVM逻辑卷与磁盘配额请求出战!
  9. Mac不休眠、恢复休眠的快捷设置
  10. 计算机电子电路原理图,电子电路图 如何看懂电子电路图 凡亿教你如何看懂电路图...