Security 加密用户数据

Security 加密用户数据,security,encryption,database-security,Security,Encryption,Database Security,我有一个Android应用程序,它通过ssl将一些用户帐户信息作为json传输到中央服务器。如果第三方拥有用户的用户名,则可以向用户发送消息 用户名永远无法从我们的服务器查询,事实上无法查询任何用户数据。整个系统依赖于这样一个事实:用户愿意与第三方共享这些信息,第三方可以使用这些信息向用户发送消息 我没有对传输的数据进行加密,因为它已经通过ssl发送。我觉得我需要加密存储在服务器上的数据以保证安全。加密此数据的最佳方式是什么?当我查询用户数据时,我必须加密提供的值并将其与存储在数据库中的值进行比

我有一个Android应用程序,它通过ssl将一些用户帐户信息作为json传输到中央服务器。如果第三方拥有用户的用户名,则可以向用户发送消息

用户名永远无法从我们的服务器查询,事实上无法查询任何用户数据。整个系统依赖于这样一个事实:用户愿意与第三方共享这些信息,第三方可以使用这些信息向用户发送消息

我没有对传输的数据进行加密,因为它已经通过ssl发送。我觉得我需要加密存储在服务器上的数据以保证安全。加密此数据的最佳方式是什么?当我查询用户数据时,我必须加密提供的值并将其与存储在数据库中的值进行比较,还是必须解密数据库


或者,由于只有我的服务器应用程序才能访问此数据,这是一种过分的做法吗?

在文件系统上加密用户、客户等的私有数据并不过分。首先,硬盘驱动器最终会超出您的控制范围,而且在它看起来不起作用后,您也不太可能正确地销毁它,即使它上面有大量的私人数据,并且可能会被具有少量数据恢复专业知识和主动性的人访问

我建议

真正的挑战是如何管理密钥。PK(公钥)加密的一个优点是,您可以使用代码中的公钥(加密)配置软件,并公开。。。对于存储数据的应用程序部分来说,这已经足够了。然后需要安排一组过程和策略来保持私钥的私密性。这意味着它不能出现在源代码或版本控制系统中。。。软件的某些部分必须提示输入并获取它(可能输入,可能从USB“键盘模拟器”或其他密码/密钥保险库设备中推入)

每次重新启动服务器软件(需要读回此客户数据)时都必须执行此操作。。。但这可能是一个长期运行的守护进程,因此每年只需要几次,甚至更少。您可以使用
ssh代理的修改副本
将密码管理功能与应用程序/服务器的其余部分解耦


(如果你想知道在机器运行时内存中的私钥在哪里有价值的话,考虑一下如果有人闯入并窃取你的计算机会发生什么。在这个过程中,他们几乎肯定会断电,从而保护你的数据不被重新启动。一个选项,虽然较弱,是使用A。用于私钥(密码/密码)存储的小型USB驱动器。这仍然容易受到盗窃风险的影响,但在最终处理驱动器时问题不大。硬盘驱动器相对较硬,正确销毁成本较高,但物理销毁小型廉价USB驱动器一点也不困难).

谢谢。这很有道理