简单解释公钥密码学

简单解释公钥密码学
Liam MacleodUnsplash拍摄的照片

公钥密码术对每个人来说都是神奇的,即使是那些了解它的人也是如此。 在这篇文章中,我将解释公共**加密。 公钥密码术基于非对称密码学,因此首先让我们谈谈对称密码学。

对称密码学

您的前门通常用钥匙锁住。 此键可解锁并锁定您的前门。 使用对称加密,您只有一个**可用于解锁和锁定事物。

只有拥有钥匙或钥匙副本的人才能打开门。 现在,假设您正在巴厘岛度假。 您想邀请您的朋友在美丽的海滩????️上照看您的猫cat。

在假期之前,您将您的钥匙交给您的朋友。 然后您的朋友被抢劫,所以其他人现在有了您的前门钥匙。 或您的朋友把它放在周围,有人克隆它。 对称**密码学的问题在于,这个**很容易克隆,并且很容易以多种不同方式攻击您的房屋。

让我们从一个类似的例子到一个对称密码学的真实例子。

凯撒的密码

朱利叶斯·凯瑟(Julius Caeser)使用一种密码发送消息,目的接收者无法读取。 主要是因为在公元前100年没有人能读懂,而那些不能理解随机字母字符串的人也无法读懂。 这就是密码学的重点。 创建无需第三方监听即可进行通信的方法。此密码是Caeser的密码 给定一个字母和一个键(键是1到25之间的整数),请按键移动所有字母。

简单解释公钥密码学

如上图所示,偏移3时,A变成D,B变成E,依此类推,直到X = A环绕为止。原始消息称为纯文本 ,加密后的消息称为密文

执行凯撒密码的最简单方法是将所有字母转换为数字,a = 1,b = 2,c = 3,依此类推。

为了加密,E,您需要对每个字母(其中s是移位)进行计算:

简单解释公钥密码学

这称为功能。 您输入一个输入,然后输出。 许多功能被称为双向功能。 您可以使用上面的函数进行加密,解密就可以做到。 给定一个将数字加倍的函数,如果您有一个双倍的数字并且想要反转该函数,请执行与乘以2相反的操作,将数字除以2。

mod是模数运算符。 这是剩下的分歧。 我们做模数是因为字母表中没有第27个字母,您只需将“ z”换回“ a”即可。 我们将在本文中进一步讨论模块化。 看下面的这个小例子:

简单解释公钥密码学

因为4除以3的余数为1。

要解密凯撒的密码D,您需要对每个字母进行计算:

简单解释公钥密码学

如您所知,它不是很安全。 总共进行25次移位,您只需要将文本移位25次,直到找到解密的代码即可,这称为蛮力攻击。 您将加密的文本全部转移25次,直到找到解密的文本。 但是,让我们想象一下这是一个很难的密码-蛮力是不可行的。

例如,您如何告诉您的朋友您使用的是9班次? 您必须以某种方式将其传达给他们。 可以收听任何形式的通信-无论是写信还是去距离最近城镇30英里的瑞士的一片隐蔽森林,并告诉您的朋友。

后者不太可行,但是比告诉纽约时报广场的朋友要安全得多。

现在,想象一下,您将午餐带入了一个特殊的便当盒,就像托儿所以来一样。 有人偷了你的食物和你的饭盒。 您不介意丢掉食物,但是您确实想要午餐盒。 您想要一种让他们安全地归还午餐盒而又不知道是谁带走的方式的方法,因为这样可以减轻他们的压力。

您将一个带锁和钥匙的盒子放在员工室。 您将钥匙的副本提供给办公室中的每个人,并希望能做到最好-有人将午餐盒放回盒子中,以将其退回。

简单解释公钥密码学

不幸的是,每个人都拥有的钥匙也能解锁和锁定盒子。 这意味着有人可以解锁盒子并重新偷走您的午餐盒。

