Thanks a lot Matthias for the suggestion. I have few follow-up questions below:
On Mon, Mar 5, 2018 at 2:57 AM, Dr. Matthias St. Pierre < matthias.st.pie...@ncp-e.com> wrote: > > > On 05.03.2018 10:46, Alan Dean wrote: > > Question 1: Is it even feasible to make the FIPS mode always enabled for > the whole OpenSSL library (i.e. for both libcrypto and libssl), so that > most the applications which dynamically linked to libcrypto and libssl will > be automatically use OpenSSL FIPS mode without the need of changes to add > the FIPS_mode_set invocation (with some exception such as OpenSSH which may > still need some fixes). (Assuming from certification's perspective we are > ok if we may these changes) > > > Question 2: If the above idea is feasible, where in the OpenSSL library > will be the best entry to invoke FIPS_mode_set API, so that we can make the > whole OpenSSL library always in FIPS mode? Any potebtial issues for this > solution? > > > Any suggestions will be greatly appreciated. > > > > The optimal location for inserting the FIPS_mode_set(1) call is probably > OPENSSL_init() (openssl-1.0.2/crypto/o_fips.c), see code snippet below. > > void OPENSSL_init(void) > { > static int done = 0; > if (done) > return; > done = 1; > #ifdef OPENSSL_FIPS > FIPS_set_locking_callbacks(CRYPTO_lock, CRYPTO_add_lock); > # ifndef OPENSSL_NO_DEPRECATED > FIPS_crypto_set_id_callback(CRYPTO_thread_id); > # endif > FIPS_set_error_callbacks(ERR_put_error, ERR_add_error_vdata); > FIPS_set_malloc_callbacks(CRYPTO_malloc, CRYPTO_free); > RAND_init_fips(); > FIPS_mode_set(1); <<< ENABLE FIPS MODE HERE <<< > #endif > #if 0 > fprintf(stderr, "Called OPENSSL_init\n"); > #endif > Currently OPENSSL_init() is actually invoked from within FIPS_mode_set(). If we put FIPS_mode_set() inside OPENSSL_init, then it makes OPENSSL_init to call itself recursively. In that case would it be ok to just remove OPENSSL_init from within FIPS_mode_set? > > > However, I am sceptical whether this approach will be accepted, because > there are (at least) two potential problems: > > * Normally, it is mandatory to check the result of FIPS_mode_set() or > FIPS_mode() to ensure that the FIPS initialization succeeded. However, an > application which is not FIPS-aware won't check the result. > Did you mean if FIPS_mode_set is invoked in the library level, then applications won't be checking the return results of FIPS_mode_set and could cause problem if FIPS_mode_set didn't finish successfully? > * It can happen that applications which have their own configuration and > enable/disable FIPS mode explicitely, call FIPS_mode_set(0) afterwards. > > > HTH, > Matthias > > > > -- > openssl-users mailing list > To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users > >
-- openssl-users mailing list To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users