加密解密(2)*客户端,服务器,CA(Certificate Authority),公钥,私钥,证书,签名,验证
1.参考
http://www.youdzone.com/signature.html
图示:
2.常见名词简介
客户端:通常为请求方,要验证服务器的身份。
服务器:通常为响应方,有时也要验证客户端的身份。
C A :全拼为Certificate Authority,权威认证机构。
加 密:客户端或服务器把数据放在箱子里,然后用钥匙(公钥或私钥)将箱子锁上,再放到网络上传输,只有有用钥匙的人才能打开箱子。
密 钥: 用来解锁箱子的钥匙。非对称加密算法里分:公钥、私钥。它们成对出现,只有它们能解开对方加密过的数据。
解 密:用钥匙箱子解锁,得到里面数据。
私 钥: 私有,只能解开本公钥加密的数据,用它加密的数据只能被本公钥解密。只有自己知道。
公 钥: 公有,只能解开本私钥加密的数据,用它加密的数据只能被本私钥解密。给所有接收方。
签 名: 发送方用摘要算法(md5,sha等),得到摘要A,然后用私钥对摘要A进行加密,这个过程就叫签名。
验 证: 主要有两个验证工作。
- 验证对方身份合法性:公钥是否能成功解密数据。能:对方合法。反之:不合法。
- 验证数据否被篡改:
- 接收方对数据解密,得到签名信息+原数据,用公钥对签名解密,取出摘要A,
- 采用与签名相同的摘要算法对原数据求摘要B。将摘要A、B进行对比。可验证本次传输过程中数据是否被篡改。
证 书: 证明公钥的合法性。
如果某个人(X)用自己的公钥偷换了接收方的公钥,这个时候它给接收方发数据+签名,那么X可以通过接收方的验证。接收方误以为X就是原来的发送方,这时就不安全了。
为了解决这个问题,出现了第3方权威认证机构(CA),发送方把自己的公钥和相关信息白提交给CA认证,CA用自己的私钥对申请人信息以及公钥进行签名。生成数字证书信息,通常是文件方式。这时接收方不再使用发送方的公钥了,而是使用权威机构的公钥。同时要求发送方先把数字证书信息发送过来。然后用权威机构的公钥解密数据字证书得到发送方的公钥。
3.举例
服务器为S,它有1把私钥,4把公钥(因为公开,别人可以获取)
客户端为C1,C2,C3,C4,它们各有一把S的公钥。
C1 用S的公钥加密数据后,若对方能解开,说明通它是S。这样可验证服务器身份(原理2,6)
如果C2想冒充S,它给C1发数据,C1用公钥无法解开,因为C2没有S的私钥,说明C2不合法。(原理4,5)
3.1 公钥加密举例
假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。
我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用
数字2,就是我的私钥,来解密。这样我就可以保护数据了。
我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2就是我的私钥,
只有我才能解密,解密后就得到a。这样,我们就可以传送加密的数据了。
3.2 私钥签名举例
如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2是我的私钥),结果所有的人都看到我的内容了,因为他们都知
道我的公钥是1,那么这种加密有什么用处呢?防止冒充,如下
我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他
解密看是不是c。他用我的公钥1解密,发现果然是c。
这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。
这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是数字签名。
4.总结
- 公钥私钥成对出现
- 私钥只有我知道
- 大家可以用我的公钥给我发加密的信了
- 大家用我的公钥解密信的内容,看看能不能解开,能解开,说明是经过我的私钥加密了,就可以确认确实是我发的了。
- 用公钥加密数据,用私钥来解密数据
- 用私钥加密数据+数字签名,用公钥来解密及验证数字签名。
在实际的使用中,公钥不会单独出现,总是以数字证书的方式出现,这样是为了公钥的安全性和有效性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?