数字证书:加密和签名之间有什么区别

Digital certificates: What is the difference between encrypting and signing

我对PKI、证书和所有相关的东西都比较陌生。

据我所知,在公钥密码学中,用公钥加密,用私钥解密。只有一个私钥可以对应于任何一个公钥,但事实并非如此。这是正确的吗?还是一对一的映射?

因此,数字签名的工作方式是散列证书的内容,然后用私钥"签名"。然后用相应的公钥验证签名。

所以,这就是我困惑的地方。用公钥加密消息和用私钥签署消息摘要有什么区别?


消息加密和签名的区别

我认为信息安全目标对于实现消息加密和签名之间的区别至关重要。要定义几个目标:

  • 保密:对未经授权的人保密。
  • 数据完整性:确保信息没有被未经授权的方式更改。
  • 消息身份验证(数据源身份验证):证实信息来源。
  • 不可抵赖性:防止拒绝以前的行为。
  • 消息加密提供机密性。

    消息签名将消息源的标识绑定到此消息。它可以确保数据完整性、消息认证和不可否认性。

    我发现第四个目标,不可否认,我发现它是有区别的,所以请允许我详细阐述。爱丽丝可能在某个时间点否认签署了一条消息,或者鲍勃可能错误地声称消息签名是爱丽丝制作的。数字签名允许无偏见的可信第三方(事先商定)解决争议,而无需访问签名者的秘密信息(私钥)。

    您在问题中提到的数字签名系统称为可逆公钥加密的数字签名。总之,任何数字签名方案都应具有以下属性:

  • 签名者很容易计算。
  • 很容易被任何人验证。
  • 它是安全的,从伪造,直到它不再需要(签名寿命)。
  • 至于加密系统,Kerkhoff定义了一组需求,在大多数情况下,这些需求在今天仍然有用。请在维基上阅读。

    密码学中使用的函数类型

    关于用于密钥生成和加密/解密的函数类型,让我们再次给出一些定义:

  • 一对一函数:如果Y中的每个元素都是X中至多一个元素的图像,那么函数f: X -> Y就是一对一。
  • 到函数:如果Y中的每个元素是X中至少一个元素的图像,那么函数f: X -> Y就是到。
  • 双射函数:双射既是一对一的,又是上的。
  • 单向函数:如果f(x)X中的所有元素都容易计算,那么函数f: X -> Y是单向的,但是对于Y中的所有元素Y来说,在计算上找不到任何X这样的f(x) = y
  • trapdoor单向功能:它是一个单向功能,通过对额外信息(trapdoor信息)的了解,可以在Y中找到任何Y,在X中找到X,从而使f(x) = y成为可能。
  • 双射用作加密消息的工具,反向双射用于解密。

    在公钥密码体制和数字签名方案中,采用了陷阱门单向函数来生成密钥对。

    活板门具体实例

    在RSA中,公钥是(e,n),其中n =pqpq是两个大的、不同的质数。e1 < e < (p - 1)(q - 1)范围内随机选择。根据(p - 1)(q - 1)的知识,应用扩展欧几里得算法得到了唯一的私钥d。它是一个活板门单向功能,使我们能够从(e,n)获得d

    如果你不知道(p - 1)(q - 1),仍然想发现d,那么你需要考虑n。如果pq很大,而且选择得很仔细,那么对n进行保理是很难解决的。这是RSA问题(RSAP)。

    但是活动门在哪里?正如你可能已经注意到的,陷阱门是n的因素。如果你知道这些因素,你可以很容易地颠倒单向函数,并显示d


    public keys encrypt, private keys decrypt for encryption and for digital signatures, it is the reverse.
    Tip: Imagine public key as padlock and private key as key which opens the padlock.

    公钥加密或非对称加密的两个最著名的用途是数字签名和公钥加密。在非对称密钥加密方案中,任何人都可以使用公钥加密消息,但只有成对私钥的持有者才能解密。安全性取决于私钥的保密性。

    要使用数字签名或公钥加密,我们必须具有数字标识或数字证书或公钥证书或身份证书。它是用来证明公钥所有权的电子文档。

    • 一种数字签名,其中消息使用发送方的私钥进行签名,并且任何有权访问发送方的公钥的人都可以对其进行验证。此验证证明发送方可以访问私钥,因此很可能是与公钥关联的人。这也确保了消息没有被篡改,因为签名在数学上绑定到它最初所用的消息,并且无论与原始消息有多么相似,实际上任何其他消息的验证都将失败。数字签名的一个类比是用个人蜡封封住信封。消息可以由任何人打开,但唯一印章的存在会验证发送者的身份。

    • 使用收件人的公钥对邮件进行加密的公钥加密。没有匹配私钥的任何人都无法解密消息,因此假定该私钥的所有者和与公钥关联的人是该私钥的所有者。这是为了确保机密性。与公钥加密类似的是一个带有邮件槽的锁定邮箱。邮件槽是公开的,公众可以访问,其位置(街道地址)本质上是公共密钥。任何知道街道地址的人都可以走到门口,通过投币口投下一条书面信息。但是,只有拥有密钥的人才能打开邮箱并阅读邮件。

    enter image description hereIMG-SRC

    • 公钥基础结构(PKI)是创建、管理、分发、使用、存储和吊销数字证书以及管理公钥加密所需的一组角色、策略和过程。

    enter image description hereIMG-SRC注册机构(RA)、证书颁发机构(CA)和验证机构(VA)

    • DES(数据加密标准)和Triple DES(DES的一个更强大的变体)、AES(高级加密标准)是对称密钥密码系统。它使用相同的密钥进行加密和解密。

    • 数字签名算法(DSA)和RSA(Ron Rivest、Adi Shamir和Leonard Adleman)是公钥密码体制,广泛应用于安全数据传输。DSA只提供数字签名,RSA同时提供数字签名和加密。


    消息加密使除相应私钥所有者之外的任何人都无法读取整个消息。

    当您签署一条消息时,它将结合来自密钥的数据创建类似于消息内容校验和的内容,这些数据可以通过公钥进行验证。这不会使任何人都无法阅读邮件,但可以验证邮件确实来自发件人,并且从那以后没有被更改。

    当然,这需要您信任公钥,但这是另一回事。

    第一个问题是:Afaik理论上可以创建公钥冲突,但可能性非常小。


    任何私钥都有一个公钥,而任何公钥都有一个私钥,它总是一对一的映射。

    签署消息只是为消息创建一个指纹,以确保内容没有被更改,但它对消息本身没有影响,消息将永远不会被加密。

    加密消息时,将进行加密。您可以加密消息并同时对其签名。


    正如其他答案中已经提到的,公钥和私钥是相互耦合的。实际上,在许多加密上下文中,您有一对具有特定属性的数字,可以选择要用作私钥的数字和要用作公钥的数字。因此,这里有一定程度的独特性。(细节可能因所讨论的算法而异。)

    但是,在谈论pkis时,您通常不考虑公钥,而是考虑证书,证书本质上是带有公钥的信息包(颁发者、主题、有效期间隔、使用约束等)。创建证书时,当然可以为同一公钥构建不同的证书。

    因此,虽然私钥和公钥本质上是一对一的,但是私钥和证书可能是一对多的。

    也许这就是你一对一困惑的原因。