我正在构建一个系统,该系统需要通过安全的 Web 连接收集一些用户敏感数据,将其安全地存储在服务器上,以便以后自动解密和重用。系统还应允许用户通过*****ze
网络查看某些部分的受保护数据(例如,)和/或完全更改它。系统应提供合理的安全级别。
我在考虑以下基础设施:
应用程序(Web)服务器 1
具有适当 TLS 支持的 Web 服务器,用于安全的 Web 连接。
使用公钥算法(例如 RSA)加密输入的用户敏感数据,并通过单向出站安全通道(例如 ssh-2)将其发送到App Server 2 ,而不会将其存储在App Server 1或DB Server 1的任何位置。
使用与用户密码相关的对称密钥算法对输入数据的某些部分(例如最后几个字母/数字)进行加密,并将其存储在DB Server 1上,供App Server 1在用户 Web 会话期间检索。
用户通过网络重新使用步骤 2 进行数据修改。
数据库服务器 1
- 存储不安全的非敏感用户数据。
- 存储在App Server 1上加密的部分敏感用户数据 (参见上面的步骤 3)
应用服务器 2
- 永远不要向App Server 1或DB Server 1发送任何内容 。
- 从App Server 1接收加密的用户敏感数据并将其存储在DB Server 2中。
- 根据本地计划从数据库服务器 2中检索加密的用户敏感数据,使用本地存储在应用服务器 2上的私钥(参见应用服务器 1,步骤 2)解密,并进行适当的密钥管理。
数据库服务器 2
- 存储加密的用户敏感数据(参见App Server 2,步骤 2)
如果应用程序(Web)服务器 1或数据库服务器 1或两者都受到威胁,那么攻击者将无法获取任何用户敏感数据(无论是否加密)。所有攻击者都可以访问众所周知的公钥和加密算法。然而,攻击者将能够修改网络服务器以获取当前登录的用户明文密码并解密存储在 DB 服务器 1 中的部分用户敏感数据(请参阅应用服务器 1,第 3 步),我认为这没什么大不了的。攻击者将能够(通过代码修改)在潜在攻击期间拦截用户通过 Web 输入的用户敏感数据。后来我认为这是一个更高的风险,但假设攻击者很难(是吗?)在没有人注意到的情况下修改代码,我想我不应该太担心它。
如果App Server 2和私钥被泄露,那么攻击者将可以访问所有内容,但App Server 2或DB Server 2不是面向 Web 的,因此应该不是问题。
这种架构有多安全?我对加密算法和安全协议如何工作的理解正确吗?
谢谢!