在非对称密码系统的标准使用中,使用公钥进行加密,使用私钥进行解密。

反过来,“用私钥加密”就称为“签名”。

尽管存在术语并且缺乏直接工具,标准工具仍允许实现使用私钥进行加密的加密系统。

谁能清楚地解释为什么这样的解决方案容易受到攻击?

用户案例:

假设 Alice 想以非传统方式向 Bob 发送一些内容:

爱丽丝和鲍勃曾经见过面,爱丽丝给了鲍勃一个由她创建的私钥生成的“公钥”,但她警告鲍勃保守秘密。她对私钥保密,并且从未将公钥提供给其他任何人。

鲍勃能否确定他从爱丽丝收到的消息(假设这些消息是由爱丽丝私钥加密的)只能由他读取(假设他确实对爱丽丝公钥的副本保密)?

如何将这种加密可靠性与传统方式(在我们的例子中,鲍勃向爱丽丝发送消息(由爱丽丝的公钥加密))进行比较?

问题是关于什么的

非对称密钥被命名为“私有”和“公共”这一事实无助于理解我的问题。密钥具有基础属性,是我广播“公钥”,赋予它“公共”属性。在回答之前请先明确这一区别:我没有考虑这些密钥的“公共”和“私有”属性,而是考虑“私钥”加密与“公钥”加密的可靠性。

我不能使用其他术语,即使它在这种特殊情况下会产生误导。

我知道这种情况是非传统的,可能会导致一些不一致,或者不是非对称加密系统的重点,因为鲍勃和爱丽丝在这里共享某种共同的秘密,这不是非对称加密的重点。

我看到几个 Stackoverflow 答案表明“私钥”和“公钥”是可以交换的(只需阅读下面的答案)。对于 RSA 来说情况并非如此,因为从秘密密钥生成公钥很简单,并且保证反过来在计算上不可行。对于非信徒来说,openssl 中使用 RSA 生成密钥的过程是:

  1. 生成密钥
  2. 从秘密密钥中提取公共密钥。

如果“私钥”和“公钥”之间存在如此大的差异,那么“私钥”加密与传统的“公钥”加密之间是否存在可靠性差异?

长选答案中的简短答案

对“私钥”到底是什么的误解对我没有帮助。“私钥”有两种不同的定义。“实用私钥”和“理论私钥”。

理论私钥 根据 RSA 理论,与公钥共享数学对称性:

  • 你无法从另一个推断出一个
  • 无论采用哪种方式,加密都同样可靠

实用私钥 出于效率原因,RSA 工具(如 openssl)包含附加信息,并且通常,公钥的一部分甚至是按惯例设置的。这些假设打破了对称性:

  • 从“实用私钥”得到公钥很简单
  • 但加密仍然同样可靠

有关更多详细信息,请参阅所选答案!如果仍有误解,请评论...

编辑注:

  • 非对称加密系统密钥对经常被宣传为可交换(即使在当前的 stackoverflow 答案中也是如此),我尝试反思这样一个事实:这可能是危险的误解,因为现实生活中的工具并非如此。
  • 添加了用户案例,我希望这能澄清我的问题
  • 添加了最终的“简短答案”
有帮助吗?

解决方案

在非对称密码系统的标准使用中,使用公钥进行加密,使用私钥进行解密。

这取决于谁在做什么。假设爱丽丝想向鲍勃发送一条只有鲍勃可以解码的消息。Alice 使用 Bob 的公钥(根据“公钥”的标准定义,即除其所有者之外的人所知的密钥)对消息进行加密。现在只有知道 Bob 私钥的人(大概唯一知道 Bob 私钥的人实际上是 Bob)才能解密 Alice 发给 Bob 的消息。

如果 Alice 希望 Bob 知道只有她可以发送该消息,则假设 Bob 知道她的公钥,她可以在使用 Bob 的公钥加密消息之前或之后使用自己的私钥加密该消息。假设她用自己的私钥加密消息,然后用 Bob 的公钥加密结果。要读取消息,Bob 必须使用他(Bob)的私钥解密消息,然后使用 Alice 的公钥再次解密结果。如果他现在读到的是合理的文本,他就知道是同时知道 Alice 的私钥(大概是 Alice)和他的公钥(可能是任何人)的人发送了该消息。

