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

公钥私钥

作者头像
程序那些事
发布于 2020-07-08 10:39:51
发布于 2020-07-08 10:39:51
1.9K01
代码可运行
举报
文章被收录于专栏:程序那些事程序那些事
运行总次数:1
代码可运行

密钥配送问题

上面几篇文章我们讲到了对称加密,包括它的几种实现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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
TensorFlow2 一小时学会基本操作 1
https://iamarookie.blog.csdn.net/article/details/117591977
润森
2022/09/22
3960
TensorFlow2 一小时学会基本操作 1
Tensorflow2.0常用基础API
tensorflow2.0改进之后已经非常像numpy形式了,不用像之前的session那样操作,一些基本的操作如下。需要注意的店以及部分数据均写在代码注释中。
Mirza Zhao
2023/06/26
8090
TensorFlow入门:一篇机器学习教程
TensorFlow是一个由Google创建的开源软件库,用于实现机器学习和深度学习系统。这两个名称包含一系列强大的算法,它们共享一个共同的挑战——让计算机学习如何自动识别复杂模式和/或做出最佳决策。
WindCoder
2018/09/19
4.2K0
TensorFlow入门:一篇机器学习教程
TensorFlow修炼之道(3)——计算图和会话(Graph&Session)
在计算图中,节点表示计算单位,边表示计算用到和产生的数据。 例如,在TensorFlow图中,tf.matmul操作将对应于具有两个输入边(要乘以的矩阵)和一个输出边(乘法的结果)的单个节点。
abs_zero
2018/04/11
1.8K0
TensorFlow常用函数
tf.Variable()将函数标记为可训练,被标记的变量会在反向传播中记录梯度信息。
皮大大
2023/08/23
2560
Tensorflow技术点整理(二)
这里跟PyTorch不同的是序号定义的不同,PyTorch是上下定义位置,而Tensorflow是左右定义位置。
算法之名
2022/03/24
4330
Tensorflow技术点整理(二)
一看就懂的Tensorflow实战(Tensorflow入门)
数字手写体识别数据集,常用来作为Deep Learning入门的基础数据集。它有60000个训练样本集和10000个测试样本集,每个样本图像的宽高为 28 * 28。此数据集是以二进制存储的,不能直接以图像格式查看。
AI异构
2020/07/29
4280
简明机器学习教程(二)——实践:进入Tensorflow世界
经过了一年的休整,终于博客也要恢复原先坑着的系列了,《简明机器学习教程》也会恢复更新。说实在的,第二篇的原稿我其实在第一篇之后一星期就写出来了,但是后来因为原稿遗失与学业繁忙就一直拖了下来。历经一年,我对机器学习与这系列教程又有了些新的思考,所以我决定做出些许调整。首先,本系列不再单独分理论、实践篇,而是采用交织在一起的形式。其次,将matlab更换为tensorflow(python)。教程的定位依旧是面向初学者,所以会加入大篇幅的前置介绍。这篇就是为了之后内容而对tensorflow进行先行的介绍。
KAAAsS
2022/01/14
9610
简明机器学习教程(二)——实践:进入Tensorflow世界
《机器学习实战:基于Scikit-Learn、Keras和TensorFlow》第12章 使用TensorFlow自定义模型并训练
目前为止,我们只是使用了TensorFlow的高级API —— tf.keras,它的功能很强大:搭建了各种神经网络架构,包括回归、分类网络、Wide & Deep 网络、自归一化网络,使用了各种方法,包括批归一化、dropout和学习率调度。事实上,你在实际案例中95%碰到的情况只需要tf.keras就足够了(和tf.data,见第13章)。现在来深入学习TensorFlow的低级Python API。当你需要实现自定义损失函数、自定义标准、层、模型、初始化器、正则器、权重约束时,就需要低级API了。甚至有时需要全面控制训练过程,例如使用特殊变换或对约束梯度时。这一章就会讨论这些问题,还会学习如何使用TensorFlow的自动图生成特征提升自定义模型和训练算法。首先,先来快速学习下TensorFlow。
SeanCheney
2019/12/13
5.5K0
《机器学习实战:基于Scikit-Learn、Keras和TensorFlow》第12章 使用TensorFlow自定义模型并训练
[Tensorflow] TensorFlow之Hello World!(2)
TensorFlow入门的第一篇和大家聊了?graph图,op操作,node节点。对TensorFlow有了一个简单的认识,今天主要和大家分享的是TensorFlow中constant 常量, Variable变量,Placeholder占位符,Session启动图,fetches,feed等几个基本概念。 接下来我们通过一些简单的栗子分别来学习一下他们都是什么鬼。 # constant # 导入模块 import tensorflow as tf """ 怎么定义常量,常量的意思和我们平时理解的常量是一
用户1622570
2018/04/11
9960
TensorFlow2 一小时学会基本操作 4
tf.math.top_k可以帮助我们查找最后一个维度的 k 个最大条目的值和索引.
润森
2022/09/22
5240
TensorFlow2 一小时学会基本操作 4
《机器学习实战:基于Scikit-Learn、Keras和TensorFlow》第13章 使用TensorFlow加载和预处理数据
Data API还可以从现成的文件(比如CSV文件)、固定大小的二进制文件、使用TensorFlow的TFRecord格式的文件(支持大小可变的记录)读取数据。TFRecord是一个灵活高效的二进制格式,基于Protocol Buffers(一个开源二进制格式)。Data API还支持从SQL数据库读取数据。另外,许多开源插件也可以用来从各种数据源读取数据,包括谷歌的BigQuery。
SeanCheney
2019/12/16
3.5K0
《机器学习实战:基于Scikit-Learn、Keras和TensorFlow》第13章 使用TensorFlow加载和预处理数据
TensorFlow2.0(2):数学运算
可以看出,对于基本运算加(+)、减(-)、点乘(*)、除(/)、地板除法(//)、取余(%),都是对应元素进行运算。
统计学家
2019/12/23
2.1K0
【tensorflow2.0】张量数据结构
Tensorflow的基本数据结构是张量Tensor。张量即多维数组。Tensorflow的张量和numpy中的array很类似。
西西嘛呦
2020/08/26
5380
开刷Cs20之Tensorflow第二弹
本节学习来源斯坦福大学cs20课程,有关自学与组队学习笔记,将会放于github仓库与本公众号发布,欢迎大家star与转发,收藏!
公众号guangcity
2019/09/20
1.6K0
开刷Cs20之Tensorflow第二弹
TensorFlow2.0(7):4种常用的激活函数
激活函数是深度学习,亦或者说人工神经网络中一个十分重要的组成部分,它可以对神经元的接收信息进行非线性变换,将变换后的信息输出到下一层神经元。激活函数作用方式如下公式所示:
统计学家
2019/12/23
1.4K0
TensorFlow2.0(7):4种常用的激活函数
【tensorflow2.0】数据管道dataset
如果需要训练的数据大小不大,例如不到1G,那么可以直接全部读入内存中进行训练,这样一般效率最高。
西西嘛呦
2020/08/26
1.8K0
【tensorflow2.0】数据管道dataset
TensorFlow 2.0 快速入门指南:第一部分
在本部分中,我们将介绍 TensorFlow 2.00 alpha。 我们将首先概述该机器学习生态系统的主要功能,并查看其使用示例。 然后我们将介绍 TensorFlow 的高级 Keras API。 我们将在本节结尾处研究人工神经网络技术。
ApacheCN_飞龙
2023/04/23
4.6K0
Tensorflow之基础篇
终于有点时间学一下之前碎碎念的TensorFlow,主要代码为主,内容来源于《简明的TensorFlow2》作者 李锡涵 李卓恒 朱金鹏,人民邮电出版社2020.9第1版。
Ed_Frey
2020/12/30
8550
Tensorflow之基础篇
【tensorflow2.0】自动微分机制
神经网络通常依赖反向传播求梯度来更新网络参数,求梯度过程通常是一件非常复杂而容易出错的事情。
西西嘛呦
2020/08/26
6540
相关推荐
TensorFlow2 一小时学会基本操作 1
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验