questions on fips provider

pauli at openssl.org pauli at openssl.org
Mon Jul 3 09:34:40 UTC 2023


No, the legacy provider doesn't do any integrity checks on load. There 
is no need.

Likewise, the FIPS integrity check is _not_ attempting to detect 
tampering, it is designed to detect accident bit flipping.
Detecting deliberate tampering is far more involved to the point of 
being virtually impossible.


Paul Dale

On 3/7/2023 5:29 pm, Ishani wrote:
> Hi Paul,
>
> Yes it does do an integrity check on load.  This was the main reason 
> to limit the FIPS provider to being a loadable module.  The approach 
> taken in the 1.0.2 FOM wasn't viable with the re-architecture.
>
>  I assume these checks will be done even if we programmatically load fips.
> **Do we have similar checks for legacy provider as well (to make sure 
> legacy.so/legacy.dll <http://legacy.so/legacy.dll> loaded is the right 
> one and not something tampered by some body)?
>
> On Fri, 30 Jun 2023 at 12:45, <pauli at openssl.org> wrote:
>
>     Answers below....
>
>>     1) Is there a way to static link FIPS? I see at many places that
>>     fips cannot be statically linked but would like to know if we
>>     have any other ways to do that.
>
>     No.  This was a design goal/limitation from the start.  Statically
>     linking the FIPS provider would have been a major source of pain. 
>     We managed it for 1.0.2 with some inspirational assembly coding
>     but that approach wouldn't have worked for 3.0.
>
>
>>     2) If it is dynamic linking then does FIPS has any integrity
>>     check to make sure fips.so/fips.dll <http://fips.so/fips.dll> is
>>     the right one? and not some thing tampered by some body(as per my
>>     findings we have some check in configuration file as mentioned in
>>     the below attached snapshot 3rd line)
>
>     Yes it does do an integrity check on load.  This was the main
>     reason to limit the FIPS provider to being a loadable module.  The
>     approach taken in the 1.0.2 FOM wasn't viable with the
>     re-architecture.
>
>
>>     3) can both legacy and fips providers be loaded and used?
>
>     Technically yes, but you'll not be FIPS compliant unless you are
>     *extremely* careful.
>     Which means talking to your FIPS labs and getting official
>     resolutions on the specifics.
>     The OpenSSL developers are ***not*** FIPS experts. Only a FIPS lab
>     can definitively answer questions like this.
>
>
>>     4) Is it possible If i have built openssl with no-module
>>     configure option (to statically link legacy provider) and also
>>     wanted to use openssl-3.0.8 built fips module here? If yes then
>>     in what way can it be done?
>
>     Honestly not sure here.  You *must* load the FIPS provider
>     dynamically to be compliant.
>     If that's possible with the no-module option, you should be okay. 
>     I suspect it isn't.  Try it and see.
>
>     If you don't get a definitive result, this means talking to your
>     FIPS labs and getting official resolutions on the specifics.
>     The OpenSSL developers are ***not*** FIPS experts. Only a FIPS lab
>     can definitively answer questions like this.
>
>
>>     5) Is it possible to load multiple providers like default, leacy
>>     and also fips programmatically using OSSL_PROVIDER_load function ?
>
>     Absolutely it is possible.  However, meeting FIPS requirements
>     afterwards could be problematic.
>     This means talking to your FIPS labs and getting official
>     resolutions on the specifics.
>     The OpenSSL developers are ***not*** FIPS experts. Only a FIPS lab
>     can definitively answer questions like this.
>
>     Having several library contexts with each having different
>     providers loaded might be a way to circumvent the strict
>     interpretation of the requirements. This means talking to your
>     FIPS labs and getting official resolutions on the specifics.
>     The OpenSSL developers are ***not*** FIPS experts. Only a FIPS lab
>     can definitively answer questions like this.
>
>
>>     6) When multiple providers like for ex:  FIPS and default
>>     provider are enabled and when an encryption function is called,
>>     then algorithm from which provider is picked(from my findings it
>>     can use any of the loaded provider implementations )? assumption
>>     that we have *not* used property query string during algorithm
>>     fetches to specify which implementation to be used.
>
>     The OpenSSL project *deliberately* makes *no guarantee* about
>     which provider is used in such cases.  It is deterministic
>     currently, but there is no guarantee that we'll not change the
>     order of resolution or making it randomly non-deterministic in any
>     future releases.  Honestly, expect that *we will* make changes to
>     the resolution order in the future.  Such a change is not
>     considered breaking and doesn't have to adhere to our stable
>     release policy.
>
>     Our best recommendation is to not mix providers in library
>     contexts.  Seek resolution from you FIPS lab.
>
>
>     Dr Paul Dale
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mta.openssl.org/pipermail/openssl-users/attachments/20230703/5a965df1/attachment.htm>


More information about the openssl-users mailing list