我们需要找到一种方法来摆脱共享**的想法,摆脱“任何**都可以锁定和解锁”的想法,这就是不对称密码技术的来龙去脉。

非对称密码学

简单解释公钥密码学

您在此盒子上安装了一个非常锁,其中有两个单独的钥匙。 第一个键????只能顺时针旋转,从A (锁定)到B (解锁)再到C (锁定)。

第二个键????️只能逆时针旋转,从CB再到A。 您选择第一把钥匙并自己保管。 这称为私钥。 第二个**称为公共**。 此**已分发给办公室中的每个人。 您希望每个人都拥有此**。

当有人返回您珍贵的午餐盒时,他们可以将其保留在此框中。 所有公共**可以做的就是锁定盒子。 您的私钥是唯一可以打开它的**。

这是公钥密码术。 每个人都知道,如果他们在盒子里放东西并锁定它,只有您才能用私钥打开它。

使用对称加密,每个人只要拥有**就可以打开您的盒子。 现在,除了您之外,没有人可以打开盒子。

公钥密码术最初是由Whitfield-DiffieJames Ellis提出的 (Ellis首先被发现,但他没有出版,Whitfield-Diffie首先发表了)。 Ellis和Whitfield-Diffie都认为公钥密码学可以在理论上起作用,但从未设法弄清它在实践中如何起作用。

有效的公共**加密系统的产生归因于Rivest–Shamir–Adleman (RSA)或Clifford Cocks 像上面一样,科克斯首先发现了,但是他没有发表。 Rivest–Shamir–Adleman首先发表。

让我们看一下这是如何算术的。

公钥密码学背后的数学

虽然盒式模拟是物理的,但我们将回到加密消息的方式,就像使用Caeser Cipher一样。

简单解释公钥密码学

当您将公用**(K +)应用于加密的消息,然后将私钥(K-)应用于加密的消息时,您将获得纯文本消息。 我们也在寻找以下属性:

计算上很容易:

  • 生成一组**
  • 使用这些**加密/解密

但这在计算上还不可行:

把信息变成数字

我们想将一条消息变成数字。 以前,我们为每个字母分配一个数字,A = 1,依此类推。 美国信息交换标准码 (ASCII)是所有英文字母和大多数符号及其关联的ASCII码和二进制输出的表格。

当您按键盘上的某个键时,键盘会将其转换为Ascii,因为数字比计算机上的字母更容易使用。 如果您想了解有关ASCII的更多信息,请观看视频

简单解释公钥密码学

让我们加密“猫”这个词。 根据Ascii的二进制描述,这是:

简单解释公钥密码学

如果将它们加在一起并转换为10,则得到4430123。对于我们的示例,我们将研究Rivest–Shamir–Adleman(RSA),一种公共**密码,如何计算公共和私有**。 我们还将使用更小的数字,因此数学并不难读。

