用于解密服务器中敏感数据的安全协议

Secure protocol for decrypting sensitive data in server

我有一个系统将敏感的用户数据存储在 sql 数据库中。有超级用户拥有解密数据所需的密码,当他们需要查看系统提示的信息时,解密并显示数据。 现在有一个新的要求:普通用户应该可以看到部分数据,而超级用户仍然可以看到所有数据。

关于谁可以看到系统已经可用的信息,系统知道主密码不是问题。

我不知道如何以安全的方式执行此操作。一种解决方案是将主密码放在内存中,但是如果攻击获得对应用程序内存的临时访问权限,它就可以访问整个未加密的数据库。 我想到的另一种解决方案是系统向另一台设备(例如公司的首席执行官)发出请求并在那里获取主密码,这样它就不会在内存中停留太久。

任何人都可以给我任何建议或指出正确的方向吗?

谢谢。

这是一个有趣的情况,可能没有完美的解决方案,但我很乐意分享我对它的看法。

让我们从基础开始。如果系统知道主密钥,则必须将其存储在服务器可访问的某个位置。我们有(正如您正确意识到的)两种选择:在服务器上,或在服务器外。在这里,我认为将其存储在服务器之外只会带来更多的攻击媒介,因为涉及更多的通信。假设主密钥存储在 CEO 的 iPhone 上。如果 iPhone 被病毒 (Pegasus) 破坏、被盗或被 FBI 拿走怎么办?最好不要在这里牵扯到不必要的各方。

将主密钥存储在服务器的某个位置是您最好和最安全的选择。那么现在的问题是如何保证主密钥的安全。假设您将用户密码存储在服务器上。不要将主密钥放在那里,因为如果服务器遭到破坏,主密钥也可能被破坏。相反,使用主密钥设置一个专用服务器,并在主 Web 服务器和专用服务器之间使用 HTTPS 请求进行通信。这样,专用服务器可以被锁定,只打开 443 端口,并且比网络服务器受到更少的攻击,网络服务器可能有更多的程序运行(因此可能有更多的攻击)。

这是我设想的流程:

  • 超级用户想要阅读每个人的消息
  • 他通过网络服务器进行身份验证
  • 网络服务器将他识别为超级用户
  • Web 服务器向专用服务器发送 HTTPS 请求和一些消息
  • 专用服务器将主密钥读入内存,解密消息,将其发送回网络服务器,并从内存中删除主密钥
  • 网络服务器接收解密数据并returns它给超级用户

在这种情况下,只要您能确保专用服务器的安全,您的主密钥就是安全的。我建议将专用服务器保持在与网络服务器相同的专用网络上,并且不要使其可从 Internet 访问。

可能有更好的解决办法,但既然还没有人发帖,我不妨发表一下意见。