mysql数据库的“零知识”加密

时间:2014-06-20 04:38:51

标签: php mysql security encryption

我一直在研究我的Web应用程序的数据库层的加密。它使用MySQL 5.1(或更高版本,我无法记得)。

由我的组织管理的应用程序为公共客户存储数据。

最简单的选择是AES_ENCRYPT / AES_DECRYPT,如果坏人以某种方式获得访问我的数据库(假设他们不知道密钥),这将有所帮助。

但是,我想更进一步,防止组织中的任何人以未加密的形式查看为客户存储的任何数据。

我们使用这个前提来存储密码;我们在应用程序级别加密原始密码,并将其与db级别的预加密pwd进行比较。这显然是一种非常常见的方法,但我们得到了用户的意见 - 与我要做的事情的关键区别在于我们无法存储未加密的密钥'使用用户密码是有问题的,因为(除了另一堆原因)如果他们改变它,所有加密数据都必须改变。

我无法理解这个想法(你可能已经猜到我不是密码学方面的专家)但是期待谷歌提出一些指示。不幸的是,我找不到多少。对于从何处开始研究,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

  与我要做的事情的关键区别在于,我们无法存储未加密的密钥'使用用户密码是有问题的,因为(除了另一堆原因)如果他们改变它,所有加密数据都必须改变

这两个想法会带你走大部分路线:

  • 使用密钥加密数据(您希望的方式)
  • 不是将此密钥存储在普通密钥中,而是使用用户密码加密密钥
  • 在用户登录时,您将其密码与其自身的单向版本进行比较(哈希/盐渍,您通常的方式)
  • 如果匹配,则使用密码解密数据加密密钥
  • 然后使用此密钥访问加密数据

当用户更改密码时,密钥将使用旧密码解密,并使用新密码重新加密。最小的努力,不重新加密整个数据集。

当我写出来时,它似乎是显而易见的/微不足道的。我不是加密专家,我也需要回答这个问题,所以请在评论中挖掘我的想法。