使用userid生成加密密钥

时间:2016-09-11 05:11:09

标签: php mysql encryption

我想加密存储在教师访问的数据库中的一些个人数据(与学生相关的数据,如姓名,特殊需求状态,成绩等)。我之前以非常基本的方式使用过open_ssl_encrypt,但我的理解水平非常高级。

我认为我想做的事情(如果这很糟糕,请纠正我)是为每个用户使用不同的加密密钥,这样他们就无法访问彼此的数据。我会以某种方式生成此密钥,将主密钥(仅对我而言)与用户的id组合在一起。

因此,加密密钥本身不存储在数据库中,因此数据库黑客无法解密数据。黑客必须能够访问我的源代码才能获得主密钥,并且知道(以及如何)将其与用户的ID结合起来。

这是一个常见的解决方案吗?这是明智的吗?它安全吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

如果您在代码中存储某种主密钥,那么您实际上并没有保护任何内容,因为这实际上使数据在服务器上以纯文本形式提供。这就是我如何接近它。

  1. 要与非对称加密一起使用,将为每个需要访问某些个人数据的工作人员生成单独的公钥和私钥。公钥存储在服务器上。他们需要将私钥保密。
  2. 将文档添加到服务器时,会生成新的对称密钥(例如AES),并使用此密文对文档进行加密。每个文档都应该有自己的对称加密密钥。对于需要访问该文件的每个工作人员,然后使用其公钥加密对称密钥。然后将加密版本的公钥与加密文档一起存储在服务器上,并丢弃纯文本文档和对称密钥。
  3. 当工作人员需要访问文件时,他们会提供私钥。私钥解密对称密钥,对称密钥解密文件。
  4. 更新文件时,需要使用相同的对称密钥重新加密。
  5. [Source]

    唯一需要注意的是,如果许多人需要访问单个文档,则使用所有公钥加密对称密钥可能需要一段时间。但是,您似乎表明每个文档最多只能由两个人访问,所以它不应该是一个大问题。

答案 1 :(得分:0)

@ Mike的回答会为用户看不到的东西增加太多的复杂性。我不希望用户必须记住/存储密钥才能查看他们的数据;数据加密的事实应该与他们通过我的应用程序的流量无关。

我最终使用的解决方案是将一个公共加密密钥存储在服务器上,远离public_html。每个用户还有自己的加密密钥,存储在MySQL数据库中。对这些密钥进行异或,以创建加密或解密其数据的密钥。

对用户来说完全不可见,这很好。要破坏这种防御,黑客必须访问服务器和MySQL数据库并正确组合密钥。我正在保护的数据不是 敏感(不是信用卡或任何有经济价值的东西)。