公钥密码学 公钥基础设施

在线公钥解析_在线公钥解析

Liam Macleod在Unsplash上的照片

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

对称密码学

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

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

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

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

凯撒的密码

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

在线公钥解析_人工智能_02

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

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

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

在线公钥解析_在线公钥解析_03

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

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

在线公钥解析_人工智能_04

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

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

在线公钥解析_人工智能_05

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

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

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

现在,假设您将午餐带入一个特殊的午餐盒中工作-与托儿所以来的情况相同。 有人偷了你的食物和你的饭盒。 您不介意丢掉食物,但是您确实想要午餐盒。 您想要他们不知道是谁拿走午餐盒的安全方法,因为这样可以减轻他们的压力。

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

在线公钥解析_在线公钥解析_06

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

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

非对称密码学

在线公钥解析_机器学习_07

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

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

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

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

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

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

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

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

公钥密码学背后的数学

虽然盒子的类比是物理上的,但我们将回到加密消息的过程,就像使用Caeser Cipher所做的那样。

在线公钥解析_python_08

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

计算上很容易:

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

但这在计算上还不可行:

把消息变成数字

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

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

在线公钥解析_机器学习_09

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

在线公钥解析_机器学习_10

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

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

饰品:在任何地方运行代码 浏览器中的Python。 无需安装。 小饰品

RSA

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

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

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

在线公钥解析_在线公钥解析_11

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)

在线公钥解析_在线公钥解析_12

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

饰品:在任何地方运行代码 浏览器中的Python。 无需安装。 小饰品

为了发送加密的消息,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))解密消息。

为什么行得通?

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

在线公钥解析_在线公钥解析_13

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

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

返回模块化算术

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

在线公钥解析_机器学习_14

整天数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都是质数:

在线公钥解析_在线公钥解析_15

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

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

在线公钥解析_密码学_16

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

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

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

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

认证方式

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

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

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

在线公钥解析_人工智能_17

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

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

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

返回密码学

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

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

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

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

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

在线公钥解析_密码学_18

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

在线公钥解析_人工智能_19

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

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

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

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

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

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

在线公钥解析_机器学习_20

和她的数字签名。

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

在线公钥解析_机器学习_21

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

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

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

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

结论

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

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

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

翻译自: https://hackernoon.com/public-key-cryptography-simply-explained-e932e3093046

公钥密码学 公钥基础设施