如何在.NET应用程序中隐藏加密密钥?我正在开发一个Intranet应用程序(C#),它使用一些我们希望保密的数据(Web服务器的本地数据)。此数据使用旧数据存储库加密(AES)。我们不能完全阻止对机器的物理访问。显然,我们这里永远不会有完美的安全保障。但是,我们希望任何人都可以在未经授权的情况下访问数据。问题是如何最好地存储密钥。它可以选择根据一些机器特定的ID进行加密,但该信息对于在机器上运行诊断工具的任何人来说都很容易获得。在应用程序中对其进行编码是一种选择(它是一次性应用程序)。但是,.NET程序集很容易反编译。那么,最好是混淆它,使用加密的启动器,编译它吗?还是我缺少一个选项?我们很清楚,我知道如果有人下定决心,那几乎是一个失败的原因,但我们想在限制范围内尽我们所能。加密内置于.NET配置系统中。您可以加密app/web.config文件的块,包括存储私钥的位置。http://www.dotnetprofessional.com/blog/post/2008/03/03/Encrypt-sections-of-WebConfig-or-AppConfig.aspx用令人困惑的术语来说,你所追求的是常量隐藏,即Constants被转换为函数和计算的方法,在运行时执行以重新实现所述常量。然而,这仍然处于混淆领域,并且容易受到代码提取的影响,攻击者只需映射出与该常量关联的代码并在单独的应用程序中运行它以检索该值;或将应用程序的内存转储到正确的位置,以便扫描所需的值。还有一种稍微更高级的隐藏加密密钥的方法,称为白盒加密,它通过从给定密钥生成加密函数并将它们组合在一起来采用无密钥密码。顾名思义,该方法旨在即使在白盒攻击场景中也具有弹性(攻击者可以访问字节码并能够在运行时检查和操作可执行文件)。这些都是通过模糊实现安全的非常先进的方法,可能值得考虑一开始就不会强迫您这样做的替代模型。如果有人可以将调试器附加到您的程序,那么您无能为力。他们不必弄清楚您的配置,反汇编您的应用程序等。他们所要做的就是运行应用程序-观看它使用密钥-宾果游戏。在这些情况下,混淆并没有帮助。最好的防御是使用硬件来保护密钥——这将执行加密但不会泄露密钥本身(有时会通过探测电线、将内存暴露于低温/辐射/其他新东西等攻击来增强)。IBM做了一些不错的事情(谷歌IBM-4764),但它并不便宜。以上是C#学习教程:Howtohideencryptionkeysin.NETapplications?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
