我正在使用.net环境(所有版本)并使用vb.net。我想基于密码生成RSA公钥和私钥。
我对RSA算法的理解仅限于使用.net提供的类,即System.Security.Cryptography.RSACryptoServiceProvider类。我知道如何生成随机RSA公钥/私钥并执行加密/解密。
但是.net类不允许我们根据密码创建RSA公钥/私钥。
虽然我正在使用vb.net,但欢迎任何使用c#,c,c ++或任何.net兼容语言的解决方案做出贡献,因为我可以通过p / invoke或dll引用访问该解决方案。
提前致谢!
答案 0 :(得分:5)
也许您应该考虑像AES这样的对称密钥加密,其中密码短语可以从中获取密钥。你提到这是供内部使用的,你真的需要RSA吗?如果是这样,或许您想要做的是保护RSA私钥文件,您可以通过AES加密该文件并使用密钥的密码来实现。您应始终使用旨在执行此操作的软件生成RSA公钥/私钥对。
答案 1 :(得分:3)
考虑到你需要大约2048位的随机性才能启动你的素数测试(每个势素数为1024位),并且你的潜在素数可能会失败他们的素数测试,你的密码短语需要很长才能提供足够的熵来生成好的密钥。
让我们假设键盘上大约有94个键可以生成字符,并进一步假设用户实际上会随机点击它们。 (不是一个好的假设,但请耐心等待。)
每个字符的log(94)/log(2) == 6.55
位熵。要获得2048位熵,您需要要求长度为313个字符的密码:2048 / 6.55... == 312.45
。
您认为您的用户会被要求提供300多个字符的密码?请记住,这是乐观的假设,用户将随机点击94个符号中的每一个;这对我来说似乎不太可能。我认为40多个字符将成为人们创造力的真实限制:26个字母,10个数字,以及不需要移位的标点符号键。你的密码就是384个字符。
请坚持随机生成的密钥,有人非常聪明地负责收集熵以播种伪随机数生成器。
答案 2 :(得分:2)
据我所知,Rsa密钥永远不会基于密码。您只能使用密码来保护rsa密钥。
答案 3 :(得分:2)