2015-08-16 61 views
0

我不太习惯PHP,但我必须在PHP中使用一个快速函数。我正在使用提供API访问权限的电子邮件。电子邮件必须包含在所有的API调用中。该电子邮件被加密存储在数据库中。如何最好地存储和使用此电子邮件地址?目前我正在考虑这一点。如何在PHP中存储敏感数据?

getEmail 
{ 
    //Retrieve value from DB 
    //decrypt using openssl_decrypt 
    return decrypted value 
} 

function1 
{ 
    $email = getEmail(); 
    API call 1 
} 

function2 
{ 
    $email = getEmail(); 
    API call 2 
} 

我担心这种设计的东西是我必须做的检索和解密多次(会变得更糟随着越来越多的功能被添加)。我的问题是openssl_decrypt有多快?我可以安全地忽略对通话次数的担忧吗?或将电子邮件存储在_Session安全中?任何其他方法?请帮帮我。我必须使设计快速而且安全。

+0

据我所知,将信息存储在$ _SESSION数组中是安全的。 – kittykittybangbang

回答

4

在确定要缓解的威胁之前,甚至不要开始考虑加密。

有没有万能的答案,这是一个平衡之间的权衡和你可以忍受多少不便之间的权衡。

使对称加密值得需要坚如磐石的密钥存储。只要您的密钥泄露给攻击者,数据就可以被认为是妥协的。

在最极端的情况下,密钥保存在自定义加密硬件上以控制访问。稍微不太安全的是将密钥存储在可移动介质上,并在引导过程中将其直接复制到内存中。

在频谱的另一端,您可以将密钥存储在进行en /解密的盒子的HDD上。后者不提供真正的安全性,因为任何服务器的妥协都可能导致数据泄露。唯一的好处是阻止只能访问Db的用户看到数据。

如果你能明确说明你想要保护的是谁,我们可能会给出更有针对性的答案。

假设您可以拆分读/写的一种可能的替代方法是使用非对称加密。这样,您可以防止服务器读取已写入的数据。

  • 生成RSA公钥/私钥对
  • 给公钥唯一
  • 要添加新记录的Web服务器的访问,Web服务器使用公共密钥*
  • 要读取的数据进行加密记录,后端进程使用私钥解密数据并酌情发送电子邮件/等*

这样做的好处是危害网络erver不会泄露系统中已有电子邮件地址的详细信息,但是,它确实需要任何需要读取数据的代码都必须与Web服务器隔离。

*这是一个非常复杂的过程。根据需要,以保证有关数据到底是什么,你需要做至少一些:

  • 散列数据
  • 生成一个加密的随机密钥
  • 加密对称数据
  • 生成签名
  • 加密使用公开密钥
  • 对称密钥(存储/检索消息,按键,初始化矢量等)
  • 使用私钥
  • 解密数据解密对称密钥
  • 验证签名
  • (更多)

注意,非对称加密很快变得昂贵非常如消息长度的增加。出于这个原因,通常对称地加密数据,然后不对称地共享密钥。这样,消息大小是恒定的,并且可以选择适当的密钥大小。

上述任何错误都可能会导致数据泄露。如果你关心安全,不是尝试这个在你自己的。找到一个好的图书馆,为你做到这一切。挑选已经过很长时间并且已经多次审核的产品。这样有一个合理的机会是安全的。