3

私はLinuxを使用しており、アドレス空間配置のランダム化があります。スタック上でバッファーを宣言し、初期化せずに残してエントロピーに使用する必要がありますか、それとも、スタック上にすでにあるアドレスを取得して整数にキャストし、(それがいくらかランダムであることがわかっているため)空間配置のランダム化に対処するには)代わりにその整数をエントロピーに使用しますか?

ポインタアプローチには、単一化されたバッファを操作しようとしたときにコンパイラの警告が生成されないという利点がありますが、私のテストでは、アドレスの下位部分(おそらく最後の1バイトまたは2バイト)のみが変更されるように見えました呼び出しから呼び出しへ。エントロピーバッファのパフォーマンスはさらに悪化しているようで、多くの場合、何も含まれていません。

4

5 に答える 5

6

Linuxで弱いエントロピーが必要な場合は、読んでみません/dev/urandomか?/dev/randomこれは、それほどランダムではない(ただし、繰り返しになりますが、非ブロッキング)の非ブロッキングバリアントです。

于 2009-12-06T22:18:24.223 に答える
3

基本的に、何かにエントロピーが必要な場合は、コンパイラの癖やメモリ割り当てレイアウトの期待ではなく、外部ソースからエントロピーを取得する必要があります。コンパイラーが異なるポインターを提供するという保証はありません。あるシステムでは問題なく動作するが、別のシステムではエントロピーを完全に与えることができないコードを書く場合があります。

他の人が示唆しているように、/ dev/randomを使用することは良い考えです。それが利用できない場合、少しのエントロピーが必要な場合は、time()関数(time.h)の呼び出しを回避できる可能性があります。

しかし、人々がほんの少しのエントロピーを要求するとき、それはランダムな値へのある種の依存を示唆しているので、私は非常に心配します。エントロピーがわずかしかないということは、同じ値を頻繁に返すことを意味し、システムが予期しない方法で失敗する可能性があります。私の強くお勧めするのは、/ dev/randomなどのソースから常に良好なエントロピーを取得することです。

于 2009-12-06T23:15:11.443 に答える
2

/ dev / randomの何が問題になっていますか?

エントロピーに初期化されていないメモリを使用しないでください。特にスタック。連続して実行すると、非常によく似た外観になる傾向があります。そして、それは非常に予測可能であり、あまりランダムではありません。

于 2009-12-06T22:18:48.313 に答える
1

弱いとはどういう意味ですか?Cのエントロピーの標準的なソース(暗号化以外の目的)はtime、から<time.h>です。

初期化されていない変数へのアクセスは未定義の動作であり、一部のプラットフォームでは予測できない結果をもたらす可能性があります。しないでください。

于 2009-12-06T22:18:46.797 に答える
1

またはから数バイト読んでみません/dev/random/dev/urandom

于 2009-12-06T22:19:02.977 に答える