实际上,非对称算法的计算成本很高,因此您真正要做的就是选择适当长度的随机会话密钥和商定的标准对称加密算法(例如 AES)。然后,使用(相对较快的)对称算法对主消息进行加密,并作为消息的一部分发送。消息的另一部分是加密的或双重加密的随机会话密钥。Bob可以解密消息的会话密钥部分以获得会话密钥;然后他用它来解密消息的主要部分。

请注意,如果您要向许多人发送消息,则可以对消息使用一种适当的加密,然后使用收件人的公钥为每个收件人加密一次会话密钥。每个接收者只能使用属于他们的密钥来解密会话密钥信息,但实际上所有人都可以解密它。如果消息很大(例如 2 MB 的 PDF),那么这比使用每个收件人公钥单独加密消息要经济得多。

反过来,“用私钥加密”就称为“签名”。

不;签名是一项单独的操作。如果你读过施奈尔的《实用密码学”,您会看到作者建议使用一对公钥/私钥对进行加密,并使用第二对进行签名工作。例如,签名使用签名密钥中的私钥对原始消息的固定长度哈希进行加密。任何知道签名密钥的公钥部分的人都可以解密签名以获得原始消息的哈希值。据推测,同一接收者也可以解密该消息(使用签名密钥对的公钥),然后可以检查接收到的消息的散列是否与从签名导出的散列相匹配。任何不匹配都表明存在问题,并且应丢弃该消息。

有很多方法可以完成这些操作 - 取决于安全要求。

但基本点是,一个人知道非对称密钥的私钥,并且可能有很多人知道非对称密钥的公共部分(这是完全安全的)。发送者可以使用接收者的公钥对数据进行加密;发送者也可以使用自己的私钥对其进行加密。接收者可以使用自己的私钥解密收到的消息,如有必要,还可以使用发送者的公钥。


IMNSHO,即使在 2009-09-05T13:00-07:00 左右修正,这个问题也不完全连贯。

您应该阅读“实用密码学”中的第 13 章“RSA”(可能也在阅读了前面的一些章节之后 - 最值得注意的是第 3.3 节公钥加密)。

加密和解密的符号

让我们定义一些用于讨论正统公钥密码学的符号。让我们从基本的对称加密开始:

  • C = E(K,m) 是加密算法 E 使用密钥 K 对(明文)消息 m 生成的加密消息(密文,C)。
  • P = D(K,C) 是解密算法 D 使用密钥 K 在(加密)消息 c 上发现的纯文本消息(纯文本,P)。
  • 作为一个工作系统,m = P,因此 D(K,E(K,m)) = m。

到目前为止,这种表示法适用于对称加密,因为加密和解密都使用相同的 K 值。任何知道 K(以及算法,但 Kerckhoff 原理“秘密在于密钥”意味着您假设攻击者知道算法 - 任何相反的假设都是加密“万金油”)的人都可以解密该消息。

采用非对称加密系统,EA 和DA 是算法A的加密和解密方法。非对称密码的关键区别特征是密钥 K加密 由 E 使用A 与密钥 K 不同解密 由 D 使用A. 。此外,为了实用,推导 K 在计算上必须是不可行的解密 即使你认识K加密 反之亦然。

通过非对称加密,Alice 创建一对密钥,(S爱丽丝, P爱丽丝)。按照惯例,S爱丽丝 是密钥,P爱丽丝 是公钥。请注意,爱丽丝知道这两个密钥。重要的是:

  1. S爱丽丝 和P爱丽丝 是不同的。
  2. Alice 不会让任何其他人知道其中一个密钥 (S爱丽丝);至关重要的是,其他人不知道这些信息。
  3. Alice 可以让其他人知道另一个密钥 (P爱丽丝)而不损害系统的安全性。

类似地,鲍勃将创建一对密钥,(S鲍勃, P鲍勃)。注意:

  • 鲍勃知道钥匙 S鲍勃, P鲍勃, 和 P爱丽丝.
  • 爱丽丝知道钥匙 S爱丽丝, P爱丽丝, 和 P鲍勃.

Alice 向 Bob 发送消息

现在,当 Alice 想要发送消息时,M爱丽丝鲍勃, ,给 Bob,以便 Bob 可以读取它(但其他人不能),她必须使用 Bob 的密钥 P 对其进行加密鲍勃. 。因此,她创建了一条消息:

  • C爱丽丝鲍勃 =EA(P鲍勃, 米爱丽丝鲍勃)

