加密用户数据

时间:2013-04-06 11:08:48

标签: security encryption database-security

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

永远不能从我们的服务器查询用户名,实际上不能查询用户数据。整个系统依赖于用户愿意与第三方共享信息的事实,第三方可以使用该信息向用户传递消息。

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

或者它是否过度杀伤,因为只有我的服务器应用程序才能访问这些数据?

1 个答案:

答案 0 :(得分:1)

加密文件系统上的用户,客户等的私有数据并不过分。有一件事,硬盘驱动器最终会失去控制 - 而且在它看起来无功能之后你很可能正确地销毁它,即使它上面有很多私人数据,具有一定数据恢复专业知识和主动性的人可以访问。

我建议PyCrypto

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

每次重启服务器软件(需要回读此客户数据)都必须这样做......但这可能是一个长期运行的守护进程,因此每年只需要几次 - 或者更少。您可以使用ssh-agent的修改副本之类的东西来将密码管理功能与应用程序/服务器的其余部分分离。

(如果你想知道在机器运行时,如果内存中的私钥始终,将私钥保存在内存中的价值 - 考虑如果有人入侵并窃取您的计算机会发生什么。他们几乎肯定会关闭它的过程,从而保护你的数据免受最终的重新启动。一个选项,虽然较弱,但是使用一个小的USB驱动器作为私钥(密码/密码)存储。这仍然是脆弱的在你的最终驱动器处理方面存在被盗的风险,但问题就不那么严重了。硬盘驱动器相对较硬而且价格昂贵 - 但是物理上破坏小巧便宜的USB驱动器并不困难。