当前位置:  开发笔记 > 编程语言 > 正文

如何安全地旋转机器钥匙?

如何解决《如何安全地旋转机器钥匙?》经验,为你挑选了0个好方法。

我们的应用程序具有以下内容web.config:


它用于加密/解密ASP.NET内置的许多东西,包括:

表单验证票证

匿名识别模块门票

防伪标记(在ASP.NET MVC中)

如果机器密钥被泄露,则意味着攻击者可以解密所有这些内容.一个安全的最佳实践是经常转动钥匙(或者至少当你认为它可能会受到损害).这将需要能够对每段加密数据进行版本化,以便在需要时进行旋转.

如果更改计算机密钥并重新部署站点,则具有加密数据的现有用户(例如cookie,表单字段)很可能会在下一个请求中触发异常,因为数据无法再解密.例如,AnonymousIdentificationModule将抛出一个CryptographicException: Error occurred during a cryptographic operation..如果AnonymousIdentificationModule没有版本加密/解密的能力,这就完全有道理.

我正在考虑使用的一种方法是实现自定义HashAlgorithmSymmetricAlgorithm内置版本控制以委托实际算法.例如:

    将它们注册为CryptoConfig.AddAlgorithm():

    CryptoConfig.AddAlgorithm(typeof(MyCustomHashAlgorithm), "MyCustomHashAlgorithm");
    CryptoConfig.AddAlgorithm(typeof(MyCustomSymmetricAlgorithm), "MyCustomSymmetricAlgorithm");
    

    更改以使用自定义算法:

    
    

但是,我很关心实现HashAlgorithmSymmetricAlgorithm.我不想意外地引入安全漏洞,这是一个容易做到这一点的地方.此外,这感觉就像一个巨大的黑客,因为它真的属于使用该算法的地方(我认为).

另一种方法是重新实现使用机器密钥但添加版本控制的所有功能.无法更改现有的.NET类.

你如何在生产中处理这个问题?我知道StackOverflow是用ASP.NET MVC编写的,那么他们如何处理呢?

附注:出于安全原因,我们实际上并不直接在web.config中存储它(它在源代码控制之外).

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有