Issues in using OpenSAML 4.x in FIPS compliant applications

Paul Henson henson at signet.id
Wed Aug 16 01:29:31 UTC 2023


On 8/15/2023 3:03 AM, Ritesh Kothari via dev wrote:

> Does not look like, Shibboleth wikis ensure any support on it in future 
 >
> - https://shibboleth.atlassian.net/wiki/spaces/DEV/pages/1159627167/FIPS 

Well, yes, as Scott made clear the project itself has no requirements 
for FIPS compatibility, and nobody with a paid consortium support 
contract has asked for it, so it's not a priority.

> - https://shibboleth.atlassian.net/browse/OSJ-339 

Although as demonstrated by this change Brent made, they will certainly 
try to help within the constraints they're working in.

It seems your options if you need this badly enough are either become a 
consortium member and submit an official feature request, implement it 
yourself and submit it for review, or get a third party shibboleth 
support company to do that for you:

	https://www.shibboleth.net/support/


 From just a quick look, these are the bouncycastle classes in use by 
the latest source of opensaml that aren't in the FIPs compliant jar:

org.bouncycastle.crypto.Digest
org.bouncycastle.crypto.agreement.kdf.ConcatenationKDFGenerator
org.bouncycastle.crypto.digests.RIPEMD160Digest
org.bouncycastle.crypto.digests.SHA1Digest
org.bouncycastle.crypto.digests.SHA224Digest
org.bouncycastle.crypto.digests.SHA256Digest
org.bouncycastle.crypto.digests.SHA384Digest
org.bouncycastle.crypto.digests.SHA512Digest
org.bouncycastle.crypto.params.KDFParameters
org.bouncycastle.jcajce.provider.asymmetric.util.EC5Util
org.bouncycastle.jce.ECNamedCurveTable
org.bouncycastle.jce.provider.BouncyCastleProvider
org.bouncycastle.jce.spec.ECNamedCurveParameterSpec

If the functionality provided is optional, you'd need a way to disable 
it; if it was required, you would need an alternative implementation 
that met your requirements. It appears the change from OSJ-339 takes 
care of the two KDF related classes, and 
org.bouncycastle.jce.provider.BouncyCastleProvider is only used by the 
testing framework. These ones:

org.bouncycastle.crypto.digests.RIPEMD160Digest
org.bouncycastle.crypto.digests.SHA1Digest
org.bouncycastle.crypto.digests.SHA224Digest
org.bouncycastle.crypto.digests.SHA256Digest
org.bouncycastle.crypto.digests.SHA384Digest
org.bouncycastle.crypto.digests.SHA512Digest

appear to have corresponding classes in the fips jar:

org.bouncycastle.crypto.general.RIPEMD160Digest
org.bouncycastle.crypto.fips.SHA1Digest
org.bouncycastle.crypto.fips.SHA224Digest
org.bouncycastle.crypto.fips.SHA256Digest
org.bouncycastle.crypto.fips.SHA384Digest
org.bouncycastle.crypto.fips.SHA512Digest


I think that only leaves the EC crypto support; it looks like the 
elastic search guys worked around that by just removing the file 
META-INF/services/org.opensaml.security.crypto.ec.NamedCurve from the jar:

	https://github.com/elastic/elasticsearch/pull/98199

Based on the discussion there, there are just a couple of classes that 
are eagerly loaded that pull in these dependencies, and it might just 
need a simple parameter created to avoid doing that in FIPs compliant mode.


-- 
Signet - The Art of Access
https://www.signet.id/


More information about the dev mailing list