首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从密码创建非对称密钥

从密码创建非对称密钥
EN

Stack Overflow用户
提问于 2013-03-04 14:25:50
回答 2查看 2K关注 0票数 2

我希望允许我的站点上的用户创建一个非对称的私钥和公钥,这样他们就可以:

  • 将公钥上传到网站,这样我的web应用程序就可以加密他们上传的文件。
  • 下载文件并使用本地应用程序和私钥解密它们。

我的问题是,如果用户机器死了,那么他们很可能会丢失私钥。

我的概念是,应用程序,用户下载从网站上提取的文件,也将允许他们生成密钥,供网站使用。

所以我的问题是,是否有可能根据密码创建非对称的私钥对?这将允许用户在需要时重新生成私钥。

EN

回答 2

Stack Overflow用户

发布于 2013-07-10 16:28:50

一种完全按照你的要求行事的方法是:

  1. 定义一个安全级别N,越大,这个过程就越安全,但是越慢。
  2. 生成一个"salt“,并将其与用户的id相关联。
  3. 由于RSA密钥生成需要一个安全的随机数生成器,所以从迭代N开始使用用户的密码和salt与PBKDF2一起生成安全的随机数据。

这个过程应该决定性地生成一个公共/私有RSA密钥对。然而,不这样做的原因是:

  • 这是我做的,AFAIK,这是第一次这个过程将被公开审查。
  • 我不知道PBKDF2是否真的作为一个安全的随机数生成器与RSA一起使用。
  • 它可能是真的,也可能不是真的,PBKDF2保证生成一个公共/私有RSA密钥对将从其中产生的数据。
  • 在实践中,虽然这确实有效,但它需要很长的时间,所花费的时间是基于用户的密码,这是一个用户体验和安全暴露点,需要考虑。

完成你想要做的事情的一个更好的方法是:

  1. 定义一个安全级别N,越大,这个过程就越安全,但是越慢。
  2. 生成一个"salt“,并将其与用户的id相关联。
  3. 生成RSA公钥/私钥对。
  4. 迭代PBKDF2 N次,根据用户的密码和salt创建对称密钥。
  5. 使用对称加密算法加密私钥。
  6. 将未加密的公钥和加密的私钥上载到服务器。

这样做更好,因为:

  • 上面列出的所有流程都是AFAIK、标准和经过审核的。
  • 在设置用户帐户时,只生成一次公钥/私钥(耗时)。
  • 访问密钥总是在固定的时间内发生。

这解决了您的问题:

  • 因为服务器只有加密的私钥,所以它不能解密用户的数据。
  • 如果客户端机器死了,服务器可以重新发出私钥。

当然,也有一些明显的警告,比如,如果用户忘记了他们的密码,所有的数据都会被锁定,直到公开知道如何破解RSA,或者将10亿年的当前计算能力用于破解他们的密码;-) (当然,这取决于N和密钥大小)。此外,盐对于防止字典攻击也很重要。

票数 1
EN

Stack Overflow用户

发布于 2013-03-04 15:38:15

您的算法(例如RSA http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsaparameters.aspx)的字段多少取决于您。您可以很容易地创建一个算法,从某个字符串生成D和P(从这些字符串中计算其他RSA字段)。不过,我真的建议您不要从StackOverflow上的答案中挑出一个(这只会给想要获取数据的人一些容易尝试的东西)。

像RSA这样的算法之所以很难打破,是因为在基于加密数据的私钥/公钥逆向工程方面付出了大量的努力。如果您介绍一种“快捷方式”,比如基于密码的可重复生成算法,那么系统的安全性现在取决于密码的保密程度,而不是加密算法本身。

私钥也是如此;这就是为什么许多组织不将私钥存储在硬盘上,而是存储在受密码或某些生物识别信息保护的安全外部设备上。

我建议您不要从密码生成密钥,只需使用推荐的方法来存储和保护私钥。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15203788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档