2009-07-25 7 views
4

Linuxの場合、私はmkpasswdを使用してOS Xで使用するランダムなパスワードを生成するのに慣れていますが、このコマンドはありません。毎回私のvpsにsshingするのではなく、Javaを使って実装し直したかったのです。私がしたことは、ランダムに4つの小文字、2つの大文字、2つの記号(/など)と2つの数字を選ぶことです。それから私はベクトルを作成し、それをシャッフルします。mkpasswdの再実装

これは十分にランダム化されていると思いますか?

答えて

1

はい、そうです。 java.util.Random

このクラスのインスタンスは、擬似乱数のストリームを生成するために使用されます。このクラスでは、線形合同式を使用して修正された48ビットのシードが使用されます。

クラスランダムによって実装されるアルゴリズムは、各呼び出しで最大32個の擬似ランダム生成ビットを供給できる保護されたユーティリティメソッドを使用します。コメントへの応答で

EDIT

/** 
* Creates a new random number generator. This constructor sets 
* the seed of the random number generator to a value very likely 
* to be distinct from any other invocation of this constructor. 
*/ 
public Random() { 
    this(++seedUniquifier + System.nanoTime()); 
} 

private static volatile long seedUniquifier = 8682522807148012L; 
+0

そして種はどこから来ますか? :) – Inshallah

+1

競合は起こりそうにないかもしれませんが、安全にしません。誰かがSystem.nanoTime()の値を推測できる場合、ジェネレータがシードされている時点で、どのパスワードが生成されているかを知ることができます。それは本当の問題です。私はあなたがjava.util.Randomをそのまま使うことはできないと思っています。例えば、/ dev/randomのようなもっと予測できないソースからシードを取得しなければなりません。 – Inshallah

+0

あなたは正しいです:-) – dfa

0

エントロピーがどこから来るかによって異なります。あなたの特定の言語に付属しているrand()または類似の関数を使用すると、安全でない可能性があります。

OSXでは/ dev/randomを使用できます。

0

それはOKかもしれませんが、パスワードでいくつかのランダム化は、おそらく長許可する必要があります。

プログラムが普及すれば、パスワードの長さが一般に知られている弱点になります。また、小文字の正確な比率をランダムにする:大文字:記号:数字は少しです。

+0

私はそれらをランダム化します。私はちょうどオプションを生成せずにmkpasswdをコピーしていました。 –

0

あなたのOS Xホストでmkpasswdをコンパイルするだけではどうですか?

1

Mac Portsには、同様のpwgenコマンドがあります。

3

java.util.Randomの代わりにjava.security.SecureRandomを使用すると、おそらく安全です。 SecureRandomは、「暗号的に強力な疑似乱数ジェネレータ(PRNG)」を提供します。私。それは、種子が容易に推測できず、生成された数が高いエントロピーを有することを保証する。

+0

私はどこかでそれを掘り下げました:... SecureRandomのシード自体を内部的な乱雑さから守りましょう。デフォルトでは、これはMac OS X上のデバイス/ dev/randomに設定されています。 – Inshallah

関連する問題