非对称encryption中的encryption和签名有什么区别?

encryption一些数据与签署一些数据(使用RSA)有什么区别?

这是否简单地扭转了公私钥的作用?

例如,我想用我的私钥生成消息,所以只有我可能是发件人。 我希望我的公钥被用来读取消息,我不在乎谁读他们。 我希望能够encryption某些信息并将其用作我的软件的产品密钥。 我只关心我是唯一能够产生这些的人。 我想将我的公钥join我的软件来解密/读取密钥的签名。 我不在乎谁能读取密钥中的数据,我只关心我是唯一可以生成密钥的人。

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

encryption时,您使用他们的公钥写信息,并使用他们的私钥读取它。

签名时,您使用您的私钥编写消息的签名,并使用您的公钥来检查它是否属于您的私钥

我想用我的私钥生成消息,所以只有我可能是发件人。

我希望我的公钥被用来读取消息,我不在乎谁读他们

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

我希望能够encryption某些信息并将其用作我的软件的产品密钥。

我只关心我是唯一能够产生这些的人。

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

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

我想将我的公钥join我的软件来解密/读取密钥的签名

您可能需要从Verisign或Thawte等商业提供商处购买公钥证书,以便人们可以检查没有人伪造软件并用您的公钥replace您的公钥。

在RSAencryption中,当您生成一个密钥对时,您select哪一个作为公钥是完全任意的,哪一个是私钥。 如果你用一个进行encryption,你可以用另一个进行解密 – 它可以在两个方向上工作。

所以,看看如何用接收者的公钥来encryption消息是相当简单 ,这样接收者就可以用他们的私钥对它进行解密。

签名certificate签名者具有与某个公钥匹配的私钥。 为此,只需使用该发件人的私钥对消息进行encryption即可,并将encryption版本与明文版本一起使用。 要validation发件人,请解密encryption版本,并检查它是否与明文相同。

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

但是,这意味着将传输的大小加倍 – 明文和密文一起(假设您希望对validation签名不感兴趣的人阅读消息)。 所以通常情况下,通过创build明文的散列来创build签名。 虚假散列不能被创build是很重要的,所以使用诸如SHA-2的encryption散列algorithm。

所以:

  • 要生成一个签名,从明文中做一个散列,用你的私钥encryption它,把它包括在纯文本中。
  • 要validation签名,请从明文中进行散列,使用发件人的公钥对签名进行解密,检查两个哈希是否相同。

签名产生一个“散列”与您的私钥,可以用您的公钥进行validation。 文本发送清晰。

encryption使用接收者的公钥来encryption数据; 解码是用他们的私钥完成的。

所以,密钥的使用是不会颠倒的(否则你的私钥将不再​​是私人的!)。

是的,认为签署数据是给你自己的蜡印,没有其他人。 这样做是为了达到完整性和不可否认性 。 encryption是没有人能看到的数据。 这是为了保密 。 参见维基百科http://en.wikipedia.org/wiki/Information_security#Key_concepts

签名是使用您的私钥签名的邮件的散列。

签名表示您确实是签名对象的来源或担保。 不过,每个人都可以阅读这个对象。

encryption意味着只有拥有相应私钥的用户才可以读取它,但是如果没有签名,则不能保证您在encryption对象的后面。

您正在描述如何以及为什么在公钥encryption中使用签名。 请注意,签名(或encryption)其他人提供的任意信息是非常危险的 – 这可以攻击可能危及您的密钥的algorithm。

在你的场景中,你不encryption的非对称encryption的意思; 我宁愿把它称为“编码”。

所以你把你的数据编码成二进制表示,然后用你的私钥签名。 如果您无法通过公钥validation签名,则知道签名的数据不是使用您的私钥生成的。 (“validation”意味着未签名的数据没有意义)

我想上面有混合的信息。 我试图达到与Simucal相同的目的 – 即我想生成一个许可证密钥,其中包含关于谁可以使用该软件以及date范围之间的重要信息等。但我不希望人们能够修改信息来延长他们的许可证期限等。我的第一个方法是使用不对称encryption,但尽pipe上面的一些意见,似乎可以使用公钥或私钥进行encryption,但只能使用私钥解密。 因此,在这种情况下,您将不得不将私钥存储在系统中,以便解码和检查许可证密钥…使系统非常不安全,因为任何人都可以生成自己的修改的许可证信息并使用公共或私钥(其中之一将存储在系统二进制文件中)。 当然,对称encryption也具有相同的安全风险。

正如上面的许多评论所指出的,签署似乎是这种情况下的前进方向,但我还没有find一个好例子。 有没有人知道一个教程或在线演示,提供了这种方法的运行? 谢谢,克里斯

在function上,您使用公钥/私钥encryption来确保只有接收者可以阅读您的信息。 该消息被encryption,然后使用接收机的公钥encryption。

使用签名让接收者知道您创build了该消息,并且在传输过程中没有更改。 消息签名是使用您自己的私钥完成的。

至于所使用的algorithm:这将调用素数。 我会做一个search谷歌更好的解释。

在提问者意图使用软件许可解决scheme的内容中回答这个问题的要求是:

  1. 没有第三方可以从反编译应用程序产生许可证密钥
  2. 软件密钥的内容不需要安全
  3. 软件密钥不是人类可读的

一个数字签名将解决这个问题,因为原始数据,使得密钥可以用私钥签名,这使得它不是人类可读的,但是如果被反向devise则可以被解码。 但私钥是安全的,这意味着没有人可以为您的软件颁发许可证(这是重点)。

请记住,您无法阻止技术人员移除产品上的软件锁。 所以如果他们不得不破解每个版本的发布。 但是,您真的不希望他们能够为您的产品生成新的密钥,这些密钥可以为所有版本共享。

Python PyNaCl文档有一个“数字签名”的例子,它将适用于这个目的。 http://pynacl.readthedocs.org/en/latest/signing/

以及对NaCl项目造成的影响

Interesting Posts