加密某些数据与签署某些数据(使用RSA)之间的区别是什么?

它只是颠倒了公共-私有密钥的角色吗?

For example, I want to use my private key to generate messages so only I can possibly be the sender. I want my public key to be used to read the messages and I do not care who reads them. I want to be able to encrypt certain information and use it as a product-key for my software. I only care that I am the only one who can generate these. I would like to include my public key in my software to decrypt/read the signature of the key. I do not care who can read the data in the key, I only care that I am the only verifiable one who can generate them.

签名在这种情况下有用吗?


当前回答

在建立安全通信时,有两个截然不同但又密切相关的问题

加密数据,以便只有授权人员才能解密和读取数据。 核实发件人的身份/认证。

这两个问题都可以使用公钥密码学优雅地解决。

一、数据加密与解密

Alice想要给Bob发送一条没有人能看到的消息。

Alice用Bob的公钥加密消息并发送出去。 Bob接收消息并使用他的私钥对其解密。

注意,如果A想向B发送消息,A需要使用Public B的密钥(对任何人都是公开的),并且都不是公开的 也没有A的私钥。

因此,如果你想给我发送消息,你应该知道并使用我提供给你的公钥,只有我能够解密消息,因为我是唯一有权访问相应私钥的人。

2验证发件人的身份(身份验证)

爱丽丝想再给鲍勃发一条消息。使用上述方法解决了数据加密问题。

但是,如果我坐在Alice和Bob之间,向Bob介绍自己是Alice,并将我自己的消息发送给Bob,而不是转发Alice发送的消息呢?尽管我不能解密和读取Alice发送的原始消息(这需要访问Bob的私钥),但我劫持了他们之间的整个对话。

Bob是否有办法确认他收到的消息实际上是Alice发送的?

Alice用她的私钥签署消息并发送出去。(实际上,签名的是消息的哈希值,例如SHA-256或SHA-512。) Bob接收并使用Alice的公钥验证它。由于Alice的公钥成功验证了消息,Bob可以推断消息已由Alice签名。

其他回答

在建立安全通信时,有两个截然不同但又密切相关的问题

加密数据,以便只有授权人员才能解密和读取数据。 核实发件人的身份/认证。

这两个问题都可以使用公钥密码学优雅地解决。

一、数据加密与解密

Alice想要给Bob发送一条没有人能看到的消息。

Alice用Bob的公钥加密消息并发送出去。 Bob接收消息并使用他的私钥对其解密。

注意,如果A想向B发送消息,A需要使用Public B的密钥(对任何人都是公开的),并且都不是公开的 也没有A的私钥。

因此,如果你想给我发送消息,你应该知道并使用我提供给你的公钥,只有我能够解密消息,因为我是唯一有权访问相应私钥的人。

2验证发件人的身份(身份验证)

爱丽丝想再给鲍勃发一条消息。使用上述方法解决了数据加密问题。

但是,如果我坐在Alice和Bob之间,向Bob介绍自己是Alice,并将我自己的消息发送给Bob,而不是转发Alice发送的消息呢?尽管我不能解密和读取Alice发送的原始消息(这需要访问Bob的私钥),但我劫持了他们之间的整个对话。

Bob是否有办法确认他收到的消息实际上是Alice发送的?

Alice用她的私钥签署消息并发送出去。(实际上,签名的是消息的哈希值,例如SHA-256或SHA-512。) Bob接收并使用Alice的公钥验证它。由于Alice的公钥成功验证了消息,Bob可以推断消息已由Alice签名。

在RSA加密中,当你生成一个密钥对时,选择哪一个作为公钥,哪一个作为私钥是完全随意的。如果你用一个加密,你可以用另一个解密——它是双向工作的。

因此,如何使用接收方的公钥加密消息,以便接收方可以使用他们的私钥解密消息是相当简单的。

签名是签名者拥有与某个公钥匹配的私钥的证明。要做到这一点,使用发送方的私钥加密消息就足够了,并将加密版本与明文版本一起包含。要验证发件人,请解密加密版本,并检查它是否与明文相同。

当然,这意味着你的信息不是秘密。任何人都可以解密它,因为公钥是众所周知的。但是当他们这样做的时候,他们已经证明了密文的创造者拥有相应的私钥。

然而,这意味着将传输的大小增加一倍——明文和密文一起传输(假设您希望那些对验证签名不感兴趣的人阅读消息)。因此,签名通常是通过创建明文的散列来创建的。重要的是不能创建假哈希,因此使用SHA-2等加密哈希算法。

So:

要生成签名,请从明文中生成哈希,用您的私钥加密它,并将其与明文一起包含。 要验证签名,请对明文进行哈希,用发送方的公钥解密签名,检查两个哈希是否相同。

您正在描述如何以及为什么在公钥密码学中使用签名。请注意,对他人提供的任意消息进行签名(或加密)是非常危险的——这会使算法受到攻击,从而危及您的密钥。

是的,你可以把签名看作是给你自己的数据盖上别人没有的蜡章。这样做是为了实现完整性和不可抵赖性。加密是为了让其他人看不到数据。这样做是为了实现保密性。参见维基百科http://en.wikipedia.org/wiki/Information_security#Key_concepts

签名是使用您的私钥签名的消息的散列。

加密时,你用他们的公钥写消息,他们用他们的私钥读取消息。

在签名时,你使用你的私钥来写消息的签名,他们使用你的公钥来检查它是否真的是你的。

我想使用我的私钥来生成消息,这样只有我可能是发送者。 我希望我的公钥被用于阅读消息,我不关心谁阅读它们

这是签名,它是用你的私钥完成的。

我希望能够加密某些信息,并将其用作我的软件的产品密钥。 我只在乎我是唯一能产生这些的人。

如果你只需要自己知道它,你不需要弄乱钥匙来做到这一点。您可能只是生成随机数据并将其保存在数据库中。

但如果你想让人们知道密钥确实是你的,你需要生成随机数据,保存在数据库中,并用你的密钥签名。

我想在我的软件中包含我的公钥,以解密/读取密钥的签名。

您可能需要从Verisign或Thawte等商业提供商处购买公钥证书,以便人们可以检查是否有人伪造了您的软件,并将您的公钥替换为他们的。