Bob 知道(从外部证据)消息是用 P 加密的鲍勃, ,所以他知道他必须用 S 解密它鲍勃:

  • 中号爱丽丝鲍勃 =DA(S鲍勃, , C爱丽丝鲍勃)

然而,此时,他只知道这条消息来自一个认识他的人。鲍勃 钥匙。除了通过外在证据,他不知道它来自爱丽丝。

如果鲍勃和爱丽丝同意他们的消息必须加密,以便他们都确信收到的消息来自对方,那么双方都必须确信除了爱丽丝之外没有人知道 S爱丽丝 除了鲍勃之外没有人知道 S鲍勃. 。他们还必须相信 P爱丽丝 Bob 知道并且 Bob 必须确信 P爱丽丝 确实属于爱丽丝,而且那个P鲍勃 Alice 知道并且 Alice 必须确信 P鲍勃 确实属于鲍勃。PKI(公钥基础设施)的大部分内容就是建立这些信任关系。

假设满足这些条件,那么 Alice 可以将她的消息发送给 Bob,这样 Bob 就确信只有 Alice 可以发送该消息。如前所述,该机制是双重加密:

  • C1爱丽丝鲍勃 =EA(S爱丽丝,M爱丽丝鲍勃)
  • C2爱丽丝鲍勃 =EA(P鲍勃,C1爱丽丝鲍勃)

Alice发送C2爱丽丝鲍勃 给 Bob(连同一些签名或 MAC 以确认它在传输过程中没有损坏),然后 Bob 计算:

  • D1爱丽丝鲍勃 =DA(S鲍勃,C2爱丽丝鲍勃)
  • D2爱丽丝鲍勃 =DA(P爱丽丝,D1爱丽丝鲍勃)

如果一切按计划进行,D2爱丽丝鲍勃 = 米爱丽丝鲍勃.

RSA 密钥对的机制

RSA 加密算法基于以下事实:如果您有两个公开的数字(它们是一个公钥的两个部分),则指数 e 和模数 n, ,然后给出一条消息 , ,很容易计算 C = e 模组 n. 。然而,在计算上无法推导出 刚刚给出 C (和 en)。但是,如果您知道另一个指数, d, ,那么你可以神奇地计算 r = Cd 模组 n, , 和 r = 如果你已经计算过 e, dn 适当地。计算起来不可行 den 在不知道其他一些信息的情况下。

在 RSA 加密方案下,您开始使用两个(大的)随机确定的素数, pq, ,他们的产品是 n. 。RSA 算法基于这样一个事实:分解因子极其困难 n (决定 pq 刚刚给出 n);如果有人找到一种简单的方法来分解大数,那么 RSA 算法就会立即被破解。

一旦你有 n, ,您需要确定指数 ed 这样:

  • 编辑 = 1 模 t 在哪里 t = LCM(p-1, q-1),LCM 是最小公倍数。

您可以选择两个值之一作为小奇数 - Schneier 和 Ferguson 建议 e = 3,例如。然后你计算 d 使用他们在大约 6 页的书中介绍的一些计算。通常, d 将是一个相当大的数字。然后您可以发布该对(e, n) 作为复合公钥,保留值 (p, q, t, d)秘密作为私钥。给定 en, ,在计算上无法推导出 d 无需先因式分解 n. 。“实用密码学”建议使用两个不同的对(e1, d1) 和 (e2, d2),从相同的值导出 n, ,你在哪里使用 e1 加密消息,以及 e2 用于数字签名;他们甚至建议使用值 3 和 5。


OpenSSL 和密钥生成

我相信您对 OpenSSL 如何生成 RSA 密钥的描述很混乱。

生成过程首先必须生成大的随机素数, pq 在上面的符号中。有一些随机方法可以确定给定的大数是否(可能)是素数;计算两个这样的素数需要一些时间。综合起来,这些首先用来计算 n, , 进而 d (假设 e 是由某些约定建立的)。您在 OpenSSL 中看到的两个阶段正在确定 n, ,然后确定 d.


用户案例剖析

问题说:

假设 Alice 想以非传统方式向 Bob 发送一些内容:

爱丽丝和鲍勃曾经见过面,爱丽丝给了鲍勃一个由她创建的私钥生成的“公钥”,但她警告鲍勃保守秘密。她对私钥保密,并且从未将公钥提供给其他任何人。

到目前为止,一切都很好。“公钥”不是很公开,但这并没有什么坏处。

