3

我正在对我的潜在客户正在与我讨论的可能项目进行一些研究和开发。

我正在考虑创建一个 asp.net 4.5 Web 应用程序,该应用程序将通过 Web 访问并保存一些非常敏感的信息。信息将通过 webApp 上传,文件存储在服务器上供以后查看/检索。我想确保信息被安全地上传和存储。为了做到这一点,我将建议在整个应用程序中始终使用 EV SSL 证书,并对文件(jpeg、pdf、txt)进行某种加密,以确保如果有人在服务器级别获得对应用程序的访问权限没有应用程序也无法直接查看文件,这是我寻找建议或改进的地方。

我的研究指导我对文件进行 AES 加密,这是否足以保护文件?是否应该在操作系统级别应用加密(win2008)?我应该将文件存储在数据库中吗?

这些文件必须在 webApp 上可供用户读取,并且可以在浏览器中查看。

如果需要任何进一步的信息,请询问!

4

3 回答 3

1

我在一个项目中也需要处理一些非常敏感的信息/文件。我们决定

  1. 使用https
  2. 使用 ssl 证书加密所有敏感数据/文件

现在我们没有在我们的数据库中保存文件,尽管它是可能的。但是我看不到将其保存到数据库的任何大优势(文件备份将单独完成- 这可能是您的应用程序中的一个要点)。有关在数据库中保存文件的利弊,请参阅StackOverflow 上的这个问题

MSDNHow to encrypt using a X509上有一个 cert示例,并且网络上有很多关于这个主题的好文章(codeproject.comSO,...)。

虽然这是我们的方法,但可能有更好的解决方案。我想听听你选择什么样的方法。

于 2012-09-22T19:28:18.747 回答
0

由于您使用的是 SSL,因此传输数据已被加密。基本上,在 SSL 握手之后,数据会使用 AES 等算法进行对称加密。这样做主要是为了速度,公钥加密非常慢,因此使用诸如 RSA 之类的算法加密文件可能不是一个好主意,此外,现在很多英特尔处理器都支持芯片上的 AES,所以它会是使用起来非常快(这就是 BitLocker 的基础)。

您现在遇到的问题是一个经典的密钥管理问题,即如何在不影响安全性的情况下安全地存储和分发密钥?您可以做的一件事是根据用户密码 + salt 创建一个密钥,以便您的应用程序(在验证用户身份后)使用基于密码 + 一些随机 salt 值的算法重新生成密钥并将其保存在会话中。只有用户才能解密他们上传到系统中的数据。这样做的一个好的副作用是用户现在也无法读取其他用户的数据。但是,这样做有一个缺点,如果您的用户丢失了密码,则密钥及其文件将无法恢复。通常在这些情况下,您会做某种密钥托管,其中有一个受信任的第三方可以使用主密码存储和加密所有密钥,或者您是受信任方并使用某个主密钥加密所有密钥不是您的应用程序的一部分,而是存储在单独的安全系统上。另一个缺点是,当用户更改密码时,您必须对文件系统上的所有数据进行解密和重新加密,这可能是一个漫长的过程,具体取决于存储的数据量。

无论如何,如果您遇到钥匙被盗的情况,您应该保留某种应急计划。开始设计应用程序的一个好地方是查看 OWASP(开放 Web 应用程序安全项目)的设计元素https://www.owasp.org/index.php/Cryptographic_Storage_Cheat_Sheet

于 2012-10-14T18:52:47.817 回答
0

如果您使用私钥加密来保护文件,您仍然会遇到密钥必须在您的源中某处的问题。我想到的两种选择是:

  1. 公钥加密 - 使用嵌入在 dll 中的公钥加密数据,并且机器上没有私钥。然后,您将在解密之前将文件带到其他地方。
  2. 使用DPI 函数使用用户级密钥加密数据。然后没有明确的管理密钥,并且数据只能由以该用户身份运行的进程读取(因此您可能会更改您的应用程序池以使用计算机帐户运行)。
于 2012-09-22T19:31:04.240 回答