- すべての実装されたインタフェース:
Serializable
強力な暗号化による乱数は、「FIPS 140-2, Security Requirements for Cryptographic Modules」のセクション4.9.1に指定されている統計的乱数生成テストに最低限適合しています。 さらに、SecureRandom
は、非決定論的な出力を生成する必要があります。 したがって、SecureRandom
オブジェクトに渡されるシード材料はすべて予測不可能でなければならず、すべてのSecureRandom
出力シーケンスは、「RFC 4086: セキュリティのランダム性要件」で説明されているように、暗号的に強くなければなりません。
多くのSecureRandom
実装は、疑似乱数ジェネレータ(PRNGは、確定的ランダム・ビット発生器またはDRBGとしても知られている)の形をとります。つまり、ランダム・シードから疑似ランダム・シーケンスを生成するために決定論的アルゴリズムを使用します。 実装の中には、真の乱数を生成するものもあれば、両方の技術の組み合わせを使用するものもあります。
呼び出し元は、引数のないコンストラクタまたはgetInstance
メソッドの1つを使用してSecureRandom
インスタンスを取得します。 次に例を示します。
SecureRandom r1 = new SecureRandom(); SecureRandom r2 = SecureRandom.getInstance("NativePRNG"); SecureRandom r3 = SecureRandom.getInstance("DRBG", DrbgParameters.instantiation(128, RESEED_ONLY, null));
上記の3番目の文は、特定のインスタンス化パラメータをサポートする特定のアルゴリズムのSecureRandom
オブジェクトを返します。 実装の有効なインスタンス化パラメータは、この最小限のリクエストと一致する必要がありますが、必ずしも同じである必要はありません。 たとえば、リクエストに特定の機能が必要ない場合でも、実際のインスタンシエーションによってその機能が提供されます。 実装は、実際に使用されるまでSecureRandom
を遅延インスタンス化することができますが、有効なインスタンス化パラメータは作成直後に決定されなければならず、getParameters()
は常に同じ結果をそのまま返します。
SecureRandom
の典型的な呼び出し元は、以下のメソッドを呼び出してランダムなバイトを取得します:
SecureRandom random = new SecureRandom(); byte[] bytes = new byte[20]; random.nextBytes(bytes);
呼び出し側は、generateSeed(int)
メソッドを呼び出して、指定された数のシード・バイトを生成することもできます。(他の乱数発生器をシード):
byte[] seed = random.generateSeed(20);
新しく作成されたPRNG SecureRandom
オブジェクトは、(SecureRandom(byte[])
によって作成されている場合を除き)にシードされません。 nextBytes
への最初の呼び出しは、実装固有のエントロピ・ソースから自身をシードするよう強制します。 setSeed
が以前に呼び出されている場合、この自己シードは行われません。
SecureRandom
は、いつでもreseed
またはsetSeed
メソッドを呼び出すことによって再シードすることができます。 reseed
メソッドはエントロピ入力からエントロピ入力を読み込み、それ自身を再シードします。 setSeed
メソッドは、呼び出し元にシードを提供する必要があります。
reseed
は、すべてのSecureRandom
実装でサポートされているわけではないことに注意してください。
いくつかのSecureRandom
実装は、メソッドの動作をさらに制御するために、nextBytes(byte[], SecureRandomParameters)
およびreseed(SecureRandomParameters)
メソッドでSecureRandomParameters
パラメータを受け入れることができます。
ノート: 実装によっては、エントロピ・ソースがさまざまなUnixライクなオペレーティング・システム上で/dev/randomである場合など、generateSeed
、reseed
およびnextBytes
メソッドは、エントロピが収集されるにつれてブロックされる可能性があります。
スレッドの安全性
SecureRandom
オブジェクトは、複数の同時スレッドで安全に使用できます。- 実装要件:
SecureRandom
サービス・プロバイダは、プロバイダを登録するときに「サービス・プロバイダ属性」 "ThreadSafe"を"true"に設定することによって、スレッド・セーフであることを通知できます。 それ以外の場合、このクラスは代わりにSecureRandomSpi
実装の次のメソッドへのアクセスを同期します:- 導入されたバージョン:
- 1.1
- 関連項目:
SecureRandomSpi
,Random
, 直列化された形式
-
コンストラクタのサマリー
コンストラクタ修飾子コンストラクタ説明デフォルトの乱数アルゴリズムを実装する、セキュリティ保護された乱数ジェネレータ(RNG)を構築します。SecureRandom(byte[] seed)
デフォルトの乱数アルゴリズムを実装する、セキュリティ保護された乱数ジェネレータ(RNG)を構築します。protected
SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider)
SecureRandom
オブジェクトを作成します。 -
メソッドのサマリー
修飾子と型メソッド説明byte[]
generateSeed(int numBytes)
指定されたバイト数のシード・バイトを返します。シード・バイトの計算には、このクラスが自身をシードするのに使用するシード生成アルゴリズムが使用されます。このSecureRandom
オブジェクトによって実装されたアルゴリズムの名前を返します。static SecureRandom
getInstance(String algorithm)
指定された乱数ジェネレータ(RNG)アルゴリズムを実装するSecureRandom
オブジェクトを返します。static SecureRandom
getInstance(String algorithm, String provider)
指定された乱数ジェネレータ(RNG)アルゴリズムを実装するSecureRandom
オブジェクトを返します。static SecureRandom
getInstance(String algorithm, Provider provider)
指定された乱数ジェネレータ(RNG)アルゴリズムを実装するSecureRandom
オブジェクトを返します。static SecureRandom
getInstance(String algorithm, SecureRandomParameters params)
指定された乱数ジェネレータ(RNG)アルゴリズムを実装し、指定されたSecureRandomParameters
リクエストをサポートするSecureRandom
オブジェクトを返します。static SecureRandom
getInstance(String algorithm, SecureRandomParameters params, String provider)
指定された乱数ジェネレータ(RNG)アルゴリズムを実装し、指定されたSecureRandomParameters
リクエストをサポートするSecureRandom
オブジェクトを返します。static SecureRandom
getInstance(String algorithm, SecureRandomParameters params, Provider provider)
指定された乱数ジェネレータ(RNG)アルゴリズムを実装し、指定されたSecureRandomParameters
リクエストをサポートするSecureRandom
オブジェクトを返します。static SecureRandom
securerandom.strongAlgorithms
Security
プロパティで指定されたアルゴリズムまたはプロバイダを使用して選択されたSecureRandom
オブジェクトを返します。このSecureRandom
インスタンスの実効SecureRandomParameters
を返します。このSecureRandom
オブジェクトのプロバイダを返します。static byte[]
getSeed(int numBytes)
指定されたバイト数のシード・バイトを返します。シード・バイトの計算には、このクラスが自身をシードするのに使用するシード生成アルゴリズムが使用されます。protected int
next(int numBits)
ユーザーが指定した数の擬似乱数ビット(右詰、ゼロ埋め込み)を含む整数を生成します。void
nextBytes(byte[] bytes)
ユーザーが指定したバイト数の乱数バイト数を生成します。void
nextBytes(byte[] bytes, SecureRandomParameters params)
追加のパラメータを使用して、ユーザーが指定した数のランダムなバイトを生成します。void
reseed()
エントロピ入力からエントロピ入力を読み取ってこのSecureRandom
を再計算します。void
reseed(SecureRandomParameters params)
このSecureRandom
をエントロピ入力から追加パラメータで読み取って再計算します。void
setSeed(byte[] seed)
このランダム・オブジェクトを指定されたシードで再割り当てします。void
setSeed(long seed)
指定されたlong seed
に含まれている8バイトを使用して、この乱数オブジェクトを再シードします。toString()
このSecureRandom
の人間が読める文字列表現を返します。
-
コンストラクタの詳細
-
SecureRandom
public SecureRandom()デフォルトの乱数アルゴリズムを実装する、セキュリティ保護された乱数ジェネレータ(RNG)を構築します。このコンストラクタは、最優先のProviderから順に、登録済みのセキュリティProviderのリストをトラバースします。
SecureRandom
(RNG)アルゴリズムをサポートする最初のプロバイダからのSecureRandomSpi
実装をカプセル化する新しいSecureRandom
オブジェクトが返されます。 RNGアルゴリズムをサポートするProviderが存在しない場合、実装固有のデフォルト値が返されます。登録済みプロバイダのリストは、
Security.getProviders()
メソッド経由で取得できます。標準のRNGアルゴリズム名については、「Javaセキュリティ標準アルゴリズム名指定」の
SecureRandom
セクションを参照してください。 -
SecureRandom
public SecureRandom(byte[] seed)デフォルトの乱数アルゴリズムを実装する、セキュリティ保護された乱数ジェネレータ(RNG)を構築します。SecureRandom
インスタンスには、指定されたシード・バイトが設定されます。このコンストラクタは、最優先のProviderから順に、登録済みのセキュリティProviderのリストをトラバースします。
SecureRandom
(RNG)アルゴリズムをサポートする最初のプロバイダからのSecureRandomSpi
実装をカプセル化する新しいSecureRandom
オブジェクトが返されます。 RNGアルゴリズムをサポートするProviderが存在しない場合、実装固有のデフォルト値が返されます。登録済みプロバイダのリストは、
Security.getProviders()
メソッド経由で取得できます。標準のRNGアルゴリズム名については、「Javaセキュリティ標準アルゴリズム名指定」の
SecureRandom
セクションを参照してください。- パラメータ:
seed
- シード。
-
SecureRandom
protected SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider)SecureRandom
オブジェクトを作成します。- パラメータ:
secureRandomSpi
-SecureRandom
実装。provider
- プロバイダ
-
-
メソッドの詳細
-
getInstance
public static SecureRandom getInstance(String algorithm) throws NoSuchAlgorithmException指定された乱数ジェネレータ(RNG)アルゴリズムを実装するSecureRandom
オブジェクトを返します。このメソッドは、最優先のProviderから順に、登録済みのセキュリティProviderのリストをトラバースします。 指定されたアルゴリズムをサポートする最初のProviderからの
SecureRandomSpi
実装をカプセル化する新しいSecureRandom
オブジェクトが返されます。登録済みプロバイダのリストは、
Security.getProviders()
メソッド経由で取得できます。- 実装上のノート:
- JDKリファレンス実装では、
jdk.security.provider.preferred
Security
プロパティを使用して、指定されたアルゴリズムの優先プロバイダの順序を決定します。 これは、Security.getProviders()
によって返されるプロバイダの順序とは異なる場合があります。 - パラメータ:
algorithm
- RNGアルゴリズムの名前。 標準のRNGアルゴリズム名については、「Javaセキュリティ標準アルゴリズム名指定」のSecureRandom
セクションを参照してください。- 戻り値:
- 新しい
SecureRandom
オブジェクト - 例外:
NoSuchAlgorithmException
-Provider
が、指定されたアルゴリズムのSecureRandomSpi
実装をサポートしていない場合NullPointerException
-algorithm
がnull
である場合- 導入されたバージョン:
- 1.2
- 関連項目:
Provider
-
getInstance
public static SecureRandom getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException指定された乱数ジェネレータ(RNG)アルゴリズムを実装するSecureRandom
オブジェクトを返します。指定されたプロバイダからの
SecureRandomSpi
実装をカプセル化する新しいSecureRandom
オブジェクトが返されます。 指定したプロバイダは、セキュリティ・プロバイダ・リストに登録する必要があります。登録済みプロバイダのリストは、
Security.getProviders()
メソッド経由で取得できます。- パラメータ:
algorithm
- RNGアルゴリズムの名前。 標準のRNGアルゴリズム名については、「Javaセキュリティ標準アルゴリズム名指定」のSecureRandom
セクションを参照してください。provider
- プロバイダ名。- 戻り値:
- 新しい
SecureRandom
オブジェクト - 例外:
IllegalArgumentException
- プロバイダ名がnull
または空の場合NoSuchAlgorithmException
- 指定されたアルゴリズムのSecureRandomSpi
実装が、指定されたプロバイダから利用可能でない場合NoSuchProviderException
- 指定されたプロバイダがセキュリティ・プロバイダ・リストに登録されていない場合NullPointerException
-algorithm
がnull
である場合- 導入されたバージョン:
- 1.2
- 関連項目:
Provider
-
getInstance
public static SecureRandom getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException指定された乱数ジェネレータ(RNG)アルゴリズムを実装するSecureRandom
オブジェクトを返します。指定された
Provider
オブジェクトからSecureRandomSpi
実装をカプセル化する新しいSecureRandom
オブジェクトが返されます。 指定したProvider
オブジェクトは、プロバイダ・リストに登録する必要はありません。- パラメータ:
algorithm
- RNGアルゴリズムの名前。 標準のRNGアルゴリズム名については、「Javaセキュリティ標準アルゴリズム名指定」のSecureRandom
セクションを参照してください。provider
- プロバイダ- 戻り値:
- 新しい
SecureRandom
オブジェクト - 例外:
IllegalArgumentException
- 指定されたプロバイダがnull
の場合NoSuchAlgorithmException
- 指定されたアルゴリズムのSecureRandomSpi
実装が、指定されたProvider
オブジェクトから使用できない場合NullPointerException
-algorithm
がnull
である場合- 導入されたバージョン:
- 1.4
- 関連項目:
Provider
-
getInstance
public static SecureRandom getInstance(String algorithm, SecureRandomParameters params) throws NoSuchAlgorithmException指定された乱数ジェネレータ(RNG)アルゴリズムを実装し、指定されたSecureRandomParameters
リクエストをサポートするSecureRandom
オブジェクトを返します。このメソッドは、最優先のProviderから順に、登録済みのセキュリティProviderのリストをトラバースします。 指定されたアルゴリズムと指定された
SecureRandomParameters
をサポートする最初のプロバイダからのSecureRandomSpi
実装をカプセル化する新しいSecureRandom
オブジェクトが返されます。登録済みプロバイダのリストは、
Security.getProviders()
メソッド経由で取得できます。- 実装上のノート:
- JDKリファレンス実装では、
jdk.security.provider.preferred
プロパティを使用して、指定されたアルゴリズムの優先プロバイダの順序を決定します。 これは、Security.getProviders()
によって返されるプロバイダの順序とは異なる場合があります。 - パラメータ:
algorithm
- RNGアルゴリズムの名前。 標準のRNGアルゴリズム名については、「Javaセキュリティ標準アルゴリズム名指定」のSecureRandom
セクションを参照してください。params
- 新しく作成されたSecureRandom
オブジェクトがサポートする必要があるSecureRandomParameters
。- 戻り値:
- 新しい
SecureRandom
オブジェクト - 例外:
IllegalArgumentException
- 指定されたパラメータがnull
の場合NoSuchAlgorithmException
- 指定されたアルゴリズムとパラメータに対してSecureRandomSpi
実装をサポートするプロバイダがない場合NullPointerException
-algorithm
がnull
である場合- 導入されたバージョン:
- 9
- 関連項目:
Provider
-
getInstance
public static SecureRandom getInstance(String algorithm, SecureRandomParameters params, String provider) throws NoSuchAlgorithmException, NoSuchProviderException指定された乱数ジェネレータ(RNG)アルゴリズムを実装し、指定されたSecureRandomParameters
リクエストをサポートするSecureRandom
オブジェクトを返します。指定されたプロバイダからの
SecureRandomSpi
実装をカプセル化する新しいSecureRandom
オブジェクトが返されます。 指定したプロバイダは、セキュリティ・プロバイダ・リストに登録する必要があります。登録済みプロバイダのリストは、
Security.getProviders()
メソッド経由で取得できます。- パラメータ:
algorithm
- RNGアルゴリズムの名前。 標準のRNGアルゴリズム名については、「Javaセキュリティ標準アルゴリズム名指定」のSecureRandom
セクションを参照してください。params
- 新しく作成されたSecureRandom
オブジェクトがサポートする必要があるSecureRandomParameters
。provider
- プロバイダ名。- 戻り値:
- 新しい
SecureRandom
オブジェクト - 例外:
IllegalArgumentException
- プロバイダ名がnull
または空の場合、またはparamsがnull
の場合NoSuchAlgorithmException
- 指定されたプロバイダが、指定されたアルゴリズムおよびパラメータのSecureRandomSpi
実装をサポートしていない場合NoSuchProviderException
- 指定されたプロバイダがセキュリティ・プロバイダ・リストに登録されていない場合NullPointerException
-algorithm
がnull
である場合- 導入されたバージョン:
- 9
- 関連項目:
Provider
-
getInstance
public static SecureRandom getInstance(String algorithm, SecureRandomParameters params, Provider provider) throws NoSuchAlgorithmException指定された乱数ジェネレータ(RNG)アルゴリズムを実装し、指定されたSecureRandomParameters
リクエストをサポートするSecureRandom
オブジェクトを返します。指定された
Provider
オブジェクトからSecureRandomSpi
実装をカプセル化する新しいSecureRandom
オブジェクトが返されます。 指定したProvider
オブジェクトは、プロバイダ・リストに登録する必要はありません。- パラメータ:
algorithm
- RNGアルゴリズムの名前。 標準のRNGアルゴリズム名については、「Javaセキュリティ標準アルゴリズム名指定」のSecureRandom
セクションを参照してください。params
- 新しく作成されたSecureRandom
オブジェクトがサポートする必要があるSecureRandomParameters
。provider
- プロバイダ- 戻り値:
- 新しい
SecureRandom
オブジェクト - 例外:
IllegalArgumentException
- 指定されたプロバイダまたはパラメータがnull
の場合NoSuchAlgorithmException
- 指定されたプロバイダが、指定されたアルゴリズムおよびパラメータのSecureRandomSpi
実装をサポートしていない場合NullPointerException
-algorithm
がnull
である場合- 導入されたバージョン:
- 9
- 関連項目:
Provider
-
getProvider
public final Provider getProvider()このSecureRandom
オブジェクトのプロバイダを返します。- 戻り値:
- この
SecureRandom
オブジェクトのプロバイダ。
-
getAlgorithm
public String getAlgorithm()このSecureRandom
オブジェクトによって実装されたアルゴリズムの名前を返します。- 戻り値:
- アルゴリズムの名前。アルゴリズム名を特定できない場合は
unknown
。 - 導入されたバージョン:
- 1.5
-
toString
public String toString()このSecureRandom
の人間が読める文字列表現を返します。 -
getParameters
public SecureRandomParameters getParameters()このSecureRandom
インスタンスの実効SecureRandomParameters
を返します。戻り値は、
getInstance
メソッドに渡されたSecureRandomParameters
オブジェクトとは異なる場合がありますが、このSecureRandom
オブジェクトの存続期間中は変更できません。呼び出し元は、返された値を使用して、この
SecureRandom
がサポートする機能を調べることができます。- 戻り値:
- 有効な
SecureRandomParameters
パラメータ、またはパラメータが使用されていない場合はnull
。 - 導入されたバージョン:
- 9
- 関連項目:
SecureRandomSpi
-
setSeed
public void setSeed(byte[] seed)このランダム・オブジェクトを指定されたシードで再割り当てします。 種子は、既存の種子を置き換えるのではなく、補充します。 これにより、呼出しを繰り返しても、ランダム性が減少しないことが保証されます。PRNG
SecureRandom
は、nextBytes
またはreseed
が呼び出される前にsetSeed
が呼び出されると自動的にシードされません。 呼び出し側は、seed
引数に、このSecureRandom
のセキュリティのための十分なエントロピが含まれていることを確認する必要があります。- パラメータ:
seed
- シード。- 関連項目:
getSeed(int)
-
setSeed
public void setSeed(long seed)指定されたlong seed
に含まれている8バイトを使用して、この乱数オブジェクトを再シードします。 与えられたシードは、既存のシードと置き換わるのではなく、既存のシードに追加されます。 これにより、呼出しを繰り返しても、ランダム性が減少しないことが保証されます。このメソッドは、
java.util.Random
との互換性のために定義されています。- オーバーライド:
setSeed
、クラス:Random
- パラメータ:
seed
- シード。- 関連項目:
getSeed(int)
-
nextBytes
public void nextBytes(byte[] bytes)ユーザーが指定したバイト数の乱数バイト数を生成します。 -
nextBytes
public void nextBytes(byte[] bytes, SecureRandomParameters params)追加のパラメータを使用して、ユーザーが指定した数のランダムなバイトを生成します。- パラメータ:
bytes
- 乱数バイトを充填する配列params
- 追加パラメータ- 例外:
NullPointerException
-bytes
がnullの場合UnsupportedOperationException
- 基本のプロバイダ実装がこのメソッドをオーバーライドしていない場合IllegalArgumentException
-params
がnull
の場合、このSecureRandom
によって不正またはサポートされていない- 導入されたバージョン:
- 9
-
next
protected final int next(int numBits)ユーザーが指定した数の擬似乱数ビット(右詰、ゼロ埋め込み)を含む整数を生成します。 このメソッドは、java.util.Random
メソッドをオーバーライドし、そのクラス(たとえば、nextInt
、nextLong
、およびnextFloat
)から継承するメソッドのすべてに乱数ビットの発生源を提供するのに役立ちます。 -
getSeed
public static byte[] getSeed(int numBytes)指定されたバイト数のシード・バイトを返します。シード・バイトの計算には、このクラスが自身をシードするのに使用するシード生成アルゴリズムが使用されます。 この呼出しを使うと、ほかの乱数ジェネレータをシードできます。このメソッドは、下位互換のためだけに提供されています。 呼び出し元は、
SecureRandom
オブジェクトを取得するために、別のgetInstance
メソッドの1つを使用し、generateSeed
メソッドを呼び出して、そのオブジェクトからシード・バイトを取得することをお勧めします。- パラメータ:
numBytes
- 生成するシード・バイト数。- 戻り値:
- シード・バイト。
- 例外:
IllegalArgumentException
-numBytes
が負の場合- 関連項目:
setSeed(byte[])
-
generateSeed
public byte[] generateSeed(int numBytes)指定されたバイト数のシード・バイトを返します。シード・バイトの計算には、このクラスが自身をシードするのに使用するシード生成アルゴリズムが使用されます。 この呼出しを使うと、ほかの乱数ジェネレータをシードできます。- パラメータ:
numBytes
- 生成するシード・バイト数。- 戻り値:
- シード・バイト。
- 例外:
IllegalArgumentException
-numBytes
が負の場合
-
getInstanceStrong
public static SecureRandom getInstanceStrong() throws NoSuchAlgorithmExceptionsecurerandom.strongAlgorithms
Security
プロパティで指定されたアルゴリズムまたはプロバイダを使用して選択されたSecureRandom
オブジェクトを返します。RSA公開/非公開キーのような付加価値の高い永続的な秘密情報を作成する場合など、状況によっては強力な乱数値が必要になります。 アプリケーションが適切で強力な
SecureRandom
実装を選択できるようにするため、Javaディストリビューションでは、securerandom.strongAlgorithms
セキュリティ・プロパティに既知の強力なSecureRandom
実装のリストが含まれています。Javaプラットフォームのすべての実装は、強力な
SecureRandom
実装を1つ以上サポートする必要があります。- 戻り値:
securerandom.strongAlgorithms
セキュリティ・プロパティで示される強力なSecureRandom
実装- 例外:
NoSuchAlgorithmException
- アルゴリズムが存在しない場合- 導入されたバージョン:
- 1.8
- 関連項目:
Security.getProperty(String)
-
reseed
public void reseed()エントロピ入力からエントロピ入力を読み取ってこのSecureRandom
を再計算します。- 例外:
UnsupportedOperationException
- 基本となるプロバイダ実装がこのメソッドをオーバーライドしていない場合。- 導入されたバージョン:
- 9
-
reseed
public void reseed(SecureRandomParameters params)このSecureRandom
をエントロピ入力から追加パラメータで読み取って再計算します。エントロピはエントロピ源から得られることに留意されたい。
params
の一部のデータにはエントロピが含まれることがありますが、主な用途は多様性を提供することです。- パラメータ:
params
- 余分なパラメータ- 例外:
UnsupportedOperationException
- 基本となるプロバイダ実装がこのメソッドをオーバーライドしていない場合。IllegalArgumentException
-params
がnull
の場合、このSecureRandom
によって不正またはサポートされていない- 導入されたバージョン:
- 9
-