下面是我为将ASCII转换为二进制而创建的计算器。 在我的网站( https://skerritt.blog/how-does-public-key-cryptography-work/ )上更好地查看它。

RSA

  1. 选择2个大质数p&q。

质数是只有2个因数 1和本身的数。 为了方便起见,我们将选择5和7,不是大质数,而是小的。

2.计算n = pq,z =(p-1)(q-1)

简单解释公钥密码学

3.选择e(其中e <z),以使e与z没有公因数。

e = 5

5与24没有公因数,并且小于24。

4.选择d,以使ed_1被z整除。

最简单的方法是遍历代码中所有可能的d值。 这段代码是用Functional Python编写的,但是语言和范例并不重要。

由于我们使用的数字非常小,因此存在重叠。 e和d均为5。我们将d设置为29,只是为了避免重叠。

d = 29

5.公用**为(n,e)。 私钥是(n,d)

简单解释公钥密码学

下面是生成RSA**的代码。 注意,如上所述,我们在d上有p = 5和q = 7的重叠。

为了发送加密的消息,Bob为消息m和**e计算C = m ^ e mod n。 为了解密该消息,爱丽丝计算m = c ^ d mod n。

加密“猫”可得42分mod 35 = 7。

解密“猫”可以得到4430123。

然后,要发送消息m,Bob计算c = m ^ e(mod N)并将其发送给Alice,Alice使用她的私钥d(m = c ^ d(mod N))解密消息。

为什么行得通?

素数分解。 将两个质数相乘很容易,但是要找出用来构造该质数的质数却很难。 您可以轻松地将这两个乘在一起:

简单解释公钥密码学

但是,如果我给您992,474,117并告诉您找到用于生成该数字的质数,则在计算上不可行。 当您意识到所使用的质数非常非常大时,甚至还更多。

这被称为活板门功能或单向功能。 尽管很容易通过一种方式进行操作,但在计算上却不可行通过另一种方式进行操作。 煮鸡蛋是一种单向功能,因为它很容易煮鸡蛋,但无法煮鸡蛋。 让我们更深入地研究数学并探索模块化算术。

返回模块化算术

想象一个有限范围的数字,例如1到12。这些数字排列成一个圆圈,就像时钟一样(因此,模块化算术有时也称为时钟算术)

简单解释公钥密码学

整天数13。 您达到12,然后需要再数1,因此回到1。模块化算术仍然定义为除法的余数,但是也可以将其定义为(并且更通常地定义为)时钟。

使用模块化算术的函数趋向于不稳定地执行,这有时使它们成为单向函数。 让我们以一个常规函数为例,看看它成为模块化算术函数时如何工作。

3 ^ x

当我们将2插入此函数时,我们得到³²=6。插入3并得到³³= 9

此功能很容易反转。 如果给定9,由于³³= 9,我们可以说该函数的输入为3。

但是,添加了模块化算术后,它的行为并不明智。

图片我们有这个公式:

3 ^ x mod 7 = 1

您如何找出x是什么? 您不能将mod放在另一侧,因为实际上并没有模块化算术的逆函数。 那猜猜呢? 让我们输入5:

MOD 7 = 5

好的,那太大了。 您可能想降低一点,也许是4或3,但这实际上是错误的方向。 当x为6时,等于1。

在正常的算术中,我们可以测试数字并了解我们是变暖还是变冷,但是模块化算术并非如此。

通常,逆模算术最简单的方法是为所有x值编译一个表,直到找到正确的答案。 尽管这可能适用于较小的数字,但是对于较大的数字,在计算上是不可行的。 这就是为什么模块化算术被称为单向函数的原因。

如果我给您一个数字(例如5787)并告诉您找到它的功能,那将是不可行的。 实际上,如果我让您能够在函数中输入任何数字,那仍然很难。 我只花了几秒钟就完成了这个功能,但是要弄清楚x是什么,可能要花上几个小时甚至几天。

RSA是一种单向功能。 尽管执行此功能相对容易,但在计算上不可行执行该功能的相反操作并找出键是什么。 不过,如果您知道一些数字(例如N),则可以反向进行RSA加密。

让我们谈谈N

回想一下之前我详细介绍了RSA算法的工作原理。 有一个数字,$ n $。 这个n很特殊,因为在某些情况下n可以使此单向函数可逆

N是2个质数的乘积。 正如我们前面所看到的,如果我们将$ 5 $和$ 7 $相乘,它们将得到:

n = 35

为了使Bob可以向Alice发送消息,他使用Alice的公钥对消息进行加密。 既然消息已加密,那么Alice必须有某种方式对其进行解密。 爱丽丝必须有某种方式来扭转这种状况,而爱丽丝则只能扭转这种状况。 您不能让Eve或Niamh或Hannah对其进行逆转-因为这超过了对其进行加密的地步。

RSA被设计成使知道P和Q(两个素数相乘得到N)的人可以解密该消息。

尽管爱丽丝告诉世界,她的公钥为n = 35,但除了爱丽丝外,没人知道P = 7,Q =5。请注意,为简洁起见,素数故意较小。

您可能会想“很容易猜到35的主要因子是5和7”,这是正确的。 但是,如果数字足够大,则实际上不可能找到p和q。

实际上,使用足够大的数字将p和q相乘本质上是一种单向函数。 在将来,也许不久的将来(随着量子计算机的发明),分解数字变得容易。 数学家已经尝试并失败了数千年,但一直未能找到一种有效的方法来分解数字,因此目前认为它是安全的。

让我们进一步研究数学

好吧,让我们看看模数如何在所有这些方面起作用。 您了解了乘法的工作原理以及模数的工作原理。 但是其他方程呢? 他们是干什么的?

让我们使用Euler和Fermate的身份来演示解密算法:

对于任何整数(M),M相对于n都是质数:
简单解释公钥密码学

这是Euler上位函数,给出小于n的正整数(相对于n质数)的数量。 相对质数是2个数字彼此之间仅共享因子1的地方。 在现代,我们使用Carmichael函数而不是Euler函数,因为Euler函数有时会产生无法使用的数字。 但是,我们使用的是Euler的totient函数,因为它是原始RSA论文使用的函数。

这听起来令人困惑,但让我们对其进行分解。 通过totient函数的基本属性:

简单解释公钥密码学

由于d是互质到φI(N),它具有在整数环乘法逆ë模$φ(n)的。 这意味着,只要对使用的数字有所了解,我们用于RSA的公式就可以颠倒(陷阱门可以颠倒)。

没有这个特殊的数学属性,如果您知道所使用的一些数字,就无法逆转加密并找出密文。

加密算法c = m ^ e mod n的模乘逆是m = c ^ d mod n。 所有这些数学都建立了这一点。 模块化算术和单向函数在这里大量使用。 为了加密,您计算c。 为了解密,您需要计算m。 这两个都需要n的知识,这是我们前面提到的特殊数字。

如果您想了解有关RSA数学的更多信息,我强烈建议您阅读易读的原始RSA论文

认证方式

您如何证明鲍勃发送的消息实际上是鲍勃发送的,而不是夏娃发送的消息? 您需要一种对它们进行身份验证的方法。 在现实世界中,我们使用签名进行身份验证。 尽管可以伪造这些密码,但是您可以使用生物识别扫描仪进行身份验证,但是可以抬起并复制指纹。

您可以使用密码,但是再次类似于Caeser密码及其单**是无用的,使用单**的身份验证方法并不是那么完美。

您可以使用密码,但是又很像Caeser的密码及其单**是无用的,使用单**的身份验证方法也不尽人意。

简单解释公钥密码学

假设鲍勃想向爱丽丝证明鲍勃写了他发给她的消息。 鲍勃发送其原始消息,并带有其私钥(K-)的消息的加密版本。 爱丽丝使用鲍勃的公钥(K +),该公钥使用上面的公式将加密的消息转换回普通消息。 然后,爱丽丝检查鲍勃发送的消息以及从加密消息中获得的消息。 如果它们匹配,那么她可以确定具有Bob私钥的人(可能是Bob)发送了它。

此方法很麻烦,因为如果Bob用他的私钥加密他的消息,那么任何人都可以用他的私钥读取它。 同样,证明鲍勃发送了某些东西在计算上也很昂贵。 这就是为什么我们创建消息摘要并对其进行加密以验证Bob的原因。 消息的摘要是使用哈希函数完成的。

要了解有关散列函数的更多信息,我写了一篇姐妹文章, 在这里对其进行解释。

返回密码学

通过加密消息的哈希,我们加快了加密消息的过程,这使身份验证快得多。 现在,让我们对鲍勃恶作剧。

我们向一家比萨店创建了一封电子邮件订单,要求提供4个意大利辣香肠比萨饼。 我们使用我们的私钥在此电子邮件上签名。 我们向披萨店发送了我们的公钥,但是我们告诉他们,鲍勃的电话已死,而我们的公钥实际上是鲍勃的公钥。

比萨店会验证签名并将4个意大利辣香肠比萨饼????发送给Bob。 最糟糕的是,鲍勃根本不喜欢意大利辣香肠。 这就是证书颁发机构起作用的地方。

证书颁发机构(CA)将公钥绑定到特定实体。 该实体向CA提供身份证明,然后CA创建将该实体与其公钥绑定的证书。 这样做的目的是使信任摆脱对个人的公钥信任。 您仍然必须信任组织,但是许多人发现信任组织比信任个人更好。

包含实体公钥的证书由CA数字签名。 该签名是CA所说的“这是实体公钥”。

简单解释公钥密码学

当爱丽丝想要鲍勃的公钥时,她将获得鲍勃的证书。 然后,她将CA的公钥应用于Bob的证书,以获取Bob的公钥。

简单解释公钥密码学

Cloudflare在这里有关于证书颁发机构的精彩文章。

具有良好隐私性的安全电子邮件

菲尔·齐默尔曼Phil Zimmerman)发明了电子邮件加密的事实上的标准- 很好的隐私 (PGP)。 Zimmerman在PGP中使用了RSA。 RSA已获得专利,他没有得到RSA Inc(拥有专利的公司)的许可,无法使用RSA发布另一种密码。

