ASP.net上传/解密后加密文件到用户

时间:2012-09-22 18:40:57

标签: c# asp.net vb.net security encryption

我正在研究和开发一个可能的项目,我的潜在客户正与我讨论。

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

  1. 使用 https
  2. 使用ssl证书加密所有敏感数据/文件
  3. 现在我们 保存我们数据库中的文件尽管有可能。但我没有看到将其保存到数据库的任何大优势(文件备份将分开完成 - 这可能是您的应用程序中的一个点)。有关在DataBase中保存文件赞成和缺点,请参阅this question at StackOverflow

    MSDN上有一个How to encrypt using a X509证书示例,网上有很多关于此主题的好文章(codeproject.comSO,...)

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

答案 1 :(得分:0)

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

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

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