FIPSとOpenSSLに関連する一連のクエリは、あまり気づいていないので、
あなたはUser Guide for the OpenSSL FIPS Object Module v2.0に精通している必要があります。
私のアプリケーションは、それが非FIPSモードは自分のアプリケーションのために設定されており、NO FIPS 140-2検証済みの暗号化は、彼らがしている場合でも、使用される意味は、FIPS_mode_set()
によって明示的にFIPSモードを設定されていない場合OpenSSLランタイムで利用できますか?
誰かが0以外の値を持つFIPS_mode_set()
を呼び出す必要があり、呼び出しが成功する必要があります。通常、あなたはそれをそう呼ばれます。そのユーザーガイドからの例に基づいて、55ページ:
#ifdef OPENSSL_FIPS
if(FIPS_mode_set(1))
{
fprintf(stdout,"FIPS validated cryptography\n");
}
else
{
ERR_load_crypto_strings();
ERR_print_errors_fp(stderr);
exit(1);
}
#endif
成功したコールは、ライブラリが初期化セルフテストに合格し、それが非FIPSアルゴリズムを無効にすることを意味します。
(1)誰が非ゼロ値でFIPS_mode_set()
を呼び出していない、または(2)の呼び出しが失敗した場合は、暗号検証FIPSを使用してではありません。
(1)または(2)が発生した場合でも、すべての暗号化は引き続き利用できます。 FIPSの検証はされません。
サードパーティのバイナリがFIPSモード
コールFIPS_mode()
またはFIPS_module_mode()
を設定しているかどうかをチェック交差する方法はあります。 0が返された場合は、ではなく、はFIPSモードで動作しています。 0以外の値を返すと、FIPSモードになります。
ユーザーガイド、55ページからの例に基づいて:
#ifdef OPENSSL_FIPS
if (FIPS_mode())
{
fprintf(stdout,"FIPS validated cryptography\n");
}
else
#endif
{
fprintf(stdout,"No FIPS validated cryptography\n");
}
あなたはFIPS_mode()
のような記号でいくつかの痛みのポイントが発生することがあります。それはではなく、FIPS用にの設定とビルドを行ったからです。したがって、プログラムをコンパイルしてリンクするときには、OPENSSL_FIPS
のようなプリプロセッサマクロは定義されません。
この場合、ベンダが提供するライブラリをdlopen
にして、dlsym
というシンボルを見つける必要があります。 Windowsでは、LoadLibrary
とGetProcAddress
と呼び出します。手元のシンボルを使用すると、FIPS_mode()
に間接的に電話することができます。
Dynamically Loaded (DL) Libraries HowToまたは検索スタックオーバーフローも参照してください。
出典
2016-04-05 16:23:28
jww