4

私は、組み込みシステム用の乱数ジェネレーターを作成する任務を負っています。現在、使用しているエントロピー ソースは、キーパッド入力と、信号強度やバッテリー強度などのその他の変数です。

私は組み込みシステム用の素晴らしいポータブル SSL ライブラリを備えたPolarSSLを使用しています。ただし、ドキュメントを除いて、インターネット上にはほとんどありません。

エントロピー アキュムレータにエントロピー ソースを正しい方法で追加していないと思います。これは、Init でエラーを返すCTR-DRBG モジュールで問題を引き起こしています。(ソース エラー -52) RNG は組み込みシステム用であるため、システムからの初期エントロピーがないため、エラーが発生します。(リンク) Windows などの他の標準 OS で同じ RNG を試しても、エラーは発生しません。これに関連するコードの一部を次に示します。

    // Global Variables.
ctr_drbg_context ctx;
entropy_context etx;

// Inside Main
entropy_init( &etx );
// Add entropy sources

// Initializing CTR_DRBG
printf("Before ctrdrbg: %d", err);
err = ctr_drbg_init( &ctx, entropy_func, &etx,  (const unsigned char *) "RANDOM_GEN", 10 );
if( err != 0 )
{
   printf("Failed in ctr_drbg init!: %d", err);
} 

出力: Error on Ctr_drbg init: -52

私はこれを約1週間調べましたが、前進はありません。ほぼ諦めます!! 喜んで助けてくれる人はいますか?

4

1 に答える 1

3

最初の事実の答え:

Windows で動作する主な理由は、「十分な」ランダムを生成する複数の OS 固有のエントロピー ソースを使用できることです。

CTR-DRBG が要求するエントロピーの量は 48 バイトです (デフォルトの構成に基づく)。

エントロピー プールがこれらの 48 バイトを提供できるようにするには、ENTROPY_MAX_LOOP各エントロピー ソースに対して最大 256 のポーリング () を実行し、そのすべてをアキュムレータに入れます。すべてのソースが少なくともしきい値を提供することを期待しています! そうしないと、連続した呼び出しでそれ以上のデータが返されないため、現在のように失敗します ( POLARSSL_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED )。

そのため、「より良い」エントロピー ソースを提供するか、特定のソースに対してより適切な値にしきい値を定義する必要があります (一部のソースでは、ソースが常にエントロピー データを配信することが期待できない場合、これは0になる可能性があります)。

次に、セキュリティの答え:

エントロピー プールを有効にするには、実際のエントロピーが必要です。バッテリー メーターは、実際には安全なものではありません (かなり予測可能 (電源がオンの場合は常に 100) であり、多くの場合、予測可能な範囲内にあります。キーボード入力を使用することは、正しく行われれば価値があります。しかし、もっと必要になるでしょう.. 最良の方法to 'kickstart' a system that not provide a hardware RNG in its chipset is to use a seed file that is generated on a more secure system and read that and update it at startup and shutdown. このシード ファイルをエントロピーとして使用できますsource ir feed it directly in the ctr_drbg. あなたの場合、非常に低いしきい値のソース (場合によっては0 ) のみを使用し、シード ファイルからメイン エントロピーを取得することを期待します。

編集:この状況をより適切にカバーするために、エントロピー ソースの追加に関するナレッジベースの記事を強化します!

于 2014-01-13T16:29:40.380 に答える