2016-04-05 8 views
1

FIPSとOpenSSLに関連する一連のクエリは、あまり気にしていません。私の理解を確認するための基本的な質問です。FIPSで検証済みのOpenSSLランタイム

OpenSSLランタイムバイナリは、製品の一部としてサードパーティによって提供されています。私のアプリケーションは、内部でOpenSSLランタイムを使用しているサードパーティのモジュールを消費することになっています。私のアプリケーションでは、FIPS_mode_set()を明示的に使用してFIPSモードを設定していません。パラグラフの上で提供された文脈に関連した質問があります。

  1. 私のアプリケーションは、それが非FIPSモードは自分のアプリケーションのために設定されており、NO FIPS 140-2検証済みの暗号化は、彼らには、OpenSSLで使用できる場合でも、使用される意味は、FIPS_mode_set()によって明示的にFIPSモードを設定されていない場合ランタイム?
  2. サードパーティのバイナリがFIPSモードを設定しているかどうかを確認する方法はありますか?

答えて

2

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では、LoadLibraryGetProcAddressと呼び出します。手元のシンボルを使用すると、FIPS_mode()に間接的に電話することができます。

Dynamically Loaded (DL) Libraries HowToまたは検索スタックオーバーフローも参照してください。

関連する問題