用于存储在PHP中的图像加密


Image encryption for storage in PHP

我遇到了一种情况,不确定如何最有效地处理它。客户现有的系统是为更改、盖章、签名等PDF而建立的,它还将PDF页面转换为图像(png)以供显示/审查,需要"保护"以处理可能包含个人信息的医疗/法律文件和文档。

如果可以避免的话,我们不会直接向磁盘写入任何内容,尽可能多地保留在数据库中。我熟悉使用mcrypt对密码进行哈希处理等——这是一种在检索之前存储页面图像和生成的PDF的合理方法吗?我是在考虑严重的处理开销吗?有更好的方法吗?

保护系统是一个非常广泛的主题,但您似乎专注于保护敏感数据的持久存储免受未经授权的访问。换句话说,你想让入侵者或有权访问数据库的illojal员工更难查看他不应该查看的pdf文档。正如您所建议的,一种方法是加密数据库中的文档。这里重要而困难的决定是如何管理加密密钥。你应该问自己的问题是:

1) 我如何存储加密密钥,以便应用程序可以访问它们,但入侵者或illojal员工无法访问?当然,您可以不将它们存储在数据库中(如果您可以信任数据库,则根本不必加密文档)。一个安全但繁琐的解决方案是让受信任的员工在启动应用程序时键入密钥,并只将其存储在内存中。另一种方法是创建一个特殊的、受保护的子系统,只对文档进行加密和解密。

2) 什么加密算法足够强大?您可能应该防止攻击者将您的许多或所有文档复制到自己的系统中,并使用不同的技术来破解加密。理论上,只要有足够的时间和硬件,所有算法都是可以破解的,因此这里的折衷方案是使用一种算法和密钥长度,使其几乎不可能破解加密,同时具有可接受的处理开销(解密文档所需的处理能力越低,攻击者破解加密所需的处理器能力就越低)。

3) 这些文件能保存多久?加密方案和密钥不应该永远存在。您应该设计一个系统,在该系统中,您可以定期更改密钥,并在密钥过期时更改加密算法。您还必须能够处理发现加密密钥被泄露的情况。换句话说,更改密钥并使用新密钥重新加密所有文档必须很容易。

当然,保护系统安全需要做的不仅仅是加密文档,但保护持久数据并不是一个糟糕的开始。

祝好运