- java.lang.Object
-
- java.util.Random
-
- java.security.SecureRandom
-
- すべての実装されたインタフェース:
Serializable
public class SecureRandom extends Random
このクラスは暗号用に強化された乱数ジェネレータ(RNG)を提供します。強力な暗号化による乱数は、「FIPS 140-2, Security Requirements for Cryptographic Modules」のセクション4.9.1に指定されている統計的乱数生成テストに最低限適合しています。 また、
SecureRandomは非決定的な出力を生成する必要があります。 したがって、SecureRandomオブジェクトに渡されるシード・マテリアルは予測不可能である必要があり、 RFC 4086: Randomness Requirements for Securityで説明されているように、すべてのSecureRandom出力シーケンスは暗号化的に強力である必要があります。多くの
SecureRandom実装は、疑似乱数ジェネレータ(PRNG、確定的ランダム・ビット・ジェネレータまたはDRBGとも呼ばれる)の形式です。これは、確定的アルゴリズムを使用して、ランダム・シードから疑似乱数シーケンスを生成することを意味します。 実装の中には、真の乱数を生成するものもあれば、両方の技術の組み合わせを使用するものもあります。呼出し側は、引数なしコンストラクタまたは
getInstanceメソッドのいずれかを介して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パラメータを受け入れて、メソッドの動作をさらに制御できます。ノート: 実装によっては、
generateSeed、reseedおよびnextBytesメソッドがエントロピーの収集中にブロックされる場合があります。たとえば、Unixに似た様々なオペレーティング・システムでエントロピー・ソースが/dev/randomの場合です。スレッドの安全性
SecureRandomオブジェクトは、複数の同時スレッドで使用しても安全です。- 実装要件:
SecureRandomサービス・プロバイダは、プロバイダの登録時にサービス・プロバイダ属性のThreadSafeをtrueに設定することで、スレッドセーフであることを通知できます。 それ以外の場合、このクラスは、かわりにSecureRandomSpi実装の次のメソッドへのアクセスを同期します。- 導入されたバージョン:
- 1.1
- 関連項目:
SecureRandomSpi,Random, 直列化された形式
-
-
コンストラクタのサマリー
コンストラクタ 修飾子 コンストラクタ 説明 SecureRandom()デフォルトの乱数アルゴリズムを実装する、セキュリティ保護された乱数ジェネレータ(RNG)を構築します。SecureRandom(byte[] seed)デフォルトの乱数アルゴリズムを実装する、セキュリティ保護された乱数ジェネレータ(RNG)を構築します。protectedSecureRandom(SecureRandomSpi secureRandomSpi, Provider provider)SecureRandomオブジェクトを作成します。
-
メソッドのサマリー
すべてのメソッド 静的メソッド インスタンス・メソッド 具象メソッド 修飾子と型 メソッド 説明 byte[]generateSeed(int numBytes)指定されたバイト数のシード・バイトを返します。シード・バイトの計算には、このクラスが自身をシードするのに使用するシード生成アルゴリズムが使用されます。StringgetAlgorithm()このSecureRandomオブジェクトによって実装されるアルゴリズムの名前を返します。static SecureRandomgetInstance(String algorithm)指定された乱数ジェネレータ(RNG)アルゴリズムを実装するSecureRandomオブジェクトを返します。static SecureRandomgetInstance(String algorithm, String provider)指定された乱数ジェネレータ(RNG)アルゴリズムを実装するSecureRandomオブジェクトを返します。static SecureRandomgetInstance(String algorithm, Provider provider)指定された乱数ジェネレータ(RNG)アルゴリズムを実装するSecureRandomオブジェクトを返します。static SecureRandomgetInstance(String algorithm, SecureRandomParameters params)指定された乱数ジェネレータ(RNG)アルゴリズムを実装し、指定されたSecureRandomParametersリクエストをサポートするSecureRandomオブジェクトを返します。static SecureRandomgetInstance(String algorithm, SecureRandomParameters params, String provider)指定された乱数ジェネレータ(RNG)アルゴリズムを実装し、指定されたSecureRandomParametersリクエストをサポートするSecureRandomオブジェクトを返します。static SecureRandomgetInstance(String algorithm, SecureRandomParameters params, Provider provider)指定された乱数ジェネレータ(RNG)アルゴリズムを実装し、指定されたSecureRandomParametersリクエストをサポートするSecureRandomオブジェクトを返します。static SecureRandomgetInstanceStrong()securerandom.strongAlgorithmsSecurityプロパティで指定されたアルゴリズムまたはプロバイダを使用して選択されたSecureRandomオブジェクトを返します。SecureRandomParametersgetParameters()このSecureRandomインスタンスの有効なSecureRandomParametersを返します。ProvidergetProvider()このSecureRandomオブジェクトのプロバイダを返します。static byte[]getSeed(int numBytes)指定されたバイト数のシード・バイトを返します。シード・バイトの計算には、このクラスが自身をシードするのに使用するシード生成アルゴリズムが使用されます。protected intnext(int numBits)ユーザーが指定した数の擬似乱数ビット(右詰、ゼロ埋め込み)を含む整数を生成します。voidnextBytes(byte[] bytes)ユーザーが指定したバイト数の乱数バイト数を生成します。voidnextBytes(byte[] bytes, SecureRandomParameters params)追加パラメータを使用して、ユーザー指定のランダム・バイト数を生成します。voidreseed()エントロピー・ソースから読み込まれたエントロピー入力を使用して、このSecureRandomを再シードします。voidreseed(SecureRandomParameters params)このSecureRandomを、追加パラメータを使用してエントロピー・ソースから読み取ったエントロピー入力で再シードします。voidsetSeed(byte[] seed)指定されたシードでこのランダム・オブジェクトをリシードします。voidsetSeed(long seed)指定されたlong seedに含まれている8バイトを使用して、この乱数オブジェクトを再シードします。StringtoString()この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のリストをトラバースします。 指定されたアルゴリズムをサポートする最初のプロバイダから
SecureRandomSpi実装をカプセル化する新しいSecureRandomオブジェクトが戻されます。登録済みプロバイダのリストは、
Security.getProviders()メソッド経由で取得できます。- 実装上のノート:
- JDKリファレンス実装では、
jdk.security.provider.preferredSecurityプロパティを使用して、指定したアルゴリズムの優先プロバイダ順序も決定します。 これは、Security.getProviders()によって返されるプロバイダの順序とは異なる場合があります。 - パラメータ:
algorithm- RNGアルゴリズムの名前。 標準のRNGアルゴリズム名の詳細は、Javaセキュリティ標準アルゴリズム名仕様のSecureRandomに関する項を参照してください。- 戻り値:
- 新しい
SecureRandomオブジェクト - 例外:
NoSuchAlgorithmException- 指定されたアルゴリズムのSecureRandomSpi実装をサポートするProviderがない場合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または空の場合、またはパラメータが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)
指定されたシードでこのランダム・オブジェクトをリシードします。 シードは、既存のシードを置き換えるのではなく、補足します。 これにより、呼出しを繰り返しても、ランダム性が減少しないことが保証されます。setSeedがnextBytesまたはreseedコールの前にコールされた場合、PRNGSecureRandomは自動的にシードされません。 呼出し側は、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)
指定されたバイト数のシード・バイトを返します。シード・バイトの計算には、このクラスが自身をシードするのに使用するシード生成アルゴリズムが使用されます。 この呼出しを使うと、ほかの乱数ジェネレータをシードできます。このメソッドは、下位互換のためだけに提供されています。 コール元は、代替の
getInstanceメソッドの1つを使用してSecureRandomオブジェクトを取得してから、generateSeedメソッドをコールしてそのオブジェクトからシード・バイトを取得することをお薦めします。- パラメータ:
numBytes- 生成するシード・バイト数。- 戻り値:
- シード・バイト。
- 例外:
IllegalArgumentException-numBytesが負の場合- 関連項目:
setSeed(byte[])
-
generateSeed
public byte[] generateSeed(int numBytes)
指定されたバイト数のシード・バイトを返します。シード・バイトの計算には、このクラスが自身をシードするのに使用するシード生成アルゴリズムが使用されます。 この呼出しを使うと、ほかの乱数ジェネレータをシードできます。- パラメータ:
numBytes- 生成するシード・バイト数。- 戻り値:
- シード・バイト。
- 例外:
IllegalArgumentException-numBytesが負の場合
-
getInstanceStrong
public static SecureRandom getInstanceStrong() throws NoSuchAlgorithmException
securerandom.strongAlgorithmsSecurityプロパティで指定されたアルゴリズムまたはプロバイダを使用して選択された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
-
-