GnuTLS can operate in a special mode for FIPS140-2. That mode of operation is for the conformance to NIST’s FIPS140-2 publication, which consists of policies for cryptographic modules (such as software libraries). Its implementation in GnuTLS is designed for Red Hat Enterprise Linux, and can only be enabled when the library is explicitly compiled with the ’–enable-fips140-mode’ configure option. The operation of the library is then modified, as follows.
/proc/sys/crypto/fips_enabledcontains ’1’ and
There is a ’zombie’ FIPS140-2 mode which is enabled when only one of the files described in the first step is available. In that case the self tests will be performed without affecting the operation of the library.
The integrity checks for the dependent libraries and GnuTLS are performed using ’.hmac’ files which are present at the same path as the library. The key for the operations can be provided on compile-time with the configure option ’–with-fips140-key’. The MAC algorithm used is HMAC-SHA256.
There are also few environment variables which modify that operation. The
GNUTLS_SKIP_FIPS_INTEGRITY_CHECKS will disable
the library integrity tests on startup, and the variable
GNUTLS_FORCE_FIPS_MODE when set to ’1’ will enable the FIPS140-2
mode, when set to ’0’ will force a disable of it.
On runtime an application can verify whether the library is in FIPS140-2 using the gnutls_fips140_mode_enabled function.