公钥/私钥认证和签名

4
我正在制作一个单点登录解决方案,以便让我的公司与其他供应商集成。在研究过程中,有一件事情不断地困扰着我。
我对公钥/私钥的理解是,数据始终使用供应商的公钥进行加密,然后他们使用自己的私钥进行解密。到此为止都很好理解。
然而,为了验证消息确实来自于我,我将计算消息的哈希值并使用我的私钥加密哈希值(这个过程也称为签名)。为了验证消息确实来自于我,供应商将使用我的公钥解密哈希值并与未加密的哈希值进行比较。如果它们匹配,供应商就可以确定它来自于我。
那么我的私钥如何用于加密消息呢?公钥又如何解密消息呢?我原来的理解是非对称密钥不能做到这点,即公钥总是加密,私钥总是解密。任何解释都将不胜感激!
3个回答

2

我发现这个链接非常有用: http://www.nusphere.com/products/library/ssl.htm

2007年的Wayback Machine存档:上述nusphere链接.

希望对你有所帮助。 Ohad

编辑

经过2.5年,我发现链接已经失效。所以这个链接也不错.

以防万一,如果从今天起再过2.5年又失效了,这是摘要:

公钥是它名称所示-公共的。通过公共可访问的库或目录向所有人提供。另一方面,私钥必须保密。

由于密钥对是数学相关的,因此使用公共密钥加密的任何内容只能由其相应的专用密钥解密,反之亦然。

公钥密码学因此可以实现机密性。但是,公钥密码学的另一个重要方面是其创建数字签名的能力。


2
加密和签名是两个不同的系统,在某些方面,它们的工作方向相反。
使用公钥加密,任何人都可以使用公钥加密数据。只有私钥的所有者才能解密已加密的消息以恢复数据。
对于签名,只有私钥的所有者才能签署消息。任何人都可以使用公钥验证消息的签名。
“我对公钥/私钥的理解是,数据始终使用供应商的公钥加密,他们使用其私钥进行解密。”
这是正确的。但它仅涵盖了公钥加密,而不是公钥密码学的其他用途,例如签名。
“但是,为了验证消息确实来自于我,我将计算消息的哈希值,并使用我的私钥加密哈希值(此过程也称为签名)。”
实际上,此过程应该仅称为签名。称其为“使用我的私钥加密”非常误导人:它实际上并不是这样工作的。有一种流行的密钥类型(RSA)可用于签名和加密,但即使是使用RSA,签名和解密机制也是不同的。
“为了验证消息来自我,供应商将使用我的公钥解密哈希值并将其与未加密的哈希值进行比较。如果它们匹配,供应商可以确信它来自我。”
这并不完全正确。许多签名算法不是确定性的。验证签名不是通过反转签名过程完成的,而是通过进行一些略微不同的涉及签名、消息和密钥的计算来完成的。
“那么为什么我的私钥用于加密消息...公钥如何解密消息?我以为非对称密钥不允许这样做!即公钥始终加密,私钥始终解密。任何解释将不胜感激..!”
私钥用于签署消息,而不是加密消息。公钥用于验证签名的消息,而不是解密它。

1

对称加密和非对称加密的区别仅在于是否存在私钥和公钥。

然而,在常见的算法中,您可以使用私钥来加密消息,并使用公钥解密,同时您也可以解密使用公钥加密的消息。因此,两种方向都是可行的。


1
是的,这也是根证书的工作原理。浏览器会将服务器提交的证书与浏览器中安装的根证书进行验证。根CA公钥用于解密证书中“加密”的公钥。但是,是否正确地说私钥加密应仅用于签名等用途,并且实际业务数据应始终使用供应商的公钥进行加密? - Iftikhar Ali
根证书基于我在答案中提到的RSA加密算法(http://en.wikipedia.org/wiki/RSA_(algorithm))的概念。但是,您也可以使用业务数据和私钥进行加密。通常情况下,就像您所描述的那样。但理论上,您可以使用密钥对任何内容进行加密和解密。 - blacklwhite
这是不正确的。即使使用RSA,签名和解密也是不同的操作。过程的一部分是相同的(模幂运算),但其余部分(填充)是不同的。 - Gilles 'SO- stop being evil'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接