RSA 应用于数字签名的问题
最近在做利用Sha256对文件进行摘要之后利用RSA加密获得签名的小模块。但是遇到一个问题,望高手指教。
我在一些开源的代码上发现其为了实现对摘要的签名,会需要用到私钥N,E。这个我可以理解。但是却还会需要用到两个质数P、Q(还有一些中间变量的参数)。我不懂的是用RSA来签名的时候P、Q是必须的吗?我在开源的代码PolarSSL (http://www.polarssl.org)中发现其需要用到,在书《精通PKI网络安全认证技术与编程实现》上的第一部分的第无章节的实例上在使用其签名的时候也是先调用密钥生成的函数先生成密钥。
所以问题一:难道在签名一个文件的时候就都需要进行一次密钥对的生成吗?下一次签名另外一个就又再生成一个密钥对?
我觉得上面的思路应该是错的,因为不然每次都要生成密钥对,那怎么实现其不可抵赖性呢?
所以我就想,如果真需要用到p、q,那就是在第一次生成密钥对的时候就保存了p、q。那样下次需要用的时候就可以直接调用。
但是问题又来了。
问题二:如果这样,那p、q保存在哪里呢?CA认证中心?不可能啊,如果在CA则有人要签名的时候必然需要在网上传递p、q。自然不安全。如果保存在本地,那就是说这个签名只能在固定电脑上用,而且还不能重装系统什么的。所以我也觉得不靠谱。
故,问题:
问题三:那到底在对其签名的时候需不需要p、q。如果不需要,又是怎么做的?
求高手帮助啊。时间很紧。
[解决办法]
你可以想简单点
P,Q即公钥和私钥
在签名的时候,用P,Q进行签名
但是在验签和时候只用公钥
所以验证的时候只要有公钥(证书)即可
因此公钥(证书)会随这个签名一起传递
CA只要根据证书的hash值保证证书的合法性就可以,私钥是不会传递的
[解决办法]
P ,Q是两个比较大的素数,n=P*Q是公钥,随文件一起传送。P,Q两个就是加密和解密密钥了。
[解决办法]
在RSA加密算法中,生成两个大的素数的运算量是非常大的,所以不可能做到一密一钥。P和Q用加密盘,或者其他媒介保存。在使用的时候连接到电脑上就可以使用。。
[解决办法]
奉劝楼主不要把有限的生命浪费在无限的加密解密死循环中!