如何使现有 Java 代码符合 FIPS 140-2?

问题描述

我们有一些执行 AES 和 RSA 加密的 Java 库(使用 javax.crypto.Cipher)。

出现了一个新要求以使代码符合 FIPS 140-2。阅读一些文章我的理解是我必须在JDK/JRE中的java.security文件中更改以下内容并重新编译代码。这会使我的库符合 FIPS 140-2 标准吗?

#Use these three providers for FIPS compliant
security.provider.1=com.rsa.jsafe.provider.JsafeJCE
security.provider.2=com.rsa.jsse.JsseProvider
security.provider.3=sun.security.provider.Sun

#disable the below providers for FIPS compliant
#security.provider.1=sun.security.provider.Sun
#security.provider.2=sun.security.rsa.SunRsaSign
#security.provider.3=sun.security.ec.SunEC
#security.provider.4=com.sun.net.ssl.internal.ssl.Provider
#security.provider.5=com.sun.crypto.provider.SunJCE
#security.provider.6=sun.security.jgss.SunProvider
#security.provider.7=com.sun.security.sasl.Provider
#security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
#security.provider.9=sun.security.smartcardio.SunPCSC
#security.provider.10=sun.security.mscapi.SunMSCAPI

我还需要执行任何其他更改,例如使用任何特殊的 jar、使用任何参数进行编译等吗?

解决方法

要符合 FIPS 140-2:

对于您的情况:

  • AES128、AES192 或 AES256 用于加密,操作模式为 GCM、CCM、CTR、CBC、CFB、OFB(或用于存储的 XTS)。
  • 用于密钥建立或签名的 RSA,密钥大小至少为 2048 位。