zoukankan      html  css  js  c++  java
  • .NET程序与FIPS兼容性问题(转)

    遇到的问题,记录下解决方案及原因

    转载自:https://xiaozhou.net/let_your_dotnet_program_compatible_with_fips-2012-02-17.html

    开始之前,先介绍一下术语:

    FIPS,全称是Federal Information Processing Standard,中文名叫联邦信息处理标准,FIPS 是由两个政府主体开发的标准。一个是美国国家标准和在美国境内的技术。另一种是通信安全机构,在加拿大。FIPS 是建议或要求使用 (美国或加拿大) 的联邦政府操作 IT 系统中的标准。

    FIPS 140-2,主要用来定义安全级别,整个FIPS 140-2分为四个安全级别,它主要定义了一些和安全相关的策略,包括指定哪些加密算法和可使用的哈希算法和加密密钥的生成和管理的方式。

    故事从这里开始,最近在做公司项目的时候,遇到一个很怪异的问题。我们的一个模块在普通的操作系统上,能正常运行,但是在启用了FIPS策略的机器上,就挂了。刚开始,还以为是其他原因,后来终于真相大白,这个bug和FIPS的安全策略有关。后来才知道,这个bug和US gov定义的这个安全策略那是相当的有基情!

    前面已经提到,FIPS中有对加密算法的严格要求,总的来说,有些算法是FIPS允许的,有些是不允许的。而我的一个模块,恰恰用到了一个不兼容FIPS的加密算法,刚刚撞在了枪口上。悲剧啊⋯⋯

    不过还是要感谢google老师,在搜索了一上午后,终于找到了解决办法:

    第一种,是在.NET的配置文件的runtime节点中,加入如下节点:

    <runtime>
    <enforcefipspolicy enabled="false"></enforcefipspolicy>
    </runtime>
    

    通过把enforceFIPSPolicy强行设置为false,从而避过FIPS的策略检查

    第二种方法,当然是顺从FIPS的策略,选择一种FIPS兼容的加密算法。下面是FIPS对各种加密算法的兼容性测试结果:

    FIPS Compliant in mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

    Name Compliant Subclass

    DESCryptoServiceProvider Y SymmetricAlgorithm

    DSACryptoServiceProvider Y AsymmetricAlgorithm

    HMACMD5 N HashAlgorithm

    HMACRIPEMD160 N HashAlgorithm

    HMACSHA1 Y HashAlgorithm

    HMACSHA256 N HashAlgorithm

    HMACSHA384 N HashAlgorithm

    HMACSHA512 N HashAlgorithm

    MACTripleDES Y HashAlgorithm

    MD5CryptoServiceProvider N HashAlgorithm

    RC2CryptoServiceProvider N SymmetricAlgorithm

    RIPEMD160Managed N HashAlgorithm

    RSACryptoServiceProvider Y AsymmetricAlgorithm

    RijndaelManaged N SymmetricAlgorithm

    SHA1CryptoServiceProvider Y HashAlgorithm

    SHA1Managed N HashAlgorithm

    SHA256Managed N HashAlgorithm

    SHA384Managed N HashAlgorithm

    SHA512Managed N HashAlgorithm

    TripleDESCryptoServiceProvider Y SymmetricAlgorithm

    FIPS Compliant in System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

    Name Compliant Subclass

    AesCryptoServiceProvider Y SymmetricAlgorithm

    AesManaged N SymmetricAlgorithm

    ECDiffieHellmanCng Y AsymmetricAlgorithm

    ECDsaCng Y AsymmetricAlgorithm

    MD5Cng N HashAlgorithm

    SHA1Cng Y HashAlgorithm

    SHA256Cng Y HashAlgorithm

    SHA256CryptoServiceProvider Y HashAlgorithm

    SHA384Cng Y HashAlgorithm

    SHA384CryptoServiceProvider Y HashAlgorithm

    SHA512Cng Y HashAlgorithm

    SHA512CryptoServiceProvider Y HashAlgorithm

    有了这个结果,就目标很明确了,选择一种与FIPS兼容的算法,即可一劳永逸,解决你的程序与FIPS不兼容的问题。

    或许,你还可以参考这两篇文章:

    FIPS definition from wikipedia

    Working with FIPS in .NET C#

  • 相关阅读:
    部署阿里云服务器流程小结
    爬虫中代理的设置问题介绍
    简析 __init__、__new__、__call__ 方法
    Python3.* 和Python2.*的区别
    解决k8s svcat ServiceInstance 删除不掉问题
    k8s dashboard部署,使用traefik暴露问题记录
    python中all函数得用法
    使用Hexo+github搭建个人博客大坑
    使用scrapy爬取百度招聘
    还是爬虫,使用的是selenium,爬取的是智联,爬取速度灰常慢...
  • 原文地址:https://www.cnblogs.com/e4ky/p/FIPS_enabled_false.html
Copyright © 2011-2022 走看看