加密某些数据与签署某些数据(使用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.

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


当前回答

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

RSA仅仅是唯一一个同时支持公钥加密和数字签名的公钥密码系统。

这通常会让初学者感到困惑,因为各种来源/讲师说

RSA解密即RSA签名。 不,它不是!

这种困惑来自教科书RSA

RSA加密教科书; 消息m并计算c = m^e mod n用于加密,m = c^d mod n用于解密。 教科书RSA签名; 消息m,计算sg = m^d mod n进行签名验证,计算m == sg^e mod n进行签名验证。

两者都不安全,在现实生活中也不会使用!

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

不,它不是!

加密

对于RSA加密,必须使用rsasa - pkcs1 -v1_5填充或最佳非对称加密填充(OAEP)。这些填充对消息有开销。例如,PKCS1-v1_5定义为

它的电磁结构是这样的

EM = 0x00 || 0x02 || PS || 0x00 || M.

它们是什么;

PS至少是8个ff块 M是信息 第一个0x00保证EM小于模量。 其余细节,如FF块的大小等可以在rfc 8017节7.2.1中找到

因此,它有一个特殊的信息结构是安全的,最近(2018年)被证明是安全的。填充至少有11个字节的开销。

签名

正确的签名术语是签名和验证。为了实现安全签名,RSA需要RSA- pss(概率签名方案)。结构有点复杂,一张图就能说明大部分情况

一旦您散列消息并正确填充,然后您可以使用您的私钥为填充消息签名!

对于验证,使用签名消息上的公钥并使用填充规则进行验证。

更倾向于OAEP,因为RSASSA-PKCS1-v1_5很难正确实现,尽管它被证明是安全的,但这些不正确的实现在过去一年中引起了许多攻击。


最后来看看康奈尔大学的页面;

RSA签名不是RSA解密

其他回答

在提问者意图将该解决方案用于软件许可的内容中回答这个问题,需求如下:

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

数字签名将解决这个问题,因为生成密钥的原始数据可以用私钥签名,这使得它不能被人类阅读,但如果进行逆向工程,可以被解码。但是私钥是安全的,这意味着没有人能够为您的软件制作许可证(这是重点)。

请记住,您不能阻止技术人员移除产品上的软件锁。所以如果他们必须破解每个发布的版本。但您确实不希望它们能够为您的产品生成可用于所有版本的新密钥。

Python PyNaCl文档中有一个“数字签名”的例子。http://pynacl.readthedocs.org/en/latest/signing/

和氯化钠工程的原因,以C的例子

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

RSA仅仅是唯一一个同时支持公钥加密和数字签名的公钥密码系统。

这通常会让初学者感到困惑,因为各种来源/讲师说

RSA解密即RSA签名。 不,它不是!

这种困惑来自教科书RSA

RSA加密教科书; 消息m并计算c = m^e mod n用于加密,m = c^d mod n用于解密。 教科书RSA签名; 消息m,计算sg = m^d mod n进行签名验证,计算m == sg^e mod n进行签名验证。

两者都不安全,在现实生活中也不会使用!

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

不,它不是!

加密

对于RSA加密,必须使用rsasa - pkcs1 -v1_5填充或最佳非对称加密填充(OAEP)。这些填充对消息有开销。例如,PKCS1-v1_5定义为

它的电磁结构是这样的

EM = 0x00 || 0x02 || PS || 0x00 || M.

它们是什么;

PS至少是8个ff块 M是信息 第一个0x00保证EM小于模量。 其余细节,如FF块的大小等可以在rfc 8017节7.2.1中找到

因此,它有一个特殊的信息结构是安全的,最近(2018年)被证明是安全的。填充至少有11个字节的开销。

签名

正确的签名术语是签名和验证。为了实现安全签名,RSA需要RSA- pss(概率签名方案)。结构有点复杂,一张图就能说明大部分情况

一旦您散列消息并正确填充,然后您可以使用您的私钥为填充消息签名!

对于验证,使用签名消息上的公钥并使用填充规则进行验证。

更倾向于OAEP,因为RSASSA-PKCS1-v1_5很难正确实现,尽管它被证明是安全的,但这些不正确的实现在过去一年中引起了许多攻击。


最后来看看康奈尔大学的页面;

RSA签名不是RSA解密

签名是用您的私钥生成一个“散列”,可以用您的公钥进行验证。文本是明文发送的。

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

因此,密钥的使用不会反转(否则您的私钥将不再是私有的!)。

从功能上讲,您可以使用公钥/私钥加密来确保只有接收者可以阅读您的消息。使用接收者的公钥对消息进行加密,使用接收者的私钥对消息进行解密。

您可以使用签名让接收者知道您创建了消息,并且在传输过程中没有更改。消息签名是使用您自己的私钥完成的。接收方可以使用您的公钥来检查邮件是否被篡改。

至于使用的算法:这涉及到一个单向函数,例如维基百科。第一个这样的算法使用大素数,但此后又发明了更多的单向函数。

搜索“Bob”,“Alice”和“Mallory”在互联网上找到介绍文章。

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

加密意味着只有拥有相应私钥的人才能读取它,但如果没有签名,就不能保证您是加密对象的幕后黑手。