鲍勃能否确定他从爱丽丝收到的消息(假设这些消息是由爱丽丝私钥加密的)只能由他读取(假设他确实对爱丽丝公钥的副本保密)?

如果加密技术有任何用处,那么可以;只有爱丽丝和鲍勃可以读取爱丽丝用她的秘密密钥加密的消息,因为只有爱丽丝和鲍勃知道与她的秘密密钥相关的公钥。

如何将这种加密可靠性与传统方式(在我们的例子中,鲍勃向爱丽丝发送消息(由爱丽丝的公钥加密))进行比较?

困惑:本节首先讨论 Alice 向 Bob 发送消息;现在您已切换到鲍勃向爱丽丝发送消息。

当鲍勃和爱丽丝见面时,爱丽丝给了鲍勃她的 P爱丽丝 公钥。据推测,鲍勃也给了爱丽丝他的 P鲍勃 公钥。而且这两个公钥的公共流通量都非常有限——这很好,但对系统的安全性来说并不重要。

现在,当鲍勃想要向爱丽丝发送消息时,他可以用她的 P 对其进行加密爱丽丝 公钥,Alice(并且只有 Alice)可以使用她的 S 解密该消息爱丽丝 密钥。或者,Bob 可以用他的 S 加密消息鲍勃 密钥,Alice 可以用 Bob 的 P 解密它鲍勃 公钥。两组加密和解密都可以工作。

问题是关于什么的

非对称密钥被命名为“私有”和“公共”这一事实无助于理解我的问题。密钥具有基础属性,是我广播“公钥”,赋予它“公共”属性。在回答之前请先明确这一区别:我没有考虑这些密钥的“公共”和“私有”属性,而是考虑“私钥”加密与“公钥”加密的可靠性。

使用正确的私钥加密并使用正确的公钥解密与使用正确的公钥加密并使用正确的私钥解密同样可靠。区别在于谁可以执行哪些操作。如果您清楚地了解谁在进行加密、谁在进行解密以及谁知道哪些密钥,那么这些方法的保密性就会变得相当清晰。

我不能使用其他术语,即使它在这种特殊情况下会产生误导。

好吧,你的情况中的“公钥”并不是那么广为人知,但这就是它的不寻常之处。

我知道这种情况是非传统的,可能会导致一些不一致,或者不是非对称加密系统的重点,因为鲍勃和爱丽丝在这里共享某种共同的秘密,这不是非对称加密的重点。

非对称加密方案的要点在于,攻击者(通常称为 Eve,窃听者)是否知道公钥并不重要。只要 Alice 和 Bob 将私钥保密,消息就可以安全地发送。但是,您必须了解,如果 Alice 向 Bob 发送一条仅由 Alice 的密钥加密的消息,则任何知道 Alice 公钥的人(例如 Eve)都可以读取该消息。Eve 无法创建声称来自 Alice 的虚假消息,除非她也知道密钥 - 如果 Eve 发现了 Alice 的密钥,Eve 可以随时假装是 Alice。但她能读懂。如果爱丽丝向鲍勃发送一条仅由鲍勃的公钥加密的消息,则只有鲍勃可以读取该消息(使用他的密钥),但鲍勃无法知道该消息是否确实来自爱丽丝,或者夏娃是否假装发送该消息是爱丽丝。这就是为什么您必须努力确保鲍勃知道只有爱丽丝可以发送该消息,并且爱丽丝知道只有鲍勃可以读取该消息。

其他提示

很简单,因为当您加密某些内容时,您正在屏蔽它,以便只有一个人可以读取它(拥有私钥的人)。您不拥有该人的私钥,您拥有的只是他们的公钥。

如果你用你的私钥加密它,任何人都可以用你的公钥解密它——这就是签名的原理——他们可以知道它是用你的私钥加密的!

更明确地说,“使用私钥加密”意味着要解密,您需要使用公钥。这不是问题,除了 任何人 然后可以解密您的[在此处插入项目],因为公钥就是这样: 民众. 。这没有用 保护 数据,该系统用于 核实 数据。

例如,爱丽丝想向鲍勃发送一个文件(是的,是的,向我开枪)。Alice 不在乎其他人是否可以读取她的文件,这不是机密,但她希望 Bob 确保她发送的内容就是他收到的内容。然后,她可以用她的私钥加密她的文件,而鲍勃可以用她的公钥解密他那一端的文件,确保该文件没有被篡改。但如果其他人正在监听该事务,他们也可以解密并读取该文件。他们就是无法改变它。


