加密某些数据与签署某些数据(使用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签名。
在提问者意图将该解决方案用于软件许可的内容中回答这个问题,需求如下:
没有第三方可以从反编译应用程序产生许可密钥
软件密钥的内容不需要是安全的
软件密钥不是人类可读的
数字签名将解决这个问题,因为生成密钥的原始数据可以用私钥签名,这使得它不能被人类阅读,但如果进行逆向工程,可以被解码。但是私钥是安全的,这意味着没有人能够为您的软件制作许可证(这是重点)。
请记住,您不能阻止技术人员移除产品上的软件锁。所以如果他们必须破解每个发布的版本。但您确实不希望它们能够为您的产品生成可用于所有版本的新密钥。
Python
PyNaCl文档中有一个“数字签名”的例子。http://pynacl.readthedocs.org/en/latest/signing/
和氯化钠工程的原因,以C的例子