问题描述
我们有一些执行 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:
- 您必须使用 FIPS 140-2 批准的加密模块。它将提供经批准的加密实现。请参阅:https://csrc.nist.rip/groups/STM/cmvp/documents/140-1/140val-all.htm。阅读说明和/或证书以了解要使用的版本。
- 对于每个加密操作(签名、加密、密钥建立、散列...),您还必须使用经批准的安全算法和参数。阅读:https://csrc.nist.gov/csrc/media/publications/fips/140/2/final/documents/fips1402annexa.pdf。该文档还提供了大量有关安全功能配置(密钥大小、椭圆曲线等)的参考。
对于您的情况:
- AES128、AES192 或 AES256 用于加密,操作模式为 GCM、CCM、CTR、CBC、CFB、OFB(或用于存储的 XTS)。
- 用于密钥建立或签名的 RSA,密钥大小至少为 2048 位。