2011-06-28 137 views
5

某些高度敏感的信息(付款信息,用户名,密码等)在被保存到我的数据库之前应该加密。数据库安全性不够安全

后来,该信息必须被解密,以便从提取的持久性和在稍后的时间使用。

如果我使用,比方说,AES256加密的帐单地址,我仍然需要存储在持久性AES256密钥/密码为好。

如果加密进入数据库的信息是为了保护这些信息,以防有人窃听我的数据库,并且我存储密钥以解密数据库中的相同信息,那么什么是首先加密数据的点?

如果有人黑客到我的数据库,他们将能够找到持久密钥和解密他们想反正任何加密的数据。

我失去了一些东西在这里?

+1

作为消费者说话。感谢您对此进行教育。我见过供应商销售的产品是安全的和加密的,并发现他们正在做你正在努力不做的事情。 –

回答

0

更好的选择是使用证书,这可以在大多数RDBMS中轻松完成。

+0

嗨@Chris Bint - 你能详细点吗? – Cheryl

0

有关密码的最佳选择是对它们进行哈希处理。这是一种单向散列,并且不被解密。基本上,当用户登录时,你需要对他们的输入密码进行哈希处理,然后将哈希值与存储在数据库中的哈希值进行比较 - 并成功登录。

关于支付信息,您将需要一个随机生成的私钥。取决于系统和实施,这可以以多种不同的方式存储。 您可以将其存储在一个配置文件中,例如使用RSA容器进行加密,使其不可读。 还有其他解决方案。

您也可以加密的数据库连接字符串,并与RSA容器方法类似上面,以防止任何人真正看到你的数据库应用程序将用于访问数据库的用户名密码。

+0

Thanks @Franky - 这个新手有什么好的RSA参考资料/文章? – Cheryl

+0

当然 - 在MS环境中,您可以这样做 - http://msdn.microsoft.com/en-us/library/ff650304.aspx。希望这可以帮助。 – TheITGuy

+0

要求PHP参考会太贪婪吗? – Cheryl

2

有句古话:“加密容易,密钥管理困难”。这在这里非常适用。

如果您需要将数据存储在一个加密的格式(你经常这样做不是因为你只需要散列数据未加密的话),你不想加密密钥存储在数据库中。当您的应用程序需要解密数据时,您希望可以访问该密钥,但不希望像访问所有加密数据的DBA这样的人能够获得密钥。您希望确保密钥已经备份,以便您可以恢复数据,但不希望这些备份与数据库备份混在一起。因此,密钥管理成为一个非常棘手的问题需要解决。

在绝大多数情况下,你想购买一些第三方密钥管理解决方案,它可以处理这些矛盾。就像你不想自己实现加密算法一样,你不想自己做密钥管理。试图自行解决关键管理的人通常不会成功。