前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「万云科普」如何向非极客解释非对称加密[通俗易懂]

「万云科普」如何向非极客解释非对称加密[通俗易懂]

作者头像
全栈程序员站长
发布2022-09-05 10:32:59
3870
发布2022-09-05 10:32:59
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

from:https://mp.weixin.qq.com/s/E-i4a5sEKWRRq3f0zzXekQ

解释的通俗易懂,mark 一下。

非对称加密其实并不如它听起来的那么复杂,我们只需要换个方式解释它,就能让不是极客的你也秒懂。

为什么我想用一种通俗易懂的方式来解释深奥的非对称加密?是因为我正在研究一种会大量使用加密的产品,我自己最近不止一次向朋友解释非对称加密,而令我惊讶的是,网上所搜索到的任何相关信息都让它看起来更加复杂,但事实并非如此。

下面进入正题。

首先,让我们先了解下“对称”加密是如何工作的。

老王有一个带锁的盒子,同时老王也有一把属于自己的钥匙可以开关这个盒子。当老王想要保存某些重要物品在盒子中,他会将其上锁;只有他或其拥有备份钥匙的人才能打开盒子。

这就是对称加密:你有一把钥匙,你用它来关锁(加密)和开锁(解密)你的盒子(数据)。

对称加密很好懂对不对,现在让我们在此基础上来看看非对称密码学是如何工作的。

小明也有一个盒子,这个盒子比老王的更高级一点,因为这是一个带有特殊锁的盒子。

它特殊在何处呢?

直接看图▼

从上图可以看出小明的盒子上的锁有三种状态:A(锁定),B(解锁)和C(锁定),一定要记住这三个字母分别代表的状态。

同时,小明的盒子配有两把不同的钥匙。

第一个把钥匙只能顺时针转动,从A转到B转到C,第二把钥匙只能逆时针转动,从C转到B转到A。

小明从这两把钥匙中挑选第一把钥匙归自己所有,这就是小明的私钥,只有小明配拥有它,为了保护好盒子,小明一般都把私钥藏到别人找不到的地方。

小明盒子的第二把钥匙是 “公开”钥匙:他把第二把钥匙复制了一百把(也可以更多),给了他的朋友和家人,在办公室的桌上也留下了一把,甚至直接挂了一把在办公室门外。

现在,我们整理一下思路,小明的私钥,可以从A转到B到C,只归他个人所有;小明的公钥,可以从C转到B到A,其他人只要想要都可以获得。(不明白的老铁可以再看下上文的图)

小明的盒子特殊之处我们搞清楚了,那小明可以利用这个盒子做什么羞羞的(正经的)的事情呢?

直接来举个例子!

你想发送一个链圈大佬的大八卦给小明,但是又不想让别人知道。如何是好呢?

你想起小明有个特殊的盒子!

于是你将这个八卦放在小明的盒子中,并用小明的公钥副本将盒子上的锁从C转到B转到A,这时候文件就被锁在了盒子里(A的状态是锁定)。是的,你清楚地记得:小明的公钥只能逆时针旋转,所以你把它转到位置A,现在这个八卦就被锁定了。

然后??????

小明回来了,他用他的私钥把盒子上的锁从A转到B,B的状态是解锁,盒子打开了!小明看到了八卦,没想到他崇拜的链圈大佬居然做出这种事???

所以到底是什么大八卦???通过这个盒子来传递信息,只有小明和你知道。

因为,这个盒子唯一可以顺时针从A转到B的钥匙是小明的私钥。

是不是豁然开朗! 这就是我们所说的公钥加密,也就是非对称加密:每个拥有小明公钥的人(很容易找到它的一个副本,他到处都放了,记得吗?)可以将文档放在他的盒子中,从C转到B转到A,形成锁定状态;而最终能解锁的人只有小明,因为小明的私钥是从A开始转,转到B就解锁了。所以就算有人想知道你到底发了什么八卦给小明,也无法获取哦!

知道这个原理的你,八卦之心碎了一地。

那,小明这个特殊的盒子还能做什么呢?

再来举个例子!

假设小明在盒子中放置了一个文件并用他的私人钥匙将锁转到位置C来锁定。

可是小明为什么要这样做?????毕竟,任何拥有公钥的人都可以从C转到B,然后解锁它!

等等!一定有什么我没发现的重要线索!

果然,有人送给我一个盒子,他说这是小明的,但是我并不能确认这个盒子就是小明的,为了验证它,我从保存各种好朋友公钥的抽屉里挑选小明的公钥,然后尝试我右转,盒子一动不动;然后我尝试左转,砰!箱子打开!于是我验证了这个盒子确实是属于小明的。

小明通过私钥加密这个方式证明是他自己而不是其他任何人把文件放在箱子里。我们把这个证明方式称之为“数字签名”。

好了,今天的例子就到这里,我们言归正传。

在数字世界中,“钥匙(keys)”其实就是数字,有长有短。您可以将您的私钥,其实就是一串数字保存在文本文件或特殊应用程序中。 你可以把你的公钥,也是一个很长的数字,放在你的电子邮件签名中,你的网站等等公开的地方。而且不需要特殊的盒子,你只需用一个应用程序和你的钥匙来“锁定”和“解锁”文件(或数据)。

如果任何人,即使是你,用你的公钥加密(锁定),也就逆时针转到锁定状态A,只有你可以用你的私钥解密(解锁),因此别人通过公钥传送给你的加密文件,只有你能够解密,相信第一个例子已经解释得很清楚了。

如果你用你的私钥加密(锁定),也就是转到锁定状态C,任何人都可以解密(解锁),这可以作为你对它加密的证据:它就是你的“数字签名”。

还有许多更为复杂的场景:我们可以使用我们的私钥来签名文件,然后使用其他人的公钥对其进行加密,以便只有他可以读取它。 一个用户或一个组织可以对其他用户的密钥进行数字签名,以验证其真实性等等。但是,所有这些实际上都是使用一个或另一个密钥并将其放入其他盒子中,不属于这篇文章的讨论范围。

今天万云的技术科普就到这,关于密码学还有任何你想了解的,都可以通过后台留言小编。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/137359.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年6月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档