对于您提供的情况,更好的方法是在它们相遇时交换密钥,以便实际上有两个密钥对。您自己提到,如果您尝试使用公钥加密,由于算法进行了优化,RSA 实际上不起作用。如果这是其他算法的常见情况,我不会完全感到惊讶。它们被设计为以一种方式运行(私有/加密、公开/解密),并且是一种已知的“昂贵”操作,因此它们在现实中可能会被大量优化。

除此之外,我认为您的计划没有任何安全问题......只要密钥真正保密。私有/公共只是基于典型用法的通用名称。没有什么强迫您完全公开公钥。在您的情况下,您可能喜欢将它们称为“加密密钥”和“解密密钥”,但我不会将每个密钥都用于两者。事实上,我建议您在程序中如此称呼它们,原因由 Jonathan Leffler 在他的评论中给出:

“公钥”是可以由多人共享的东西。这就是“公钥”的定义。其他任何事情都非常令人困惑

我认为您错过了公钥/私钥加密的要点(至少据我所知)。

在您遇到的情况下,对称加密也同样有效。使用非对称加密的原因是规模问题。

假设你不仅有鲍勃和爱丽丝,还有字母表中每个字母的虚构人物。这些人希望能够向任何人发送消息,并确保只有收件人才能阅读。使用普通的对称加密,这需要每个人之间共享密钥,所以如果我们有来自字母镇的 26 个人,那就是 26x25 密钥,每个人都必须记住并保护 25 个密钥。

输入对称(也称为公钥/私钥)加密。现在每个人都有一个私钥和一个公钥,按照正常的规则。要向 Fred 发送消息,您需要查找他的(只有一个)公钥。然后你给他发消息。只有 Fred 可以阅读此消息。在这个计划中,你有 26x2 钥匙,每个人只需要记住并保护好 1 密钥。还需要有公钥来源,但这很容易。

按照您描述的方式使用非对称加密,每组人都有一对密钥,然后需要 26x25x2 键。

再说一次,这与可扩展性有关。对称方案所需的密钥数量为 N^2-N, ,在非对称方案中,只有 2*N.

我不知道是否存在一些版权问题,但我会引用“瓦列里·普里亚米科夫” 从 这个论坛.

Signature 和 Encryption 是两个不同的原型,具有不同 除其他要求外,需要不同填充的安全要求 模式。使用短语“使用公钥解密”密钥是最大的 obuse 布鲁斯广泛使用的密码学史上的术语 Schneier的著作《应用密码学》。这句话本身就是 应该用于描述带有消息的签名方案 恢复(如 RSA)。该短语也用于调整不对称 对旧协议验证模型进行加密和签名,例如 禁止。然而,就其本身而言,这只是一个错误的名字 - 公钥是 众所周知,解密操作具有提供的意义 内容的隐私 - 如果解密密钥是 大家都知道。

即便如此,原始 RSA 仍允许交换公钥和私钥,但在 现实,它们不能互换。私钥解密是 使用 CRT(中国余数定理)实现,提供 4x 更好的私钥操作性能。为此 - 你不需要 只有指数,还有模量的因式分解和乘法 与某些乘积的这些因素相反。公钥只有模数 和指数,不能用于此类计算。

您滥用了这里的术语。

如果密钥确实是私有和公开的,那么是的,用私钥加密的任何内容都只能通过公钥解密,但如果密钥确实是公开的,则任何人都可以解密。

让我们忽略这一点。

这里的问题是鲍勃知道什么。鲍勃真的知道爱丽丝是否将她的公钥发送给其他人吗?如果不是,他就不能确保只有他才能解密该消息。技术中没有任何东西可以确保这一点。任何用爱丽丝的私钥加密的内容都可以用她的公钥解密,因此任何拥有该密钥的人都可以解密。根据公钥的本质,该人应该是任何人。

确保鲍勃的消息只能由鲍勃解密的唯一方法是鲍勃向爱丽丝提供他的公钥,并让爱丽丝用他的公钥加密她想要发送给鲍勃的所有内容,这将使数据无法解密除了鲍勃之外的任何人。她是否也用她的私钥加密相同的数据(即对数据进行签名)不是重点。

当然,鲍勃同样无法知道爱丽丝没有向其他任何人发送完全相同的消息,并使用其他公钥对其进行加密。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top