public class SecureRandom extends Random
強力な暗号化による乱数は、「FIPS 140-2, Security Requirements for Cryptographic Modules」のセクション4.9.1に指定されている統計的乱数生成テストに最低限適合しています。また、SecureRandomは順序不定で出力を行う必要があります。このため、SecureRamdomオブジェクトに渡されるすべてのシード素材が予測不可能で、SecureRandomのすべての出力シーケンスが「RFC 1750: Randomness Recommendations for Security」に記述されているとおり、強力に暗号化されている必要があります。
呼出し側は、引数なしのコンストラクタか、任意のgetInstance
メソッドを使って、SecureRandomインスタンスを取得します。
SecureRandom random = new SecureRandom();
多くのSecureRandom実装は擬似乱数ジェネレータ(PRNG)の形式です。これは、特定の決定性アルゴリズムを使って真の乱数シードから擬似乱数シーケンスを生成することを意味します。実装の中には、真の乱数を生成するものもあれば、両方の技術の組み合わせを使用するものもあります。
SecureRandomの一般的な呼出し側は、次のメソッドを呼び出してランダム・バイトを取得します。
SecureRandom random = new SecureRandom(); byte bytes[] = new byte[20]; random.nextBytes(bytes);
呼出し側は、次の例のようにgenerateSeed
メソッドを呼び出して、指定された数のシード・バイトを生成することもできます。生成されたシード・バイトは、たとえば別の乱数ジェネレータをシードするために使用します。
byte seed[] = random.generateSeed(20);注: 実装によっては、
generateSeed
メソッドおよびnextBytes
メソッドは、たとえばそれらがUNIX系オペレーティング・システムの/dev/randomから読み取る必要がある場合に、エントロピーが収集されるときにブロックされることがあります。SecureRandomSpi
, Random
, 直列化された形式修飾子 | コンストラクタと説明 |
---|---|
|
SecureRandom()
デフォルトの乱数アルゴリズムを実装する、セキュリティ保護された乱数ジェネレータ(RNG)を構築します。
|
|
SecureRandom(byte[] seed)
デフォルトの乱数アルゴリズムを実装する、セキュリティ保護された乱数ジェネレータ(RNG)を構築します。
|
protected |
SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider)
SecureRandomオブジェクトを作成します。
|
修飾子と型 | メソッドと説明 |
---|---|
byte[] |
generateSeed(int numBytes)
指定されたバイト数のシード・バイトを返します。シード・バイトの計算には、このクラスが自身をシードするのに使用するシード生成アルゴリズムが使用されます。
|
String |
getAlgorithm()
このSecureRandomオブジェクトが実装しているアルゴリズムの名前を返します。
|
static SecureRandom |
getInstance(String algorithm)
指定された乱数ジェネレータ(RNG)アルゴリズムを実装したSecureRandomオブジェクトを返します。
|
static SecureRandom |
getInstance(String algorithm, Provider provider)
指定された乱数ジェネレータ(RNG)アルゴリズムを実装したSecureRandomオブジェクトを返します。
|
static SecureRandom |
getInstance(String algorithm, String provider)
指定された乱数ジェネレータ(RNG)アルゴリズムを実装したSecureRandomオブジェクトを返します。
|
static SecureRandom |
getInstanceStrong()
|
Provider |
getProvider()
このSecureRandomオブジェクトのプロバイダを返します。
|
static byte[] |
getSeed(int numBytes)
指定されたバイト数のシード・バイトを返します。シード・バイトの計算には、このクラスが自身をシードするのに使用するシード生成アルゴリズムが使用されます。
|
protected int |
next(int numBits)
ユーザーが指定した数の擬似乱数ビット(右詰、ゼロ埋め込み)を含む整数を生成します。
|
void |
nextBytes(byte[] bytes)
ユーザーが指定したバイト数の乱数バイト数を生成します。
|
void |
setSeed(byte[] seed)
乱数オブジェクトを再シードします。
|
void |
setSeed(long seed)
指定された
long seed に含まれている8バイトを使用して、この乱数オブジェクトを再シードします。 |
public SecureRandom()
このコンストラクタは、最優先のProviderから順に、登録済みのセキュリティProviderのリストをトラバースします。SecureRandom (RNG)アルゴリズムをサポートする最初のProviderのSecureRandomSpi実装をカプセル化する新しいSecureRandomオブジェクトが返されます。RNGアルゴリズムをサポートするProviderが存在しない場合、実装固有のデフォルト値が返されます。
登録済みプロバイダのリストは、Security.getProviders()
メソッド経由で取得できます。
RNGアルゴリズムの標準名については、Java暗号化アーキテクチャ標準アルゴリズム名のドキュメントのSecureRandomのセクションを参照。
シードされていないSecureRandomオブジェクトが返されます。返されたオブジェクトをシードするには、setSeed
メソッドを呼び出します。setSeed
が呼び出されなかった場合、最初にnextBytes
メソッドを呼び出したときに、SecureRandomオブジェクトが強制的にシードされます。setSeed
が以前に呼び出されている場合、この自己シードは行われません。
public SecureRandom(byte[] seed)
このコンストラクタは、最優先のProviderから順に、登録済みのセキュリティProviderのリストをトラバースします。SecureRandom (RNG)アルゴリズムをサポートする最初のProviderのSecureRandomSpi実装をカプセル化する新しいSecureRandomオブジェクトが返されます。RNGアルゴリズムをサポートするProviderが存在しない場合、実装固有のデフォルト値が返されます。
登録済みプロバイダのリストは、Security.getProviders()
メソッド経由で取得できます。
RNGアルゴリズムの標準名については、Java暗号化アーキテクチャ標準アルゴリズム名のドキュメントのSecureRandomのセクションを参照。
seed
- シード。protected SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider)
secureRandomSpi
- SecureRandomの実装。provider
- プロバイダ。public static SecureRandom getInstance(String algorithm) throws NoSuchAlgorithmException
このメソッドは、最優先のProviderから順に、登録済みのセキュリティProviderのリストをトラバースします。指定されたアルゴリズムをサポートする最初のProviderのSecureRandomSpi実装をカプセル化する新しいSecureRandomオブジェクトが返されます。
登録済みプロバイダのリストは、Security.getProviders()
メソッド経由で取得できます。
シードされていないSecureRandomオブジェクトが返されます。返されたオブジェクトをシードするには、setSeed
メソッドを呼び出します。setSeed
が呼び出されなかった場合、最初にnextBytes
メソッドを呼び出したときに、SecureRandomオブジェクトが強制的にシードされます。setSeed
が以前に呼び出されている場合、この自己シードは行われません。
algorithm
- RNGアルゴリズムの名前。RNGアルゴリズムの標準名については、Java暗号化アーキテクチャ標準アルゴリズム名のドキュメントのSecureRandomのセクションを参照。NoSuchAlgorithmException
- 指定したアルゴリズムのSecureRandomSpi実装をサポートするProviderが存在しない場合。Provider
public static SecureRandom getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
指定されたプロバイダのSecureRandomSpi実装をカプセル化する新しいSecureRandomオブジェクトが返されます。指定したプロバイダは、セキュリティ・プロバイダ・リストに登録する必要があります。
登録済みプロバイダのリストは、Security.getProviders()
メソッド経由で取得できます。
シードされていないSecureRandomオブジェクトが返されます。返されたオブジェクトをシードするには、setSeed
メソッドを呼び出します。setSeed
が呼び出されなかった場合、最初にnextBytes
メソッドを呼び出したときに、SecureRandomオブジェクトが強制的にシードされます。setSeed
が以前に呼び出されている場合、この自己シードは行われません。
algorithm
- RNGアルゴリズムの名前。RNGアルゴリズムの標準名については、Java暗号化アーキテクチャ標準アルゴリズム名のドキュメントのSecureRandomのセクションを参照。provider
- プロバイダ名。NoSuchAlgorithmException
- 指定されたプロバイダに指定されたアルゴリズムのSecureRandomSpiの実装がない場合。NoSuchProviderException
- 指定されたプロバイダがセキュリティ・プロバイダ・リストに登録されていない場合。IllegalArgumentException
- プロバイダ名がnullまたは空の場合。Provider
public static SecureRandom getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
指定されたProviderオブジェクトのSecureRandomSpi実装をカプセル化する新しいSecureRandomオブジェクトが返されます。指定されたProviderオブジェクトは、プロバイダ・リストに登録する必要はありません。
シードされていないSecureRandomオブジェクトが返されます。返されたオブジェクトをシードするには、setSeed
メソッドを呼び出します。setSeed
が呼び出されなかった場合、最初にnextBytes
メソッドを呼び出したときに、SecureRandomオブジェクトが強制的にシードされます。setSeed
が以前に呼び出されている場合、この自己シードは行われません。
algorithm
- RNGアルゴリズムの名前。RNGアルゴリズムの標準名については、Java暗号化アーキテクチャ標準アルゴリズム名のドキュメントのSecureRandomのセクションを参照。provider
- プロバイダ。NoSuchAlgorithmException
- 指定されたProviderオブジェクトに指定されたアルゴリズムのSecureRandomSpiの実装がない場合。IllegalArgumentException
- 指定されたプロバイダがnullの場合。Provider
public final Provider getProvider()
public String getAlgorithm()
unknown
。public void setSeed(byte[] seed)
seed
- シード。getSeed(int)
public void setSeed(long seed)
long seed
に含まれている8バイトを使用して、この乱数オブジェクトを再シードします。与えられたシードは、既存のシードと置き換わるのではなく、既存のシードに追加されます。これにより、呼出しを繰り返しても、ランダム性が減少しないことが保証されます。
このメソッドは、java.util.Random
との互換性のために定義されています。
setSeed
、クラス: Random
seed
- シード。getSeed(int)
public void nextBytes(byte[] bytes)
setSeed
が以前に呼び出されたことがない場合は、このメソッドを最初に呼び出したとき、このSecureRandomオブジェクトが強制的にシードされます。setSeed
が以前に呼び出されている場合、この自己シードは行われません。
protected final int next(int numBits)
java.util.Random
メソッドをオーバーライドし、そのクラス(たとえば、nextInt
、nextLong
、およびnextFloat
)から継承するメソッドのすべてに乱数ビットの発生源を提供するのに役立ちます。public static byte[] getSeed(int numBytes)
このメソッドは、下位互換のためだけに提供されています。呼出し側からは、代替のgetInstance
メソッドのうちの1つを使用してSecureRandomオブジェクトを取得したすぐあとに、generateSeed
メソッドを呼び出してそのオブジェクトからシード・バイトを取得することをお薦めします。
numBytes
- 生成するシード・バイト数。setSeed(byte[])
public byte[] generateSeed(int numBytes)
numBytes
- 生成するシード・バイト数。public static SecureRandom getInstanceStrong() throws NoSuchAlgorithmException
securerandom.strongAlgorithms
Security
プロパティで指定されたアルゴリズムまたはプロバイダを使用して選択されたSecureRandom
オブジェクトを返します。
RSA公開/非公開鍵のような付加価値の高い永続的な秘密情報を作成する場合など、状況によっては強力な乱数値が必要になります。アプリケーションが適切で強力なSecureRandom
実装を選択できるようにするため、Javaディストリビューションでは、securerandom.strongAlgorithms
セキュリティ・プロパティに既知の強力なSecureRandom
実装のリストが含まれています。
Javaプラットフォームのすべての実装は、強力なSecureRandom
実装を1つ以上サポートする必要があります。
securerandom.strongAlgorithms
セキュリティ・プロパティで示される強力なSecureRandom
実装NoSuchAlgorithmException
- アルゴリズムが存在しない場合Security.getProperty(String)
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.