Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MYSQL中对敏感数据使用AES加密-实现问题_Mysql_Security_Encryption_Cryptography_Aes - Fatal编程技术网

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

在MYSQL中对敏感数据使用AES加密-实现问题,mysql,security,encryption,cryptography,aes,Mysql,Security,Encryption,Cryptography,Aes,在讨论使用加密在MYSQL中存储敏感信息时,存在许多问题。有些人对强化web服务器、数据库服务器和web应用程序()提出了很好的建议。然而,关于MYSQL的AES_Encrypt和AES_Decrypt功能的确切实现,除了几个关于用法()的技术问题之外,几乎没有讨论过 我正在使用以下MYSQL准备的语句加密敏感信息: $stmt = $db->prepare("INSERT INTO Table_Name (SensitiveData) VALUES (AES_ENCRYPT(?,UNHE

在讨论使用加密在MYSQL中存储敏感信息时,存在许多问题。有些人对强化web服务器、数据库服务器和web应用程序()提出了很好的建议。然而,关于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();
我使用AES_DECRYPT函数和相同的SHA2字符串在需要时解密数据。按照我的理解,如果没有人访问web服务器本身或了解SHA2密码,他们就无法轻松访问这些敏感数据。例如,获得数据库服务器访问权限的人不会帮助他们解释这些敏感数据

我有几个问题:

  • 我在这里读到了Init向量:。我不太明白这是怎么回事,也不知道它是否应该被实现。什么是Init向量,它能帮助提高我上面使用的加密方法的安全性吗
  • 我不喜欢在加密和解密此数据的文件中使用纯文本形式的SHA2密码短语。是否有另一种编码方法,使其位于公共目录之外的文件中
  • 该系统的一个缺陷是,如果有人劫持web应用程序,他们仍然可以通过运行解密信息的脚本来访问这些敏感数据。虽然我有强大的访问控制,但如果这也被规避,我会考虑数据可能被破坏的情况。我已经实施了SSL预防措施以及此链接中建议的其他措施:。我还回顾了此链接中的建议:。是否有一种方法可以将这些数据解密以供其他应用程序使用,或者将其视为密码并仅比较散列值以确保它们相等,这是否更安全
  • 我的最后一个问题与开销有关。这是一个巨大的数据库,大小为几GB,有数百万行和数百列。我只加密这个数据库中的几个字段,它们没有用作索引。像这样的东西对性能的影响到底有多大

  • 谢谢。

    为了数据安全,请不要使用
    AES\u ENCRYPT()
    。如果应用程序具有必须加密存储的敏感数据,则应在应用程序中实现加密和解密(即,在PHP代码中)

    AES\u ENCRYPT()
    有几个主要问题:

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

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

    • 许多常用的MySQL版本(早于5.7.4)只支持ECB模式


    在PHP中实现加密时,不要使用mcrypt。它有缺陷,没有维护,在PHP7.1中被弃用(在以后的版本中可能会被完全删除)。理想情况下,您应该使用一个库来封装尽可能多的加密(比如);如果做不到这一点,请使用OpenSSL扩展中可用的加密原语。

    这有助于澄清一些问题,同时也提出了一些其他问题。通过在应用程序中加密/解密,您的意思是在PHP代码本身中运行加密并将加密值保存到数据库中吗?我没有使用ECB或mcrypt,但听起来LibNa可能是一种可能的解决方案。因此,如果我在应用程序中进行加密/解密,我还需要libnail吗?1)是的。数据库应该只处理存储和检索数据。加密应该是PHP代码。2) LibNade是您在应用程序中执行加密/解密的方式。避免直接使用加密原语。