加密密码可通过 API 调用访问,这安全吗?

Encrypted Password Accessible via API Call, Is this Secure?

我现在正在研究一些安全概念,我很好奇是否已经尝试过这种方法and/or 考虑到 "Brute Forcing" 是否安全仍然可行。

Visual Studio 中的 Microsoft WebAPI 模板 为例,您可以使用 "GET" 访问端点.

这种做法安全吗?

感谢您对我的包容,期待您的回复。

编辑:添加了进一步说明图像以帮助说明

假设有以下两种情况:

  1. Communication between Server and Client

    a. Your Server serves the Client application with an encrypted password.

    b. The Client can request any password.

    c. The passwords are encrypted with a shared Key that is known by both server and client application

正如 James K Polk 已经指出的那样:

知识渊博的攻击者可以并且将会分析您部署的应用程序,并在某个时候找到您的硬编码解密密钥 ("KeyValue")。是什么阻止他请求存储在服务器上的每个密码?

这里的经验法则是:"Do not trust the client side."

  1. Communication between Server and Server

    a. You have 2 server applications. Application A is acting as some kind of database server. Application B is your Back-End for a user application of some kind.

    b. Application A serves paswords to any requester, not only Server B. With no type of authentication whatsoever.

    c. Confidentiality is guaranteed through a shared and hard-coded Key.

我认为您是在试图使事情过于复杂,希望没有人能够拼出拼图。

有足够时间和精力的人可能能够获得有关您的服务器编译的信息and/or能够获得应用程序 B 的代码。这在场景 1 中也是默认的。还有一点是有足够的机器人随机扫描 ips 来检查响应。可能会找到应用程序 A,即使它们没有共享密钥,也可能能够拼凑出应用程序 A 的用途,并使该服务器成为优先目标。

这种做法安全吗?

没有。免费泄露可能的机密信息绝不是一个好主意。加密与否。你不会让人们免费下载你的数据库吧?

你应该做什么

所有 Authentication/Authorization(例如用户登录,我希望这是您交换密码的原因)应该在服务器端完成,因为您可以控制此环境。

由于您没有告诉我们您实际想要完成的目标,我建议您阅读常见的攻击向量并找出缓解这些攻击的常用方法。

我的几点建议:

  1. 2 个端点之间的通信 -> SSL/TLS
  2. 授权/认证
  3. Open Web Application Security Project and their Top 10 (2017)