关于加密:数字签名公钥

Digital signature public key

我是加密新手。

在公钥加密中,我们有一对密钥——一个用于加密,一个用于解密。

如果Alice希望Bob发送她的秘密消息,她将发布她的加密密钥(称为公钥),并将解密密钥保密(称为私钥)。Bob用Alice公钥加密消息,Alice用她的私钥解密Bob的消息。

直到现在,我想我们都同意。

现在让我们看看签名会发生什么。艾丽丝想给鲍勃发一条短信,并签名,以证明鲍勃知道这条短信是艾丽丝的。签名旨在解决身份验证问题。使用公钥加密技术,签名是用爱丽丝私钥加密的消息摘要(例如校验和),由鲍勃用爱丽丝公钥解密。因为只有艾丽丝知道这是私人钥匙,鲍勃可以确定这是艾丽丝发来的信息。

签名的解释如下:

Some Asymmetric Algorithms (public key algorithms) such as RSA allow
the process to work in the opposite direction as well: a message can
be encrypted with a private key and decrypted with the corresponding
public key. If the recipient wants to decrypt a message with Bob's
public key he/she must know that the message has come from Bob because
no one else has sender's private key. Digital signatures work this
way.

我很困惑的是,Alice用这个私钥加密签名是什么?因此,对于签名,我们使用:

  • 同一组密钥,用于将安全消息从Bob发送到Alice,意思是爱丽丝用来解密从Bob Can收到的消息的同一个私钥。用于加密消息摘要,由Alice发送回Bob或…
  • 用于签署Alice消息的额外一对加密/解密密钥,其中Alice发布对的解密密钥。

  • 将签名解释为"用私钥加密"是错误的。嗯,大部分是。这是对RSA签名如何工作的传统解释,但实际上它与RSA签名的实际工作方式不匹配,因为存在"填充"之类的问题,即将数据元素转换为大整数并返回。填充的细节对于安全性至关重要——您将不会对加密和签名使用相同的填充。

    此外,将签名视为"用私钥加密"的观点只能适用于使用"陷阱门排列"的非对称算法,而许多签名算法则不适用(例如DSA)。所以我建议忘记那个解释,它充其量是令人困惑的。

    使用私钥在给定消息上生成签名算法。它通过消息和公钥进行验证;如果公钥是与用于生成签名的私钥相对应的公钥,则验证算法仅在这是同一消息时才会说"确定"(或者更准确地说,假设在计算上无法找到验证算法将要找到的不同消息尽管如此,还是接受。因此签名是一种"非对称"的算法,因为它们使用一个密钥对,一个是公共的,另一个是私有的。

    有几个密钥对类型(在实践中,RSA密钥对)可以用于签名和加密(分别使用RSA签名算法和RSA加密算法),虽然它们共享相同的数学核心操作,但它们不是同一种算法。在技术上,您可以对这两个密钥对使用相同的密钥对;但是,不建议这样做:

    • 由于算法之间的交互作用,可能存在隐含的弱点。关于这方面的研究很少。虽然填充差异应该阻止这些,但是没有证据。

    • 加密密钥和签名密钥具有不同的生命周期。有关详细信息,请参阅此答案(简而言之:您要备份加密私钥,而不是签名私钥,因此它们不能是同一个密钥)。

    • 如果在RSA中发现了一些严重的弱点,您将希望用其他算法的密钥替换您的密钥,并且不能保证替换的加密和签名算法仍然能够共享相同的密钥类型。


    您只能有一对密钥,并且只能发布一个公钥,该公钥可用于加密发送给您的消息以及检查您创建的消息签名。为了不同的目的,可以使用附加的键/子键来进行更复杂的设置,但这不是必需的。