gpt4 book ai didi

mysql - 在 MYSQL 中对敏感数据使用 AES 加密 - 实现问题

转载 作者:行者123 更新时间:2023-11-29 05:09:55 31 4
gpt4 key购买 nike

有许多问题讨论使用加密在 MYSQL 中存储敏感信息。有些人对加强网络服务器、数据库服务器和网络应用程序提出了很好的建议 (Store 'sensitive' data in MySQL DB)。然而,除了几个处理使用技术问题的问题 (How to use AES_ENCRYPT and AES_DECRYPT in mysql) 之外,很少有人讨论 MYSQL 的 AES_Encrypt 和 AES_Decrypt 功能的确切实现。

我正在使用下面的 MYSQL 准备语句来加密敏感信息:

$stmt = $db->prepare("INSERT INTO Table_Name (SensitiveData) VALUES (AES_ENCRYPT(?,UNHEX(SHA2('RandomStringofData',512))))");
$stmt->bind_param('s',$SensitiveData);
$stmt->execute();
$stmt->close();

我使用具有相同 SHA2 字符串的 AES_DECRYPT 函数在需要时解密数据。按照我的理解,如果没有人访问 Web 服务器本身或弄清楚 SHA2 密码,他们就无法轻易访问这些敏感数据。例如,获得数据库服务器访问权限的人不会帮助他们解释这些敏感数据。

我有几个问题:

  1. 我在这里阅读了有关 Init Vector 的信息:http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html .我不太明白这是如何工作的,或者它是否应该实现。什么是 Init Vector?它能否帮助提高我在上面使用的加密方法的安全性?
  2. 让加密和解密此数据的文件中的 SHA2 密码以纯文本形式出现让我感到不舒服。是否有其他方法对此进行编码,使其位于公共(public)目录之外的文件中?
  3. 该系统的一个缺陷是,如果有人劫持了网络应用程序,他们仍然可以通过运行解密信息的脚本来访问这些敏感数据。虽然我有强大的访问控制,但如果这也被规避,我会看到数据可能被泄露的情况。我已经实现了此链接中推荐的 SSL 预防措施和其他措施:How can I store sensitive data securely in a MySQL database? .我还查看了此链接中的建议:How do you Encrypt and Decrypt a PHP String? .有没有办法解密此数据以供其他应用程序使用,或者将其视为密码并仅比较散列值以确保它们相等是否更安全?
  4. 我的最后一个问题与开销有关。这是一个巨大的数据库,大小为几千兆字节,有数百万行和数百列。我只加密了这个数据库中的几个字段,它们没有用作索引。我真正看到这样的东西对性能有多大影响?

谢谢。

最佳答案

不要使用 AES_ENCRYPT() 来保证数据安全。如果您的应用程序包含必须加密存储的敏感数据,您应该在应用程序中(即在 PHP 代码中)实现加密和解密。

AES_ENCRYPT() 有几个主要问题:

  • 加密 key 被传输到 MySQL 服务器。在查询运行时,它对 SHOW PROCESSLIST 中的其他客户端可见。此外,如果启用了常规日志或慢速查询日志记录,则可能会将 key 写入这些日志。

  • 如果您没有使用 SSL 连接到 MySQL——您可能没有——加密 key 和敏感数据的明文都将通过网络传输,并可能在那里被拦截。

  • 许多常用的 MySQL 版本(低于 5.7.4)仅支持 ECB 模式。 ECB is insecure .

当您在 PHP 中实现加密时,不要使用 mcrypt。它存在错误,无人维护,并且在 PHP 7.1 中已弃用(并且可能会在以后的版本中完全删除)。理想情况下,您应该使用尽可能多地封装加密的库(如 libsodium );如果失败,请使用 OpenSSL 扩展中可用的加密原语。

关于mysql - 在 MYSQL 中对敏感数据使用 AES 加密 - 实现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41214598/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com