Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >公钥私钥

公钥私钥

作者头像
程序那些事
发布于 2020-07-08 10:39:51
发布于 2020-07-08 10:39:51
1.8K0
举报
文章被收录于专栏:程序那些事程序那些事

密钥配送问题

上面几篇文章我们讲到了对称加密,包括它的几种实现AES,DES算法。那么有了对称加密算法,我们是否就可以安全的和第三方进行通信了呢?考虑如下情况:

小明想写一封情书给小红,但是这封情书是很私密的东西, 小明不想让除了小红之外的其他人知道。小明看过flydean的博客,他知道了有个对称加密的好东西。

于是小明想,如果我将情书使用对称加密算法进行加密,然后再把加密后的情书传给小红岂不就是安全了?但是小明又仔细思考了一下,发现了一个问题,对称加密算法必须需要密钥才能解密,除了传递情书以外,小明还需要把对称加密算法的密钥也传过去,这样小红才能正常解密。

但是怎么才能安全的传递密钥呢?密钥必须要发送,但是又不能发送,这个就是密钥配送的问题。

下面我们将一下解决密钥配送问题的几个方法。

事先共享密钥

解决密钥配送问题的最简单方法就是事先共享密钥,也就是小明提前将密钥交给小红。如果他们两个离得很近,那没有问题,直接线下见面交给小红就可以了。

如果他们分隔两地那就麻烦了。因为邮寄或者远程传输的过程中,密钥可能会被劫持。

即使能够有效的共享密钥,也会存在一个密钥保存的问题,每两个人间进行通信都需要一个完全不同的密钥,如果通信的人数很多的话,则需要保存一个相当大数量的密钥个数。实际操作起来不是很方便。

密钥中心分配密钥

为了解决保存大数量的密钥的问题。可以采用密钥中心来对密钥进行集中管理。我们可以将密钥中心看成是一个服务器,它里面保存了每一个人的密钥信息,下面我们看一下具体的通信流程:

  1. 小明和小红需要进行通信
  2. 密钥中心随机生成一个密钥,这个密钥将会是小明和小红本次通信中使用的临时密钥
  3. 密钥中心取出保存好的小明和小红的密钥
  4. 密钥中心将临时密钥使用小明的密钥加密后,发给小明
  5. 密钥中心将临时密钥使用小红的密钥加密后,发给小红
  6. 小明收到加密后的数据,使用自己的密钥解密后,得到临时密钥
  7. 小红收到加密后的数据,使用自己的密钥解密后,得到临时密钥。
  8. 小明和小红可以使用这个临时密钥自由通信啦 。

大家请注意,这里的临时密钥的使用方法很巧妙,后面我们会讲到大家最常用的https通信协议中对这个临时密钥的巧妙使用。

密钥中心很好,但是也有缺点,首先密钥中心的密钥是集中管理的,一旦被攻破,所有人的密钥都会暴露。

其次所有的通信都要经过密钥中心,可能会造成性能瓶颈。

使用Diffie-Hellman密钥交互

Diffie-Hellman 通过交互一些信息,双方来生成相同的密钥。具体的细节我们后在后面的博客中讲到。

使用公钥私钥

密码配送的原因就在于对称加密使用的密钥是相同的。如果我们使用非对称加密算法(公钥只用来加密,私钥只用来解密),这个问题是不是就能够解决了?

回到小明和小红通信的问题,如果小红事先生成了公钥私钥,并把公钥发给了小明,则小明可以将情书使用公钥进行加密,然后发给小红,这个情书只有小红才能解密。即使公钥被窃听了也没有关系。

当然这里也有一个问题,就是小明要确保生成的公钥的确是小红发出来的。这个问题的解决方法我们会在后面讨论。

公钥密钥还有一个问题就是速度的问题,只有对称加密算法的几百分之一。

