我通过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
列中的数据安全无虞?我应该做些什么更多/不同的事情?
更新: 任何访问该站点的人(具有有效用户名/密码的任何人)都可以访问所有敏感数据。目标是防止第三方获取数据,如果他们能够以某种方式进入数据库。
答案 0 :(得分:0)
AES-128加密的强力攻击是可以实现的,特别是考虑到显卡的计算能力或某些基于ASIC的系统正在为比特币挖掘开发,但仍然很昂贵。您可以通过更改密钥(可能是数百倍的昂贵)或使用AES-256(2 ^ 128倍更贵)来使加密更加昂贵。
更便宜,更可能的攻击是有人试图窃取您的密钥。您的方案假设攻击者以某种方式进入您的数据库。在达到目标时尝试并可视化攻击者的有利位置。密钥的保护程度有多大?
一些例子: