加密密码可通过 API 调用访问,这安全吗?
Encrypted Password Accessible via API Call, Is this Secure?
我现在正在研究一些安全概念,我很好奇是否已经尝试过这种方法and/or 考虑到 "Brute Forcing" 是否安全仍然可行。
以 Visual Studio 中的 Microsoft WebAPI 模板 为例,您可以使用 "GET" 访问端点.
任何 user/application
都可以访问端点
user/application 将从该端点获得的字符串值将是他们需要的密码,但使用 "KeyValue"
[=40= 加密]
在 TLS 传输此加密值后,user/application 将使用他们的 "KeyValue"
解密字符串
这种做法安全吗?
感谢您对我的包容,期待您的回复。
编辑:添加了进一步说明图像以帮助说明
假设有以下两种情况:
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."
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(例如用户登录,我希望这是您交换密码的原因)应该在服务器端完成,因为您可以控制此环境。
由于您没有告诉我们您实际想要完成的目标,我建议您阅读常见的攻击向量并找出缓解这些攻击的常用方法。
我的几点建议:
- 2 个端点之间的通信 -> SSL/TLS
- 授权/认证
- Open Web Application Security Project and their Top 10 (2017)
我现在正在研究一些安全概念,我很好奇是否已经尝试过这种方法and/or 考虑到 "Brute Forcing" 是否安全仍然可行。
以 Visual Studio 中的 Microsoft WebAPI 模板 为例,您可以使用 "GET" 访问端点.
任何 user/application
都可以访问端点
user/application 将从该端点获得的字符串值将是他们需要的密码,但使用 "KeyValue"
[=40= 加密]在 TLS 传输此加密值后,user/application 将使用他们的 "KeyValue"
解密字符串
这种做法安全吗?
感谢您对我的包容,期待您的回复。
编辑:添加了进一步说明图像以帮助说明
假设有以下两种情况:
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."
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(例如用户登录,我希望这是您交换密码的原因)应该在服务器端完成,因为您可以控制此环境。
由于您没有告诉我们您实际想要完成的目标,我建议您阅读常见的攻击向量并找出缓解这些攻击的常用方法。
我的几点建议:
- 2 个端点之间的通信 -> SSL/TLS
- 授权/认证
- Open Web Application Security Project and their Top 10 (2017)