【问题标题】:"zero knowledge" encryption for mysql databasemysql数据库的“零知识”加密
【发布时间】:2014-06-20 04:38:50
【问题描述】:

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

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

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

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

我们使用这个前提来存储密码;我们在应用程序级别加密原始密码,并将其与数据库级别的预加密密码进行比较。这显然是一种非常常见的方法,但我们有来自用户的输入 - 与我尝试做的关键区别是我们无法存储未加密的“密钥”并且使用用户的密码是有问题的,因为(除了另一个原因)如果他们改变它,所有的加密数据都必须改变。

我无法理解这个想法(您可能已经猜到我不是密码学专家),但希望 Google 能提出一些建议。不幸的是,我找不到太多东西。如果有任何关于从哪里开始研究的指示,我将不胜感激。

【问题讨论】:

  • 您的威胁模型是什么?也就是说,你想保护什么?
  • 数据属于财务性质;银行账户,交易细节等。因此,它是敏感数据,不能泄露。目前,该应用程序仍在开发中,因此仍在探索威胁可能来自何处。但不能排除在组织内部,因此我有兴趣阻止任何人查看存储的数据。
  • 您的 Google 搜索字词是“加密密钥管理”。预计会有一个陡峭的学习曲线。
  • 谢谢 PaulG,至少我知道应该把我的研究工作导向哪里。很有趣的阅读,虽然你说的很复杂。

标签: php mysql security encryption


【解决方案1】:

与我正在尝试做的关键区别是我们无法存储未加密的“密钥”并且使用用户的密码是有问题的,因为(除了其他一堆原因)如果他们更改它,所有加密数据必须改变

这两个想法可以带你走大部分路:

  • 使用密钥加密数据(您想要的方式)
  • 不要将此密钥存储在明文中,而是使用用户密码来加密密钥
  • 在用户登录时,您将他们的密码与单向版本的密码进行比较(散列/加盐,通常的方式)
  • 当匹配时,您使用密码来解密数据加密密钥
  • 然后您可以使用此密钥访问加密数据

当用户更改密码时,密钥会使用旧密码解密并使用新密码重新加密。工作量最小,无需重新加密整个数据集。

当我写出来时,这似乎很明显/微不足道。我不是加密专家,我也需要这个问题的答案,所以请在 cmets 中戳我的想法。

【讨论】:

    猜你喜欢
    • 2013-06-06
    • 2011-07-15
    • 1970-01-01
    • 2021-01-14
    • 2019-07-01
    • 2019-10-24
    • 2014-08-28
    • 2011-06-30
    • 1970-01-01
    相关资源
    最近更新 更多