2

我有一个使用 AngularJs 1.5 作为前端和 .net 框架作为后端的应用程序。在我的应用程序中,我必须将用户名和密码存储在来自前端的数据库中。要求是:

  1. AngularJs 将加密密码并将其发送到后端
  2. 在后端,加密的密码将存储在数据库中。
  3. 在后端代码中,有一个地方我们必须调用第三方 Web API,并且必须传递用户名和密码的解密形式以进行身份​​验证。

简而言之,前端应该加密密码,后端应该有能力解密它。

我分析了许多密码安全交易的技术。

  1. 哈希:这是安全传输密码的最佳方法。但问题是,我们无法将哈希密码反转为其原始形式。根据我的要求,我必须将哈希密码反转为其原始形式,因为我们有将原始形式的密码传递给第三方 API 进行身份验证。
  2. 对称算法使用相同的密钥进行解密和加密,因此需要将密钥安全地共享给前端和后端。如果我们对两边的键值进行硬编码,这不是一个好方法。
  3. 非对称算法分别使用公钥和私钥进行加密和解密。所以我认为这比上述两种技术安全得多。因为拥有公钥的入侵者无法解密密码。

我是使用 AngularJS 处理加密和解密的新手。我的查询是关于密钥处理的。我们如何在前端和后端安全地存储密钥,而不是在代码中硬编码它们。有没有安全的方法来共享这些密钥。哪种算法最适合我的要求?(根据我的分析,我发现不对称是满足此要求的更好选择)。

4

1 回答 1

0

不确定这是否仍然与您相关,但来了。这些都是您提出的相当高层次和广泛的问题,因此我为您提供一些一般性指导。

我肯定会为此使用非对称加密。我很可能会选择像 RSA OAEP 这样的东西,由于随机填充,它每次都会在相同的输入上产生不同的密文。这样,攻击者就不会从他可以设法拦截的密文中学到太多东西。

密钥交换是一个更棘手的话题,因为您的最终用户软件很可能在浏览器中运行(作为 Angular 应用程序)。处理此问题的一种方法是将您的公钥包装在可以在浏览器中验证的证书中。

您还需要考虑许多其他攻击和方面。例如,如何保护您的系统免受重放攻击,以及如何在满足可用性要求的同时轮换您的密钥。涵盖此答案中的所有主题不可能太宽泛,因此我将其留在这里。

于 2018-07-04T09:06:42.187 回答