security - 这种架构的安全性如何?

标签 security encryption rsa public-key

我正在构建一个系统,需要通过安全的网络连接收集一些用户敏感数据,将其安全地存储在服务器上,以便以后自动解密和重用。系统还应允许用户查看 protected 数据的某些部分(例如,*****ze)和/或通过网络完全更改它。系统应提供合理的安全级别。

我正在考虑以下基础设施:

应用(Web)服务器 1

  1. 具有适当 TLS 支持的 Web 服务器 用于安全的网络连接。

  2. 使用公钥算法(例如 RSA) 加密输入的用户敏感数据 并将其发送到App Server 2 单向出站安​​全 channel (例如 ssh-2)而不存储它 应用服务器 1数据库上的任何位置 服务器 1

  3. 使用依赖于用户密码的 对称 key 算法进行加密 输入数据的某些部分(例如 最后几个字母/数字)并存储 稍后将其放在数据库服务器 1 上 期间由应用服务器 1 检索 用户网络 session 。

  4. 重复使用步骤 2,由用户通过网络修改数据。

数据库服务器 1

  1. 存储不安全的非敏感用户 数据。
  2. 存储敏感信息的某些部分 在应用服务器 1 上加密的用户数据 (参见上面的步骤 3)

应用服务器 2

  1. 请勿切勿永远发送任何内容 TO 应用服务器 1数据库服务器 1
  2. 接收加密的用户敏感信息 来自应用服务器1的数据并存储 在数据库服务器2中。
  3. 检索加密的 来自DB Server 2的用户敏感数据 根据本地的时间表, 使用私钥解密 (参见应用服务器 1,步骤 2)已存储 本地应用服务器 2 并进行适当的 key 管理。

数据库服务器2

  1. 存储加密的用户敏感数据(请参阅应用服务器 2,第 2 步)

如果应用程序(Web)服务器 1数据库服务器 1 或两者都受到损害,则攻击者将无法获取任何用户敏感数据(无论是否加密) )。所有攻击者都可以访问众所周知的公钥和加密算法。然而,攻击者将能够修改网络服务器以获取当前登录的明文用户密码,并解密存储在数据库服务器 1 中的部分用户敏感数据(参见应用程序服务器 1,步骤 3),但我不这样做。不要认为这是一件大事。攻击者还能够(通过代码修改)在潜在攻击期间拦截用户通过网络输入的用户敏感数据。后来我认为风险较高,但假设攻击者很难(是吗?)在没有人注意到的情况下修改代码,我想我不应该太担心。

如果App Server 2和私钥被泄露,那么攻击者将可以访问所有内容,但是App Server 2DB Server 2不面向网络,所以这应该不是问题。

此架构的安全性如何?我对加密算法和安全协议(protocol)如何工作的理解正确吗?

谢谢!

最佳答案

我认为我无法给出适当的回应,因为我不确定您的系统的目标是否明确。虽然我很感激您获得有关设计的反馈,但如果没有目的,就有点困难。

不过我会向你建议:

首先有力地记录和分析您的威胁模型

您需要列出所有可能的攻击场景的固定强硬列表。本地攻击者等,您要防范谁?您还说了诸如“通过适当的 key 管理”之类的话;但这是最难做的事情之一。因此,不要只是假设你能做对;而是要假设你能做对。充分规划您将如何做到这一点,并具体链接到它将阻止谁的攻击。<​​/p>

您需要建立威胁模型的原因是,您需要确定您在哪些方面容易受到攻击;因为情况将会如此。

我还会建议,虽然理论很好;但在加密领域实现也非常关键。不要只是假设您会正确地做事,您确实需要注意随机数的来源以及其他类似的事情。

我知道这有点模糊,但我确实认为至少提出正式且强大的威胁模型会对您非常有帮助。

关于security - 这种架构的安全性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1452527/

相关文章:

c# - 如何将私钥导入 c# RSAParameters 对象?

go - 如何将公共(public) RSA key 转换为 JSON Web key

c - OpenSSL ECB 非 64 位多纯文本

java - 签名小程序加载签名jar读取文件报错

security - 通过 https 发送敏感数据有多安全?

android - Android Q 上 "android:useEmbeddedDex"的用途

php - PHP 和 iOS 中的河豚算法

c - 如何使下面的代码第二部分起作用

c++ - for循环中的RSA mpz_powm() : seg fault

Java rsa解密模式行为