Issues in using OpenSAML 4.x in FIPS compliant applications

Paul Henson henson at signet.id
Fri Aug 18 01:28:08 UTC 2023


On 8/17/2023 5:57 PM, Brent Putman via dev wrote:

> I currently personally know nothing of FIPS compliance, so the concrete 
> requirements here are just a mystery to me at this point. But in general:

I am certainly no expert in the area, but "FIPS" stands for "Federal 
Information Processing Standards", and are basically definitions and 
standards that must be met by federal government agencies and some 
contractors working with the federal government:

https://www.sdxcentral.com/security/definitions/data-security-regulations/what-does-mean-fips-compliant/

One of the areas covered by FIPS is cryptography, for example, openssl 
has a FIPS compliant module:

https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/4282


To be considered FIPS compliant, a given software library implementing 
cryptography needs to be submitted to NIST for review and certification. 
The certification for Bouncy Castle can be found here:

https://csrc.nist.gov/projects/cryptographic-module-validation-program/Certificate/3514


The problem these people are having is that if they have any Bouncy 
Castle cryptography jars in their class path other than the FIPS one, 
the application might, even inadvertently, utilize an algorithm that has 
not been certified and is not allowed. but the application won't run 
without that jar file, as opensaml has hard dependencies on classes not 
offered by the FIPS jar, only the regular ones.

> If it ever gets to the point of us trying to support FIPS properly, we'd 
> really need to nail down what the actual ask is here

Basically, that there be a mode where opensaml is restricted to only be 
able to use the set of cryptographic algorithms that are allowed by FIPS 
and implemented using a FIPS certified library, and has no dependencies 
in that mode preventing it from being run with solely that jar file in 
the class path.

> enough for FIPS users", etc.  Right now the kludges people are doing are 
> just avoiding runtime errors for things they apparently aren't currently 
> using anyway.

The kludges are being used to allow opensaml to operate using just the 
FIPS certified Bouncy Castle jar file and removing any load/runtime 
dependency on other noncertified cryptography modules.

> But to do it properly, we might actually have to make all of that stuff 
> work with the BC FIPS dependency. As in, they might actually want to 
> use ConcatKDF with ECDH.  Or even EC keys period, which is what most of 
> the ECNamedCurve* and EC5Util dependence is about (consuming and 
> emitting KeyInfo structures).

If you look at the certification for the Bouncy Castle FIPS Java API, 
you will see that while ECDSA is listed, ECDH is not. It doesn't matter 
whether or not they want to use it, they are not allowed to, as Bouncy 
Castle does not provide a FIPS certified algorithm implementing it. If 
it's not in the FIPS jar, it can't be used.

> So, we might have to have separate modules in java-opensaml and 
> elsewhere, for FIPS vs non-FIPS.  We might have to have then different 
> distributions of the IdP. Etc.  Could get complicated.

I don't think you need separate modules per se? Just configuration 
capability such that in "FIPS mode" it doesn't try to load any classes 
or utilize any functionality not provided by the FIPS jar.

> And then there's the fact (that we apparently just had to deal with, 
> again) that the BC folks make completely breaking change Is in any 
> release, i.e. no concept of minor or patch releases ala semantic

Well, that sucks.

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




More information about the dev mailing list