齐默尔曼(Zimmerman)还是美国联邦进行为期3年调查的目标,因为当时加密程序被美国法律视为弹药。 当被问及出版PGP是否所有麻烦都值得时,他他“不后悔”。 让我们看一下这曾经是非法算法的工作原理。

当爱丽丝想向鲍勃发送机密电子邮件时,她:

  1. 生成随机对称私钥K-。
  2. 用K-加密她的电子邮件(以提高效率)
  3. 还用Bob的公钥加密K-。
  4. 爱丽丝对加密的邮件进行数字签名。
  5. 爱丽丝都给鲍勃
简单解释公钥密码学

和她的数字签名。

爱丽丝总共使用三个键。 她的私钥,鲍勃的公钥以及新创建的对称**。

简单解释公钥密码学

这种用公共**加密对称**的想法称为混合加密系统 一些电子邮件可能非常大,用公共**系统加密这些电子邮件将花费很长时间。

使用对称**系统(例如AES) ,很难**(但不如RSA难)。 用公共**加密AES**(仅加***,而不加密整个电子邮件)。 这样,接收者可以应用其私钥并找出AES对称**来解密电子邮件。

使用PGP的人并不多,因为设置起来很困难。 至多,您需要下载可信任的程序才能正确实现PGP。 在2018年, 显示具有设置启用PGP的电子邮件客户端(例如Apple Mail,Thunderbird和Outlook)可能被强制显示未加密版本。

更不用说寻找一个人在未加密电子邮件网络上发送加密电子邮件的可疑性。 默认情况下,唯一启用PGP的电子邮件客户端(和地址提供商)是ProtonMail,但即使如此,它也仅适用于Proton-to-Proton电子邮件,您必须信任公司才能正确实现它。

简单解释公钥密码学

结论

密码术已经使用了数千年,几乎是人类拥有秘密的时间。 在我们不断努力的秘密中,除了少数几个人以外,我们发现这种神奇的算法效果很好。 毫无疑问,在300或400年中,它会被打破,就像Caeser认为他的密码永远不会被打破一样。

嘿????想订阅我的博客并保持与该博客相似的最新消息吗? 订阅下面的我的电子邮件列表。 我不会向您发送垃圾邮件。 我只会向您发送与此类似的帖子????✨

如果您觉得自己很慷慨,我可以使用PayPal甚至Patreon 我是一名大学生,在业余时间写这些文章。 该博客是我的全职工作,因此感谢所有捐款

From: https://hackernoon.com/public-key-cryptography-simply-explained-e932e3093046