盐渍密码和mySQL AES_ENCRYPT是否足以存储敏感信息?

时间:2013-04-21 13:42:11

标签: mysql encryption

我通过HTTPS使用Apache,MySQL和PHP。

我需要能够存储敏感信息,以便可以在多个人之间共享。 如果我有一个数据库(秘密)和两个php文件:( / var / www是我的web根目录)

/var/inc.php
/var/www/secret.php      

在/var/inc.php中,我有一个名为$ enckey的变量,它是一个32个字符的字母数字字符串。其权限设置为只读。

在secret.php中,我有一个用户名,密码和密钥字段。它们的关键字段($ key)是所有用户都知道的字符串(每个人都有相同的密钥,因为我使用它作为盐的一部分),它将是一个带有特殊字符串的8-12字母数字。

每个人都有自己的用户名和密码,也是MySQL用户/密码。当他们登录时,他们的用户凭证将首先通过MySQL进行验证。 /var/inc.php中没有数据库用户名或密码。

我的秘密数据库有一个表secret,如下所示:

CREATE TABLE `secret` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(64) DEFAULT NULL,
    `data` text,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

如果我使用以下方法将信息存储在MySQL表中:

AES_ENCRYPT('secret data', $enckey . $key)

并使用

提取数据
AES_DECRYPT(`secret`.`data`, $enckey . $key)

我是否做得足以使存储在MySQL data列中的数据安全无虞?我应该做些什么更多/不同的事情?

更新: 任何访问该站点的人(具有有效用户名/密码的任何人)都可以访问所有敏感数据。目标是防止第三方获取数据,如果他们能够以某种方式进入数据库。

1 个答案:

答案 0 :(得分:0)

AES-128加密的强力攻击是可以实现的,特别是考虑到显卡的计算能力或某些基于ASIC的系统正在为比特币挖掘开发,但仍然很昂贵。您可以通过更改密钥(可能是数百倍的昂贵)或使用AES-256(2 ^ 128倍更贵)来使加密更加昂贵。

更便宜,更可能的攻击是有人试图窃取您的密钥。您的方案假设攻击者以某种方式进入您的数据库。在达到目标时尝试并可视化攻击者的有利位置。密钥的保护程度有多大?

一些例子:

  • 数据库是从备份磁带或驱动器获取的。您是否将密钥备份到同一磁带或驱动器上?
  • 攻击者以某种方式实现了对数据库服务器的root访问。该服务器是否与具有密钥的应用服务器分开?是否有任何SSH证书允许从数据库服务器访问应用服务器?您的网络是否阻止从数据库服务器直接访问您的应用服务器?
  • 攻击者可以访问您的源代码管理系统。是否有任何密码(例如/var/www/secret.php中的密码)通过您的应用程序检入源代码管理?
  • 您的管理员可能会被强制,欺骗或贿赂以提供密钥。您是否以易于检测且难以掩盖的方式记录活动?在可行的情况下,您是否可以划分责任,以便给定的管理员可以访问数据或密钥,但不能同时访问两者?
  • 如果有权访问应用程序的人之一的笔记本电脑被盗,拥有该笔记本电脑的攻击者是否能够无法访问数据库?
  • 密码文件称为只读。这是运行应用程序的帐户只读,除root之外的其他任何人都不可读吗?是否有其他应用程序共享该帐户?您是否阻止使用同一帐户对服务器进行SSH访问?该帐户的凭据是否安全?