下面画个序列图,解释一下公钥密码的交互流程:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序那些事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ChatGPT提示词保姆级教程
吴恩达联合OpenAI出ChatGPT 提示词教程 课程涵盖从理论到应用的各个方面,包括大型语言模型、文本嵌入、强化学习等技术的应用。 https://learn.deeplearning.ai/
Dlimeng
2024/05/24
3970
ChatGPT提示词保姆级教程
分享7个和 ChatGPT 相关的 VSCode 插件
这是最受欢迎的ChatGPT扩展之一,已经有超过584,000次安装,并且获得了4.5的评分。它包含了许多功能,比如通过扩展栏中的图标打开聊天界面、创建一个评论来询问特定的代码、选择代码并提问、编译和运行选中的代码、解释选中的代码等等。
前端达人
2023/08/31
7.1K0
分享7个和 ChatGPT 相关的 VSCode 插件
针对Java开发人员的十大基本Eclipse插件
毫无疑问,Eclipse是Java开发中最受欢迎的IDE之一,而使Eclipse如此出色的原因全归功于插件。有数百个Eclipse插件可用于执行各种任务并与其他基本工具集成,例如可从GitHub、SVN、CVS等下载代码的插件。
用户6543014
2020/02/21
1.2K0
ChatGPT 提示词技巧:制作Ai看得懂清晰有效咒语
当ChatGPT首次推出时,我立即被它的功能所吸引。我以各种方式尝试了该工具,并一直对结果感到惊讶。当我看到其他人找到使用 ChatGPT 的创造性方法并了解更多关于如何优化其潜力的信息时,我受到启发,创建了的有效提示存储库。发现和探索 ChatGPT 的功能,然后与他人分享我的发现,这确实令人兴奋。
轩源
2024/11/22
1240
ChatGPT 提示词技巧:制作Ai看得懂清晰有效咒语
如何有效向Chatgpt提问
在以前我也写了一篇提问的艺术,不过是面对的对象是人。(详见:更好的解决问题方法:提问的艺术)。最近随着chatgpt的火爆,越来越多的人了解和使用chatgpt,也有很多新的人工智能相继问世,如百度的文心一言,华为的盘古,腾讯的混元,阿里的通义千问,讯飞的星火等等。虽然如今ai技术得到飞跃式增长,ai们理解人类自然语言变得更加强大,但是学习如何提问也还是极为重要的。掌握向ai提问的技巧和方法,能够获得准确,有用的回答,有效提高提问效率。
Daimon
2023/08/23
5170
介绍10款ChatGPT替代产品
ChatGPT 引领着聊天 AI 的世界,许多人已经开始在日常生活中使用它。OpenAI 的 GPT-3 语言模型是聊天机器人的基础,它使得用户能够通过回答问题与 AI 进行交互。
架构狂人
2023/08/16
2.7K0
介绍10款ChatGPT替代产品
每个 Java 开发人员都应该知道的 10 个基本工具
大家好,我们已经在 2019 年的第 9 个月,我相信你们所有人已经在 2019 年学到了什么,以及如何实现这些目标。我一直在写一系列文章,为你提供一些关于你可以学习和改进的想法,以便在 2019 年成为一个更好的、全面的开发人员,比如学习新的编程语言、框架和库。这三件事非常重要,可以帮助您成为更好的 Java 开发人员,但正如一些有智慧的人说的那样,“您应该像工具一样好”,您还应该着手升级工具,学习新工具并提高效率将对你很有帮助
淡定的蜗牛
2019/09/12
4780
每个 Java 开发人员都应该知道的 10 个基本工具
[ChatGPT]-01-chatgpt可以做什么?如何调教
示例:Java 后端开发工程师、React 前端开发工程师、全栈开发工程师、iOS 开发工程师、Android开发工程师等。 回复截图请看这里
AI拉呱
2023/04/01
1K0
ChatGPT 之联盟营销
制定转化对话是每个营销人员和企业所有者都应该掌握的关键技能。它涉及创建和传递引人入胜的信息,吸引您的受众并激励他们采取行动。在当今数字时代,沟通跨越各种渠道和平台进行,掌握对话艺术比以往任何时候都更为重要。
ApacheCN_飞龙
2024/05/24
860
ChatGPT 之联盟营销
ChatGPT 中文调教指南
ChatGPT是由OpenAI 训练的一款大型语言模型,能够和你进行任何领域的对话。
用户10399177
2023/03/28
1.5K2
《花雕学AI》28:革命性的 ChatGPT for SEO——让您的排名飙升 50%!
如果您想写篇有吸引力的文章,或者您是一个博客和网站的拥有者,那么您一定知道 SEO(搜索引擎优化)的重要性。SEO 可以帮助您提高相应的流量、转化率和收入,但是 SEO 也是一个复杂和耗时的过程,需要不断地更新和优化内容、关键词和链接等。
驴友花雕
2023/05/03
2970
《花雕学AI》28:革命性的 ChatGPT for SEO——让您的排名飙升 50%!
推荐|学习编程最佳的免费网站
过去,学习编程很困难,因为可教授编程的资源和人员很少。互联网的兴起使得寻找学习编程的资源变得比以往任何时候都容易。现在有无数的在线教程、网站和其他资源可以帮助您开始编程。
数据科学工厂
2023/12/13
2.1K0
推荐|学习编程最佳的免费网站
ChatGPT 之现金流
在当今快节奏和不断发展的世界中,财务稳定和独立变得越来越重要。零工经济的兴起导致了兼职的激增,即人们在正常工作之外从事的兼职活动,以赚取额外收入。
ApacheCN_飞龙
2024/05/24
780
ChatGPT 之现金流
刚刚!OpenAI 在 ChatGPT 中推出新的语音和图像功能,多模态更进一步!
我们正在开始推出 ChatGPT 的新语音和图像功能。它提供了一种新的、更直观的接口类型,允许您进行语音对话或向 ChatGPT 展示您在谈论的内容。
莫尔索
2024/03/15
1460
刚刚!OpenAI 在 ChatGPT 中推出新的语音和图像功能,多模态更进一步!
科大讯飞,又一个王炸级更新!
近期,人工智能成为了最热门的话题。国内外众多公司纷纷推出自家的AI大模型。经过一年的使用体验,我发现有些模型在智能程度上表现非常出色,但使用门槛较高且价格昂贵,甚至需要使用特定的上网工具。
zz_jesse
2024/01/28
2240
科大讯飞,又一个王炸级更新!
ChatGPT 和 Elasticsearch的结合:在私域数据上使用ChatGPT
如何结合 Elasticsearch 的搜索相关性和 OpenAI 的 ChatGPT 的问答功能来查询您的数据?在此博客中,您将了解如何使用 Elasticsearch 将 ChatGPT 连接到专有数据存储,并为您的数据构建问答功能。
点火三周
2023/04/20
6.2K0
ChatGPT 和 Elasticsearch的结合:在私域数据上使用ChatGPT
将 ChatGPT 用于 DevOps
在 ChatGPT 惊天动地地首次亮相时,我已经在 DevOps 和 SRE 领域工作了大约 5 年,它真正彻底改变了我的工作流程,但我稍后会深入探讨。
云云众生s
2024/03/27
1340
将 ChatGPT 用于 DevOps
面向Java程序员的15个SpringBoot面试问题和答案
大家好,如果您正在为下一次Java面试做准备,并且准备了有关Spring框架的工作描述,那么您还应该准备一些Spring引导面试问题,以避免失望。SpringBoot现在是Java开发中使用Spring框架的标准方式,而且几乎所有的公司都在从使用Spring框架的传统方式转向更现代的SpringBoot方式。向开发人员询问诸如您是否使用过Spring Boot之类的问题的日子已经一去不复返了。现在的面试要求应聘者对Spring Boot有更多的了解,这是有原因的,我们将在本文中探讨。
麦洛
2020/03/19
1.1K0
ChatGPT:关于 OpenAI 的 GPT-4工具,你需要知道的一切
GPT-3(生成式预训练 Transformer 3)、GPT-3.5 和 GPT-4 是 OpenAI 开发的最先进的语言处理人工智能模型。它们能够生成类似人类的文本,并具有广泛的应用,包括语言翻译、语言建模以及为聊天机器人等应用生成文本。
一个正经的AI
2024/01/22
1.2K0
ChatGPT:关于 OpenAI 的 GPT-4工具,你需要知道的一切
Java日志:您需要了解的4种日志类型
日志记录是软件开发中的一个重要主题,特别是如果您需要分析生产环境中的错误和其他意外事件。实现日志记录通常很容易。但正如您可能经历过的那样,日志记录远比看起来复杂得多。这就是为什么你可以在博客上找到很多关于它的文章。
w4979的博客
2020/05/29
8330
推荐阅读
相关推荐
ChatGPT提示词保姆级教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文