Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RSA:如何基于密码短语(.net)生成RSA公钥和私钥_.net_Vb.net_Rsa - Fatal编程技术网

RSA:如何基于密码短语(.net)生成RSA公钥和私钥

RSA:如何基于密码短语(.net)生成RSA公钥和私钥,.net,vb.net,rsa,.net,Vb.net,Rsa,我在.net环境(所有版本)中工作,并使用vb.net。我想根据密码短语生成RSA公钥和私钥 我对RSA算法的理解仅限于使用.net ie System.Security.Cryptography.RSACryptServiceProvider类提供的类。我知道如何生成随机RSA公钥/私钥并执行加密/解密 但是.net类不允许我们基于密码短语创建RSA公钥/私钥 虽然我使用VB.NET,但是任何有C、C、C++或任何.NET兼容语言的解决方案都可以通过P/Ung/Kyor或DLL引用来访问解决方

我在.net环境(所有版本)中工作,并使用vb.net。我想根据密码短语生成RSA公钥和私钥

我对RSA算法的理解仅限于使用.net ie System.Security.Cryptography.RSACryptServiceProvider类提供的类。我知道如何生成随机RSA公钥/私钥并执行加密/解密

但是.net类不允许我们基于密码短语创建RSA公钥/私钥

虽然我使用VB.NET,但是任何有C、C、C++或任何.NET兼容语言的解决方案都可以通过P/Ung/Kyor或DLL引用来访问解决方案。


提前谢谢

考虑到您需要大约2048位随机性才能开始素性测试(每个潜在素数上有1024位),并且您的潜在素数可能无法通过其素性测试,您的密码短语需要非常长才能提供足够的熵来生成好的密钥

让我们假设键盘上大约有94个键可以生成字符,并进一步假设用户实际上会随机点击它们。(这不是一个好的假设,但请容忍我。)

这就是每个字符的熵比特数
log(94)/log(2)=6.55。要获得2048位的熵,您需要请求313个字符长的密码短语:
2048/6.55…==312.45

您认为您的用户对于被要求使用300多个字符的密码短语会有什么感觉?记住,这是在乐观的假设下,用户会随机点击94个符号中的每一个;对我来说,这似乎不太可能。我认为40多个字符将是人们创造力的真正极限:26个字母,10个数字,以及不需要移位的标点符号。您的密码短语中大约有384个字符


请坚持使用随机生成的密钥,其中有一位非常聪明的人负责收集熵来为伪随机数生成器播种。

据我所知,Rsa密钥从不基于密码短语。你只能用密码保护RSA密钥。

也许你应该考虑像AES那样的对称密钥加密,在这里,密码是有意义的。您提到这是供内部使用的,您真的需要RSA吗?如果是这样的话,您可能想做的是保护RSA私钥文件,您可以通过AES加密该文件并使用该文件密钥的密码短语来实现这一点。您应该始终使用软件生成RSA公钥/私钥对。

如果您不需要公钥加密,就不需要RSA


使用对称加密和基于密码的密钥派生功能(例如,使用)。它将更快、更安全。

您究竟为什么要基于密码短语生成RSA密钥?不必首先交换发送方和接收方的公钥即可进行RSA加密和解密。您不想使用RSA来实现这一点。您需要使用对称加密和基于密码的密钥派生函数(如PBKDF2)。可能重复@CodeInChaos,对此表示抱歉。在发布我的问题之前,我做了搜索,但我错过了那个问题。然而,这个问题也没有解决办法。谢谢你的回答。用于根据密码短语生成RSA公钥/私钥的函数将由我的类在内部使用,而不是供最终用户使用。@sarnold,只是补充一下,随机性和密码短语长度的问题可以安全地忽略,因为我的类可以确保所需的任何长度,并且可以通过提供的另一个加密服务确保随机性@Gens,那么这些密钥在什么意义上是“基于”密码短语的呢?我的意思是,如果你想让用户向池中加入一些熵,这很好,但似乎不是获取熵的特别有效的方法。@Gens,在看到你所做的其他更新之后,我认为mgrobner的答案可能最适合您的需要。+1对称密钥加密正是您仅基于密码短语创建公钥时得到的。想一想,你打算如何分享密码短语?将此安全通道用于随机创建的对称密钥。@Stephan B,该密码短语还包含用户专用的唯一数据,用户的PC硬件和预装软件特定数据。@Stephan B:假设我把问题转过来:与使用基于密码的对称加密保护私钥相比,每次基于密码短语重新生成私钥有什么错?(不同于显而易见的是,它要慢得多)。想象一下,一台设备没有像早期智能手机那样易于使用的长期存储设备。@GregS:一台没有存储设备的设备,那将是唯一使用这种设置的地方。我仍然相信对称密钥会更合适:它们需要更少的熵来实现同等的安全性,计算速度更快,而且不需要发明自己的加密函数。此外,哪款没有存储的早期智能手机可以在适当的时候生成大小合理的rsa密钥?;)