加密某些数据与签署某些数据(使用RSA)之间的区别是什么?
它只是颠倒了公共-私有密钥的角色吗?
例如,我想使用我的私钥来生成消息,这样只有我可能是发送者。我希望我的公钥被用于阅读消息,我不关心谁阅读它们。我希望能够加密某些信息,并将其用作我的软件的产品密钥。我只在乎我是唯一能产生这些的人。我想在我的软件中包含我的公钥,以解密/读取密钥的签名。我不关心谁可以读取密钥中的数据,我只关心我是唯一可以生成它们的可验证的人。
签名在这种情况下有用吗?
签名是用您的私钥生成一个“散列”,可以用您的公钥进行验证。文本是明文发送的。
加密使用接收方的公钥来加密数据;解码是用他们的私钥完成的。
因此,密钥的使用不会反转(否则您的私钥将不再是私有的!)。
从功能上讲,您可以使用公钥/私钥加密来确保只有接收者可以阅读您的消息。消息是加密,使用接收者的公钥,解密使用接收者的私钥。
您可以使用签名让接收者知道您创建了消息,并且在传输过程中没有更改。消息签名是使用您自己的私钥完成的。接收方可以使用您的公钥来检查邮件是否被篡改。
至于使用的算法:这涉及到一个单向函数比如维基百科。第一个这样的算法使用大素数,但此后又发明了更多的单向函数。
搜索“Bob”,“Alice”和“Mallory”在互联网上找到介绍文章。
是的,你可以把签名看作是给你自己的数据盖上别人没有的蜡章。这样做是为了实现诚信和不可否认。加密是为了让其他人看不到数据。这样做是为了实现保密。参见wikipedia http://en.wikipedia.org/wiki/Information_security#Key_concepts
签名是使用您的私钥签名的消息的散列。
加密时,你用它们的公钥写消息,他们用他们的私钥读消息。
签名时,你使用您的私钥来写消息的签名,他们使用您的公开密码匙来检查它是否真的是你的。
我想使用我的私钥来生成消息,这样只有我可能是发送者。 我希望我的公钥被用于阅读消息,我不关心谁阅读它们
我想使用我的私钥来生成消息,这样只有我可能是发送者。
我希望我的公钥被用于阅读消息,我不关心谁阅读它们
这是签署,它是用你的私钥完成的。
我希望能够加密某些信息,并将其用作我的软件的产品密钥。 我只在乎我是唯一能产生这些的人。
我希望能够加密某些信息,并将其用作我的软件的产品密钥。
我只在乎我是唯一能产生这些的人。
如果你只需要自己知道它,你不需要弄乱钥匙来做到这一点。您可能只是生成随机数据并将其保存在数据库中。
但如果你想让人们知道密钥确实是你的,你需要生成随机数据,保存在数据库中,并用你的密钥签名。
我想在我的软件中包含我的公钥,以解密/读取密钥的签名。
您可能需要从Verisign或Thawte等商业提供商处购买公钥证书,以便人们可以检查是否有人伪造了您的软件,并将您的公钥替换为他们的。
您正在描述如何以及为什么在公钥密码学中使用签名。请注意,对他人提供的任意消息进行签名(或加密)是非常危险的——这会使算法受到攻击,从而危及您的密钥。
在RSA加密中,当你生成一个密钥对时,选择哪一个作为公钥,哪一个作为私钥是完全随意的。如果你用一个加密,你可以用另一个解密——它是双向工作的。
因此,如何使用接收机的公共密钥加密消息,以便接收方可以使用私人密钥解密消息是相当简单的。
签名是签名者拥有与某个公钥匹配的私钥的证明。要做到这一点,用发送者的私钥加密消息就足够了,并将加密版本与明文版本一起包含。要验证发件人,请解密加密版本,并检查它是否与明文相同。
当然,这意味着你的信息不是秘密。任何人都可以解密它,因为公钥是众所周知的。但是当他们这样做的时候,他们已经证明了密文的创造者拥有相应的私钥。
然而,这意味着将传输的大小增加一倍——明文和密文一起传输(假设您希望那些对验证签名不感兴趣的人阅读消息)。因此,通常通过创建明文的哈希来创建签名。重要的是不能创建假哈希,因此使用SHA-2等加密哈希算法。
所以:
在您的场景中,您不使用非对称加密的含义进行加密;我宁愿称之为“编码”。
你把数据编码成二进制表示,然后用你的私钥签名。如果不能通过公钥验证签名,就可以知道签名的数据不是用私钥生成的。(“验证”表示无符号数据没有意义)
签名表明您确实是已签名对象的来源或担保。不过,每个人都可以读取对象。
加密意味着只有拥有相应私钥的人才能读取它,但如果没有签名,就不能保证您是加密对象的幕后黑手。
在提问者意图将该解决方案用于软件许可的内容中回答这个问题,需求如下:
数字签名将解决这个问题,因为生成密钥的原始数据可以用私钥签名,这使得它不能被人类阅读,但如果进行逆向工程,可以被解码。但是私钥是安全的,这意味着没有人能够为您的软件制作许可证(这是重点)。
请记住,您不能阻止技术人员移除产品上的软件锁。所以如果他们必须破解每个发布的版本。但您确实不希望它们能够为您的产品生成可用于所有版本的新密钥。
和氯化钠工程的原因,以C的例子
在建立安全通信时,有两个截然不同但又密切相关的问题
这两个问题都可以使用公钥密码学优雅地解决。
一、数据加密与解密
Alice想要给Bob发送一条没有人能看到的消息。
注意,如果A想向B发送消息,A需要使用Public B的密钥(对任何人都是公开的),并且都不是公开的 也没有A的私钥。< / p >
因此,如果你想给我发送消息,你应该知道并使用我提供给你的公钥,只有我能够解密消息,因为我是唯一有权访问相应私钥的人。
2验证发件人的身份(身份验证)
爱丽丝想再给鲍勃发一条消息。使用上述方法解决了数据加密问题。
但是,如果我坐在Alice和Bob之间,向Bob介绍自己是Alice,并将我自己的消息发送给Bob,而不是转发Alice发送的消息呢?尽管我不能解密和读取Alice发送的原始消息(这需要访问Bob的私钥),但我劫持了他们之间的整个对话。
Bob是否有办法确认他收到的消息实际上是Alice发送的?
加密保留了消息(“一些数据”)的机密性,而签名提供了不可抵免性:即只有签署它的实体才能签署它。还有功能上的差异;继续读下去。
绝对不是。使用相同的私钥进行签名和解密(或者,同样地,使用相同的公钥进行验证和加密)是不允许的,因为你不应该混合使用这些目的。这不是一个数学问题(RSA应该仍然是安全的),而是密钥管理的一个问题,例如,签名密钥应该有更短的生存时间,并在使用之前包含更多的保护。
对于相同的消息,应该使用发送方的私钥进行签名,使用接收方的可信公钥进行加密。通常使用签名后加密,否则对手可以用自己的签名替换签名。同样地,您应该使用接收者的私钥进行解密,并使用发送方的受信任的公钥进行验证。
此外,您应该理解签名生成不使用“私钥加密”。虽然所有的RSA操作都是基于模取幂,填充方案是完全不同的签名生成。此外,在RSA的所有实际应用中,公钥与RSA私钥具有完全不同的属性。
例如,我想使用我的私钥来生成消息,这样只有我可能是发送者。
这就是不可抵赖性,可以通过签名来实现。
我希望我的公钥被用于阅读消息,我不关心谁阅读它们。
公钥应该被认为是所有人都知道的。如果您希望每个人都能阅读消息,那么您只需不加密它们。
签名通常不会影响消息的内容。消息被认为是独立于签名的。这种签名在官方上被称为“带附录的签名”,其中附录就是信息。这是一个有点奇怪的名字,因为信息被认为比上面的签名更重要,但是是的。只有少数签名提供(部分)消息恢复;它们不再经常使用,通常被认为已弃用。
注意,像CMS这样的签名协议可能会部署包含消息和签名的容器格式。在这种情况下,您首先需要从容器中获取尚未加密的消息,就像从普通的.zip归档文件中解压缩文件一样。因此,消息可能从视图中隐藏,在这种情况下不能直接使用。
我希望能够加密某些信息,并将其用作我的软件的产品密钥。我只在乎我是唯一能产生这些的人。
加密用于实现机密性。在过去,RSA签名生成通常被认为是“用私钥加密”。然而,如上所述,操作是完全不同的,后来的标准拼命地尝试将加密和签名生成分开。
我想在我的软件中包含我的公钥,以解密/读取密钥的签名。我不关心谁可以读取密钥中的数据,我只关心我是唯一可以生成它们的可验证的人。
是的,这被称为在公钥中建立信任。但是,保护程序代码与保护消息是完全不同的。你可以执行代码签名,但是你需要一些东西来检查签名在代码之外。有一些操作系统提供这种功能。
比如微软的Authenticode。像iStore和Android应用程序商店这样的应用程序商店可能使用也可能不使用代码签名,但它们提供了一些保证,确保您的应用程序不是克隆的,或者至少不是在商店内克隆的。密码学并非总能解决问题。
保持你的代码不被克隆/修改在所有要困难得多,如果你这样做,你将扎实地在DRM领域。
是的,当然。如果对公钥有信任,它当然可以帮助确保消息仅由您签名。它是否有助于验证你的应用程序代码/集成公钥完全取决于你期望在其中运行代码的环境。
RSA仅仅是唯一一个同时支持公钥加密和数字签名的公钥密码系统。
这通常会让初学者感到困惑,因为各种来源/讲师说
这种困惑来自教科书RSA
教科书RSA加密;
消息m并计算c = m^e mod n加密和m = c^d mod n解密。
m
c = m^e mod n
m = c^d mod n
教科书RSA签名;
消息m并计算用于验证的sg = m^d mod n和用于签名验证的m == sg^e mod n。
sg = m^d mod n
m == sg^e mod n
两者都不安全和它们在现实生活中是没有用的!
不,它不是!
对于RSA加密,必须使用RSASSA-PKCS1-v1_5填充或最优非对称加密填充(OAEP)填充。这些填充对消息有开销。例如,PKCS1-v1_5定义为
它有一个这样的EM结构
EM
EM = 0x00 || 0x02 || PS || 0x00 || M.
它们是什么;
FF
0x00
所以它有一个特殊的消息结构是安全的是否被证明是安全的最近(2018)。填充至少有11个字节的开销。
正确的签名术语是签名和验证。对于安全签名,RSA需要RSA- pss (概率签名方案)。结构有点复杂,一张图就能说明大部分情况
一旦您散列消息并正确填充,然后您可以使用您的私钥为填充消息签名!
对于验证,使用签名消息上的公钥并使用填充规则进行验证。
更倾向于OAEP,因为RSASSA-PKCS1-v1_5很难正确实现,尽管它被证明是安全的,但这些不正确的实现在过去一年中引起了许多攻击。
最后来看看康奈尔大学的页面;