FIPS 140 service indicator revamp

NIIBE Yutaka gniibe at fsij.org
Thu Nov 21 02:13:05 CET 2024


Stephan Mueller <smueller at chronox.de> wrote:
> Could you please help me finding the function _gcry_thread_context_set_fsi?

It's in a branch:

   https://dev.gnupg.org/source/libgcrypt/history/gniibe%252Ft7340/

In the commit:

   https://dev.gnupg.org/rCfa87b8de038878704c381ac1e63cafee78e9b798

In the file:
   https://dev.gnupg.org/source/libgcrypt/browse/gniibe%252Ft7340/src/fips.c$81


My intention is that those two functions may be provided by
non-libgcrypt implementation.  In that case, replacing the functions by
use of ERRNO is possible.


Writhing the code, I thought about general cases; There could be
multiple causes for FIPS 140 compliance.

If we will change _gcry_kdf_derive with GCRY_KDF_PBKDF2 to finish its
computation under FIPS mode, possible causes are:

- passphrase length too small
- salt length too small
- iteration number is too small
- minimum key size is too small

I wonder if all of these should be recorded within the FIPS service
indicator.  It could be done by implementing a chain of causes (while
it's only "unsigned long" value now in my branch).

Shall I do something like:

 - recording a chain of causes within the FIPS service indicator
   (heavy implementation)

 - ERRNO implementation as an alternative (#ifdef, perhaps),
   only retains the last cause (or the first one)
   (light implementation)

My opinion is that exposing implementation detail (for ERRNO use) is not
good, at least for starting point.
-- 



More information about the Gcrypt-devel mailing list