ランダムな文字列であるトークンとキーを生成したいと考えています。それらを生成するための許容可能な方法は何ですか?
標準ライブラリ関数を介して 2 つの UUID を生成し、それらを連結することは許容されますか?
ランダムな文字列であるトークンとキーを生成したいと考えています。それらを生成するための許容可能な方法は何ですか?
標準ライブラリ関数を介して 2 つの UUID を生成し、それらを連結することは許容されますか?
os.urandomは、オペレーティングシステムの乱数ジェネレーターへのアクセスを提供します
編集:Linuxを使用していて、セキュリティについて非常に懸念している場合は、/ dev /random/を直接使用する必要があります。この呼び出しは、十分なエントロピーが利用可能になるまでブロックされます。
コンピュータ (特別なハードウェアなし) は、疑似乱数データしか生成できません。しばらくすると、すべての疑似乱数ジェネレーターが反復を開始します。それ自体を繰り返す前に生成できるデータの量は、期間と呼ばれます。
非常に人気のある疑似乱数 (random
モジュール内の Python でも使用される) ジェネレーターはMersenne Twisterです。ただし、比較的少数の反復のみを観察した後、次の反復を予測するのはかなり簡単であるため、暗号化の目的には適していないと見なされます。
適切と思われるアルゴリズムのリストについては、暗号的に安全な疑似乱数ジェネレーターに関するウィキペディアのページを参照してください。
FreeBSD、OpenBSD、OS X などのオペレーティング システムは、デバイスにYarrowアルゴリズムを使用しurandom
ます。そのため、これらのシステムos.urandom
では、暗号的に安全であると見なされているため、使用しても問題ない場合があります。
もちろん、何を使用する必要があるかは、要件の高さに大きく依存します。どのくらい安全にしたいですか?一般に、公開されテスト済みのアルゴリズムの実装を使用することをお勧めします。独自の実装を作成することは、間違いを犯しやすいものです。
編集:コンピューターは、たとえば割り込みが到着する時間を監視することで、ランダムなデータを収集できます。ただし、これは大量のランダム データを提供しないため、PRNG のシードによく使用されます。