0

我想知道是否有人可以给我一些关于文件加密的建议,我目前正在构建一个 Intranet,它需要具备的功能之一是让用户将文件发送给其他用户,http://www.mailbigfile.com/是我想要实现的一个例子。目前这是通过 SSL 完成的,我在上传之前使用 PHP 来验证文件类型等。我遇到的唯一问题是我的雇主希望我在上传文件之前加密文件,他们还希望每个上传的文件都用随机盐加密作为额外的安全措施。我主要担心的一个问题是文件类型并没有真正受到限制,因此它可以是从 jpeg 到 word 文档的任何内容,到目前为止,我发现使用 php 加密 word 和 pdf 文档很困难。所以我想知道是否有人可以就以下问题给我建议

1.如果您使用SSL并限制对目录的直接访问,您是否需要加密文件

2.我应该使用 php 来加密例如 MCRYPT 还是有替代方案。从以前的线程有人推荐使用 PEAR

php文件加密方法。存在简单的东西吗?

提前致谢

4

2 回答 2

1

1)不是为了传输,但我认为这里的重点是以安全的方式存储文件,这样即使您以某种方式获得了对该文件的访问权限,您也无法在不知道其加密和盐的情况下使用它。您将生成盐并将其与对文件的引用一起保存在数据库中。这个想法是,如果有人可以访问该文件而不是数据库,那么这些文件将毫无用处,因为攻击者对该文件一无所知。当有人请求下载文件并且获得授权时,您需要在将其发送给客户端之前对其进行解密。猜猜你的要求是什么?

2)我会做一个回退,如果没有回退到 PEAR,则使用模块中的 mcrypt 函数,因为 pear 会比模块慢。但是你说它是一个内网,所以添加 mcrypt 模块应该很容易。

于 2012-10-30T10:43:30.330 回答
0

在上传之前加密每个文件意味着它必须在客户端计算机上进行。因此,这必须通过单独的程序(例如,GNU PG)或在浏览器中完成,例如通过 Javascript 的 AES(或 Java 小程序,或执行相同操作的 Flash)。

不需要为通过 SSH 传输的文件加密,因为协议已经这样做了。然而,虽然文件在“网络上”是安全的,但任何有权访问接收机器(和服务器)的人都可以读取该文件。如果这是一个问题,您必须加密文件。

最大的挑战是以安全的方式在发送者和接收者之间传递加密密钥。这完全不是微不足道的,如果做错了,多层加密和添加大量盐的整个过程将毫无用处。例如,如果加密密钥在收件人下载文件的服务器上(通过 SSH),那么任何对服务器有足够访问权限的人(管理员或入侵者)都可以使用存储在那里的密钥解密文件,从而所有加密都没用。公钥密码术是解决该问题的一种方法。我之前提到过 GNU PG 吗?

至于“盐”,这是错误的术语,您的意思可能是“初始化向量”(盐是用于散列函数,而不是用于加密)。

“需要个人IV”要求的解决方案相当简单:在客户端计算机上生成一个或两个伪随机数据块(也添加一些真正的随机或非随机但可变的数据,例如,nanotime如果可以的话) . 对于 AES,两个块将是 32 字节(256 位),顺便说一下,这是几个现代密码散列函数的输出大小。
这使得例如连接 10-20 个伪随机字符(即使来自一个糟糕的生成器)与纳秒时间戳、SELECT RAND();来自附近的 SQL 服务器、服务器响应的时间以及浏览器历史记录中的 5 个最后查看的站点成为可能,将所有这些输入 SHA-256,并将输出用作实际上不可预测的初始化向量。
将文件传输给接收方后,对其进行解密,并忽略前 32 个字节。

于 2012-10-30T11:06:41.713 回答