GeR*_*ReV 11 asp.net encryption
几年前,当我第一次被引入ASP.net和.NET Framework时,我构建了一个非常简单的在线文件存储系统.该系统使用Rijndael加密来存储服务器硬盘上加密的文件,并使用HttpHandler解密并将这些文件发送到客户端.
作为我的第一个使用ASP.net和数据库的项目之一,我不了解整个事情是如何工作的(以及陷入Jeff Atwood在这个主题上描述的相同陷阱),我决定将新生成的密钥和IV存储在一起与数据库中的每个文件条目.
为了使事情更加清晰,加密只是为了保护文件不被直接访问服务器,并且密钥不是由用户输入的密码生成的.
我的问题是,假设我不想为所有文件保留一个密钥,我应该如何存储加密密钥以获得最佳安全性?什么是最佳做法?(即:在不同的服务器上,在纯文本文件上,加密).
此外,这种加密算法中使用的初始化向量是什么?它应该在系统中保持不变吗?
blo*_*art 12
密钥应该受到保护并保密,简单.实施不是.密钥管理系统由可靠的供应商以大量资金出售,因为解决问题很困难.
您当然不希望为每个用户使用相同的密钥,使用的密钥越多,它就越容易破坏它,或者至少有一些信息泄漏.AES是块密码,它将数据拆分为块,并将最后一个块加密的结果提供给下一个块.初始化向量是算法的初始提要,因为在起点处没有任何内容可以开始.使用具有相同密钥的随机IV会降低信息泄露的风险 - 对于每个加密的数据,它应该是不同的.
如何存储密钥取决于系统的架构方式.我刚刚完成了一个KMS,其中密钥远离主系统,加密和解密的功能通过WCF公开.您发送纯文本并获取对密钥和加密文本的引用 - 这样KMS负责系统中的所有加密.在您的情况下,这可能是矫枉过正的.如果用户在系统中输入密码,则可以使用该密码生成密钥对.然后,此密钥对可用于加密该用户的密钥存储区 - XML,SQL,等等,并用于解密用于保护数据的每个密钥.
如果不了解您的系统配置方式或其目的,除了"必须保护密钥,密钥和IV不得重复使用"之外,很难推荐其他任何内容.
在http://web.archive.org/web/20121017062956/http://www.di-mgt.com.au/cryptoCreditcard.html上有一篇非常好的文章,其中涵盖了 IV 和加盐问题以及上面提到的欧洲央行的问题。
诚然,它仍然没有完全涵盖“我在哪里存储密钥”,但在阅读和消化它之后,希望它不会成为解决方案的巨大飞跃......
| 归档时间: |
|
| 查看次数: |
12698 次 |
| 最近记录: |