2012-07-18 49 views
2

我正在使用带有LAMP堆栈的Zend Framework。客户要求保护敏感数据,包括电子邮件。在这个项目中,电子邮件将以两种方式使用:发送自动消息和发送简讯。使用Zend存储数据库中加密电子邮件的最佳实践

有没有人使用过?哪些算法快速,可靠并且可以与可变密钥一起使用?我应该在哪里存储加密密钥?数据库表使用什么引擎?

+2

只需在db存储应该是足够的,它不是公开。在db中加密它们可能不会添加任何东西,如果数据库被盗,那么他们可以访问存储加密密钥的文件系统。 – 2012-07-18 06:27:11

+0

您可以使用PHP的密码学特性或数据库的密码学特性(如果有的话)来存储加密数据。但是,如果我们正在讨论电子邮件,那么存在一个很大的问题。除非您要发送电子邮件的人拥有公钥,否则无论如何您都不能向他们发送加密的电子邮件。只要它击中导线,它必须是明文。 – GordonM 2012-07-18 07:32:22

+2

@Dagon攻击者获得数据访问权限并不是不寻常,因为攻击者无法访问文件系统(SQL注入),所以我认为这个想法有一些优点。 – bububaba 2012-07-18 07:46:10

回答

4

好吧,这些是我的2位。

对于需要同时进行加密和解密的数据,我会提出对称密钥算法,首先想到的是Blowfish。它既快又安全。

至于变量键。通常,对于需要加密和解密的每个条目具有不同的密钥是毫无意义的。因此,我建议使用单个密钥,该密钥在某处配置文件中设置。

如果你确实需要为每个用户/记录有一个键,我建议不要把它们保存在数据库中。将它们保存到磁盘上的平面文件中。

对于表引擎,只要它不是基于内存的,就不要紧。


至于价值 - 我认为有价值,如果客户明确要求。即使技术上没有什么理由来创建这种加密,这将有助于客户的安全感。当然,这可能是错误的,但确实有助于保持数据的安全性,并让客户的睡眠更加健康。因此,如果客户要求它,去吧!

+0

你无法与许多真实的客户合作,如果你认为迎合每一个要求,无光泽的优点是一个好主意。 – 2012-07-18 10:08:55

+2

如果客户要求,就这样做,我会推迟一点。作为专业人士,教育客户也很重要。当然,如果客户在了解成本/价值/性能后想要它,那么继续。关于加密和“敏感数据”的话题,猜猜客户将要尝试谁,并在数据被盗和解密时承担责任?在安全和责任方面站在前面,写下来是一个好主意。并不保证安全。 – jmbertucci 2012-07-18 10:09:47

+1

@Dagon请忽略冒犯性部分,好吗?不需要他们。至于jmbertucci,我同意。我从来没有说过要保证安全,但感谢评论。 – 2012-07-18 10:53:26

1

如果你真的需要这样做,Janis Peisenieks给出的答案是一个很好的起点。

据我所知,在PHP中没有安全的存储密钥的方式 - 这意味着攻击者可以对系统进行中等级别的控制,并可以从配置文件中检索密钥并使用该密钥解密数据。

想要知道用户电子邮件地址的攻击者可能会有多种方法来检索该数据 - 如GordonM所写,如果您的系统向这些用户发送电子邮件,该电子邮件相对容易拦截,而身体可能会被加密,以“解决”不是。

只是检查,你会被散列(未加密)密码(如果您的系统使用这些?)