Php 金融数据的适当加密
我目前正在构建一个web应用程序(PHP/MySQL),它可以保存来自个人的数据。这些数据中的大部分不值得加密保护,但其中一些是收入等财务信息。它不是一个支付应用程序,也不存储像信用卡信息那样可以直接转化为金钱的信息,但仍然是你不想在可能的泄露中拥有的东西。该平台必须出售给想要“安全”的客户,但这可能意味着任何事情,因为客户本身并不知道他们真正想要什么,因为他们是商业人士,而不是密码专家(我也不喜欢) 它是一个管理平台,因此保存财务数据的人不是该平台的用户。该平台的用户仅仅是一个具有附加权限的登录名。服务器本身不必访问数据。每个操作都由登录的用户(也可以是管理员)完成。如果多个用户具有足够的权限,则他们需要访问相同的数据 我现在的问题是如何保护财务数据免受这些威胁:Php 金融数据的适当加密,php,mysql,security,encryption,Php,Mysql,Security,Encryption,我目前正在构建一个web应用程序(PHP/MySQL),它可以保存来自个人的数据。这些数据中的大部分不值得加密保护,但其中一些是收入等财务信息。它不是一个支付应用程序,也不存储像信用卡信息那样可以直接转化为金钱的信息,但仍然是你不想在可能的泄露中拥有的东西。该平台必须出售给想要“安全”的客户,但这可能意味着任何事情,因为客户本身并不知道他们真正想要什么,因为他们是商业人士,而不是密码专家(我也不喜欢) 它是一个管理平台,因此保存财务数据的人不是该平台的用户。该平台的用户仅仅是一个具有附加权限的登
- 有人发现SQL注入并远程转储所有表
- 有人偷了服务器的硬盘(数据库+代码)
编辑:重新制定的问题几乎完全遵循注释/答案的建议非对称加密和混合加密在这里毫无意义,除非用户自己生成并保留私钥的所有权。我从你剩下的问题推断情况并非如此 假设您希望能够在无需用户交互的情况下查看此加密信息(例如,您不仅为用户存储此信息,而且该信息与您的业务运营相关),则您的存储选项有限 如果您的确切威胁模型是在发生数据库泄漏时保护此数据,而不是其他任何情况,那么对称加密是完美的,如果正确实施的话 这意味着对称密钥必须存储在向数据库发出请求并向其他(可能是前端)系统提供数据的服务器上。如果这些服务器中的任何一台遭到破坏,那么加密的数据就会泄露 总之,使用对称加密,但要明白它只会直接保护您免受通过SQL注入或类似攻击等方式造成的数据库泄漏。受损服务器是受损服务器,通常意味着在足够的时间内完全访问数据
编辑:如果您打算要求用户交互以查看受保护的数据,那么apokryfos上面的评论将准确地详细说明如何保护信息。从用户密码生成对称密钥,并使用此密钥加密其他对称密钥。使用此次对称密钥对数据进行实际加密。使用两个键可以更轻松地更改用户密码。以下是两种方法: 1) 使用对称加密,因为您已经向客户端安排了一个秘密,即他们的密码 每当用户需要访问其敏感信息时,他们都需要提供密码。如果需要,则可以使用该密码作为生成加密密钥的基础 您可以使用PHP中的函数对敏感数据进行加密,并在客户端需要时对其进行解密。这将允许您选择OpenSSL支持的适当的难以破解的算法。这样做的缺点是,您将需要显式的用户权限和他们的密码来访问该数据,如果您仅代表该用户存储该数据,这是好的,但如果您需要将其传递给其他人,则这是坏的 这样,您就不需要在数据库中存储额外的信息。万一有人偷了你的硬盘,他们只会得到加密的敏感数据和散列密码。缺点是这是一个单点失败,如果他们破坏了加密,他们也会得到密码,反之亦然。然而,破坏加密的难度并不像反转散列那样高。它还依赖于强大的密码,正如我们所知,用户通常不会使用这些密码,但这不是一个新问题,我们今天也不太可能解决这个问题 2) 要求用户生成私钥对并向您发送公钥。然后可以存储此公钥并使用它加密数据。如果您有一个与服务器通信的应用程序/软件,它可以代表用户进行通信,但在web应用程序中很难实现,那么这通常会很好地工作。也许有JavaScript库可以做到这一点,但由于这不是通常做的事情,您需要100%确保您使用的库是安全的。然而,这也要求用户将密钥存储在某个地方,并在需要访问该数据时能够使用它(同样,JavaScript可以为用户执行此操作,但出于安全考虑,保存和加载密钥需要用户交互) 简言之: