【问题标题】:What is the best practice for using AES_ENCRYPT and how secure is it?使用 AES_ENCRYPT 的最佳实践是什么,它的安全性如何?
【发布时间】:2017-09-01 16:03:19
【问题描述】:

我被要求做一些关于如何加密表单提交数据并确保它安全地存储在数据库中的研究。提交的表格将包含有关员工的个人详细信息,这些信息必须保密。

我在研究过程中遇到了 AES_ENCRYPT() 并设法应用此函数,以便将数据成功存储在数据库中。

我使用的示例 SQL 语句:

"INSERT INTO employee (firstname) VALUES (AES_ENCRYPT('$name', '$encryption_key'))"

但是,我在这方面的知识非常有限,不确定这是否足以提供足够的保护来防止数据被黑客入​​侵。这提供了什么级别的安全性?有什么我遗漏的或者我可以用来改进我的实现的其他技术吗?

此外,我已将加密密钥存储在单独的 PHP 文件中,但我不知道推荐的存储方式是什么。对此的任何建议将不胜感激。

对不起,如果这个问题含糊不清或相当宽泛。我是这个领域的一个完整的初学者。如果需要,我很乐意提供更多信息。

【问题讨论】:

  • 如果您容易受到SQL injection 的影响,加密就无关紧要了。您应该使用prepared statements 构建您的查询。
  • 我简化了我的语句以减少问题中的代码量,但使用了: $stmt = $conn->prepare("INSERT INTO employee (firstname) VALUES (AES_ENCRYPT(?, '$加密密钥'))"); $stmt->bind_param("s", $name);
  • 好吧,我想可能是这样。
  • 虽然非常好!我确实看到了很多解释如何使用不使用准备好的语句的 AES_ENCRYPT 的示例,因此作为初学者很容易忽略它们。

标签: php mysql database security encryption


【解决方案1】:

AES (Rijndael) crypto 非常安全。在实践中,除非您的数据非常有价值,否则您可以认为它是安全的。除非某个拥有大量资源的参与者决定要破解您的加密,否则没有人会这样做。

但是它是对称的。它使用相同的密钥来加密和解密内容。因此,您可以认为它与您的密钥一样安全。

您的密钥不安全。如果网络蠕虫破解了运行您的 php 代码的服务器,他们会立即访问您的密钥。这使他们可以访问您的加密数据。他们有一个明亮的霓虹灯路标,上面写着“这是我认为敏感的数据”。

不要忘记安全取决于薄弱环节。通常,使用您的金钱和时间来保护您的服务器被认为是更明智的做法,而不是在 dbms 的几列上使用对称加密。换句话说,您可能正在浪费时间进行基于列的加密。

如果您绝对必须加密静态数据,则应考虑使用非对称(公钥/私钥)密码系统。使用公钥加密内容,并将私钥保存在气隙安全系统中,以防您需要解密某些数据。

您的示例(名字)不够敏感,不值得这么麻烦。

【讨论】:

  • 感谢您的建议。你知道我在哪里可以找到可以帮助我学习如何使用非对称(公钥/私钥)密码系统的信息吗?或者您能提供详细说明吗?
  • @Jade 非对称系统在多对一关系中最有用,即如果您有多个发送者加密数据,但只有一个接收者解密它。在您的场景中,您将能够向客户端发送公钥,并让他们在将其数据发送回您之前对其进行加密,然后您可以使用服务器端私钥对其进行解密以进行读取。但这会浪费时间,因为这在功能上只是 HTTPS。如果您确保密钥安全,这比听起来要困难得多,那么这种对称方案很好,如果实用性值得商榷。
  • “AES (Rijndael) 加密非常安全”:如果您在正确的操作模式(CBC、CTR、GCM 等)下使用它,100% 同意。但是这段代码没有 IV,所以我觉得她在不安全的 ECB 模式下使用它很有趣。至于非对称加密,只有当他不需要需要解密同一系统上的数据时才会有所帮助。如果她确实需要在同一个系统上解密,那么最好坚持使用 AES。
  • @F. Stephen Q 谢谢,保持密钥安全是我遇到的主要问题。我在这方面没有经验,也不知道保护我的密钥安全的最佳做法是什么。您能否建议我如何实现这一目标?
  • @TheGreatContini 我遇到了使用 OpenSSL 的解决方案,它使用 IV,但我不知道如何使用 AES_ENCRYPT() 来实现它。
猜你喜欢
  • 2011-03-17
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多