我正在构建一个系统,需要通过安全的网络连接收集一些用户敏感数据,将其安全地存储在服务器上,以便以后自动解密和重用。系统还应允许用户查看 protected 数据的某些部分(例如,*****ze
)和/或通过网络完全更改它。系统应提供合理的安全级别。
我正在考虑以下基础设施:
应用(Web)服务器 1
具有适当 TLS 支持的 Web 服务器 用于安全的网络连接。
使用公钥算法(例如 RSA) 加密输入的用户敏感数据 并将其发送到App Server 2 单向出站安全 channel (例如 ssh-2)而不存储它 应用服务器 1 或数据库上的任何位置 服务器 1。
使用依赖于用户密码的 对称 key 算法进行加密 输入数据的某些部分(例如 最后几个字母/数字)并存储 稍后将其放在数据库服务器 1 上 期间由应用服务器 1 检索 用户网络 session 。
重复使用步骤 2,由用户通过网络修改数据。
数据库服务器 1
- 存储不安全的非敏感用户 数据。
- 存储敏感信息的某些部分 在应用服务器 1 上加密的用户数据 (参见上面的步骤 3)
应用服务器 2
- 请勿切勿永远发送任何内容 TO 应用服务器 1 或数据库服务器 1。
- 接收加密的用户敏感信息 来自应用服务器1的数据并存储 在数据库服务器2中。
- 检索加密的 来自DB Server 2的用户敏感数据 根据本地的时间表, 使用私钥解密 (参见应用服务器 1,步骤 2)已存储 本地应用服务器 2 并进行适当的 key 管理。
数据库服务器2
- 存储加密的用户敏感数据(请参阅应用服务器 2,第 2 步)
如果应用程序(Web)服务器 1 或数据库服务器 1 或两者都受到损害,则攻击者将无法获取任何用户敏感数据(无论是否加密) )。所有攻击者都可以访问众所周知的公钥和加密算法。然而,攻击者将能够修改网络服务器以获取当前登录的明文用户密码,并解密存储在数据库服务器 1 中的部分用户敏感数据(参见应用程序服务器 1,步骤 3),但我不这样做。不要认为这是一件大事。攻击者还能够(通过代码修改)在潜在攻击期间拦截用户通过网络输入的用户敏感数据。后来我认为风险较高,但假设攻击者很难(是吗?)在没有人注意到的情况下修改代码,我想我不应该太担心。
如果App Server 2和私钥被泄露,那么攻击者将可以访问所有内容,但是App Server 2或DB Server 2不面向网络,所以这应该不是问题。
此架构的安全性如何?我对加密算法和安全协议(protocol)如何工作的理解正确吗?
谢谢!
最佳答案
我认为我无法给出适当的回应,因为我不确定您的系统的目标是否明确。虽然我很感激您获得有关设计的反馈,但如果没有目的,就有点困难。
不过我会向你建议:
首先有力地记录和分析您的威胁模型
您需要列出所有可能的攻击场景的固定强硬列表。本地攻击者等,您要防范谁?您还说了诸如“通过适当的 key 管理”之类的话;但这是最难做的事情之一。因此,不要只是假设你能做对;而是要假设你能做对。充分规划您将如何做到这一点,并具体链接到它将阻止谁的攻击。</p>
您需要建立威胁模型的原因是,您需要确定您在哪些方面容易受到攻击;因为情况将会如此。
我还会建议,虽然理论很好;但在加密领域实现也非常关键。不要只是假设您会正确地做事,您确实需要注意随机数的来源以及其他类似的事情。
我知道这有点模糊,但我确实认为至少提出正式且强大的威胁模型会对您非常有帮助。
关于security - 这种架构的安全性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1452527/