0

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

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

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

还是因为只有我的服务器应用程序才能访问这些数据,所以这是一种矫枉过正的做法?

4

1 回答 1

1

在文件系统上加密用户、客户等的私人数据并不过分。一方面,硬盘驱动器最终会失去你的控制——而且你极不可能在它似乎无法正常工作后正确地销毁它,即使上面有一堆私人数据和具有少量数据恢复专业知识和主动性的人可能可以访问。

我建议PyCrypto

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

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

(如果您想知道如果机器运行时私钥始终在内存中,那么将私钥保存在内存中有何价值--- 考虑一下如果有人闯入并窃取您的计算机会发生什么。在此过程中,他们几乎肯定会关闭它, 从而保护您的数据免于最终重新启动。一种选择虽然较弱,但使用小型 USB 驱动器存储私钥(密码/密码)。这仍然容易受到盗窃的风险,但不太重要最终处理驱动器时会出现问题。正确销毁硬盘驱动器相对较硬且成本高——但物理销毁一个小型、便宜的 USB 驱动器一点也不困难)。

于 2013-04-06T12:11:01.660 回答