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用这个私钥加密签名是什么?因此,对于签名,我们使用:
将签名解释为"用私钥加密"是错误的。嗯,大部分是。这是对RSA签名如何工作的传统解释,但实际上它与RSA签名的实际工作方式不匹配,因为存在"填充"之类的问题,即将数据元素转换为大整数并返回。填充的细节对于安全性至关重要——您将不会对加密和签名使用相同的填充。
此外,将签名视为"用私钥加密"的观点只能适用于使用"陷阱门排列"的非对称算法,而许多签名算法则不适用(例如DSA)。所以我建议忘记那个解释,它充其量是令人困惑的。
使用私钥在给定消息上生成签名算法。它通过消息和公钥进行验证;如果公钥是与用于生成签名的私钥相对应的公钥,则验证算法仅在这是同一消息时才会说"确定"(或者更准确地说,假设在计算上无法找到验证算法将要找到的不同消息尽管如此,还是接受。因此签名是一种"非对称"的算法,因为它们使用一个密钥对,一个是公共的,另一个是私有的。
有几个密钥对类型(在实践中,RSA密钥对)可以用于签名和加密(分别使用RSA签名算法和RSA加密算法),虽然它们共享相同的数学核心操作,但它们不是同一种算法。在技术上,您可以对这两个密钥对使用相同的密钥对;但是,不建议这样做:
由于算法之间的交互作用,可能存在隐含的弱点。关于这方面的研究很少。虽然填充差异应该阻止这些,但是没有证据。
加密密钥和签名密钥具有不同的生命周期。有关详细信息,请参阅此答案(简而言之:您要备份加密私钥,而不是签名私钥,因此它们不能是同一个密钥)。
如果在RSA中发现了一些严重的弱点,您将希望用其他算法的密钥替换您的密钥,并且不能保证替换的加密和签名算法仍然能够共享相同的密钥类型。
您只能有一对密钥,并且只能发布一个公钥,该公钥可用于加密发送给您的消息以及检查您创建的消息签名。为了不同的目的,可以使用附加的键/子键来进行更复杂的设置,但这不是必需的。