- 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オブジェクトに渡されるシード材料はすべて予測不可能でなければならず、すべての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, 直列化された形式
 
- 
- 
コンストラクタのサマリーコンストラクタ 修飾子 コンストラクタ 説明 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の人間が読める文字列表現を返します。
 
- 
- 
- 
コンストラクタの詳細- 
SecureRandompublic SecureRandom() デフォルトの乱数アルゴリズムを実装する、セキュリティ保護された乱数ジェネレータ(RNG)を構築します。このコンストラクタは、最優先のProviderから順に、登録済みのセキュリティProviderのリストをトラバースします。 SecureRandom(RNG)アルゴリズムをサポートする最初のプロバイダからのSecureRandomSpi実装をカプセル化する新しいSecureRandomオブジェクトが返されます。 RNGアルゴリズムをサポートするProviderが存在しない場合、実装固有のデフォルト値が返されます。登録済みプロバイダのリストは、 Security.getProviders()メソッド経由で取得できます。標準のRNGアルゴリズム名については、「Javaセキュリティ標準アルゴリズム名指定」の SecureRandomセクションを参照してください。
 - 
SecureRandompublic SecureRandom(byte[] seed) デフォルトの乱数アルゴリズムを実装する、セキュリティ保護された乱数ジェネレータ(RNG)を構築します。SecureRandomインスタンスには、指定されたシード・バイトが設定されます。このコンストラクタは、最優先のProviderから順に、登録済みのセキュリティProviderのリストをトラバースします。 SecureRandom(RNG)アルゴリズムをサポートする最初のプロバイダからのSecureRandomSpi実装をカプセル化する新しいSecureRandomオブジェクトが返されます。 RNGアルゴリズムをサポートするProviderが存在しない場合、実装固有のデフォルト値が返されます。登録済みプロバイダのリストは、 Security.getProviders()メソッド経由で取得できます。標準のRNGアルゴリズム名については、「Javaセキュリティ標準アルゴリズム名指定」の SecureRandomセクションを参照してください。- パラメータ:
- seed- シード。
 
 - 
SecureRandomprotected SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider) SecureRandomオブジェクトを作成します。- パラメータ:
- secureRandomSpi-- SecureRandom実装。
- provider- プロバイダ
 
 
- 
 - 
メソッドの詳細- 
getInstancepublic static SecureRandom getInstance(String algorithm) throws NoSuchAlgorithmException 指定された乱数ジェネレータ(RNG)アルゴリズムを実装するSecureRandomオブジェクトを返します。このメソッドは、最優先のProviderから順に、登録済みのセキュリティProviderのリストをトラバースします。 指定されたアルゴリズムをサポートする最初のProviderからの SecureRandomSpi実装をカプセル化する新しいSecureRandomオブジェクトが返されます。登録済みプロバイダのリストは、 Security.getProviders()メソッド経由で取得できます。- 実装上のノート:
- JDKリファレンス実装では、jdk.security.provider.preferredSecurityプロパティを使用して、指定されたアルゴリズムの優先プロバイダの順序を決定します。 これは、Security.getProviders()によって返されるプロバイダの順序とは異なる場合があります。
- パラメータ:
- algorithm- RNGアルゴリズムの名前。 標準のRNGアルゴリズム名については、「Javaセキュリティ標準アルゴリズム名指定」の- SecureRandomセクションを参照してください。
- 戻り値:
- 新しいSecureRandomオブジェクト
- 例外:
- NoSuchAlgorithmException-- Providerが、指定されたアルゴリズムの- SecureRandomSpi実装をサポートしていない場合
- NullPointerException-- algorithmが- nullである場合
- 導入されたバージョン:
- 1.2
- 関連項目:
- Provider
 
 - 
getInstancepublic 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
 
 - 
getInstancepublic 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
 
 - 
getInstancepublic 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
 
 - 
getInstancepublic 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
 
 - 
getInstancepublic 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
 
 - 
getProviderpublic final Provider getProvider() このSecureRandomオブジェクトのプロバイダを返します。- 戻り値:
- このSecureRandomオブジェクトのプロバイダ。
 
 - 
getAlgorithmpublic String getAlgorithm() このSecureRandomオブジェクトによって実装されたアルゴリズムの名前を返します。- 戻り値:
- アルゴリズムの名前。アルゴリズム名を特定できない場合はunknown。
- 導入されたバージョン:
- 1.5
 
 - 
toStringpublic String toString() このSecureRandomの人間が読める文字列表現を返します。
 - 
getParameterspublic SecureRandomParameters getParameters() このSecureRandomインスタンスの実効SecureRandomParametersを返します。戻り値は、 getInstanceメソッドに渡されたSecureRandomParametersオブジェクトとは異なる場合がありますが、このSecureRandomオブジェクトの存続期間中は変更できません。呼び出し元は、返された値を使用して、この SecureRandomがサポートする機能を調べることができます。- 戻り値:
- 有効なSecureRandomParametersパラメータ、またはパラメータが使用されていない場合はnull。
- 導入されたバージョン:
- 9
- 関連項目:
- SecureRandomSpi
 
 - 
setSeedpublic void setSeed(byte[] seed) このランダム・オブジェクトを指定されたシードで再割り当てします。 種子は、既存の種子を置き換えるのではなく、補充します。 これにより、呼出しを繰り返しても、ランダム性が減少しないことが保証されます。PRNG SecureRandomは、nextBytesまたはreseedが呼び出される前にsetSeedが呼び出されると自動的にシードされません。 呼び出し側は、seed引数に、このSecureRandomのセキュリティのための十分なエントロピが含まれていることを確認する必要があります。- パラメータ:
- seed- シード。
- 関連項目:
- getSeed(int)
 
 - 
setSeedpublic void setSeed(long seed) 指定されたlong seedに含まれている8バイトを使用して、この乱数オブジェクトを再シードします。 与えられたシードは、既存のシードと置き換わるのではなく、既存のシードに追加されます。 これにより、呼出しを繰り返しても、ランダム性が減少しないことが保証されます。このメソッドは、 java.util.Randomとの互換性のために定義されています。- オーバーライド:
- setSeed、クラス- Random
- パラメータ:
- seed- シード。
- 関連項目:
- getSeed(int)
 
 - 
nextBytespublic void nextBytes(byte[] bytes) ユーザーが指定したバイト数の乱数バイト数を生成します。
 - 
nextBytespublic void nextBytes(byte[] bytes, SecureRandomParameters params)追加のパラメータを使用して、ユーザーが指定した数のランダムなバイトを生成します。- パラメータ:
- bytes- 乱数バイトを充填する配列
- params- 追加パラメータ
- 例外:
- NullPointerException-- bytesがnullの場合
- UnsupportedOperationException- 基本のプロバイダ実装がこのメソッドをオーバーライドしていない場合
- IllegalArgumentException-- paramsが- nullの場合、この- SecureRandomによって不正またはサポートされていない
- 導入されたバージョン:
- 9
 
 - 
nextprotected final int next(int numBits) ユーザーが指定した数の擬似乱数ビット(右詰、ゼロ埋め込み)を含む整数を生成します。 このメソッドは、java.util.Randomメソッドをオーバーライドし、そのクラス(たとえば、nextInt、nextLong、およびnextFloat)から継承するメソッドのすべてに乱数ビットの発生源を提供するのに役立ちます。
 - 
getSeedpublic static byte[] getSeed(int numBytes) 指定されたバイト数のシード・バイトを返します。シード・バイトの計算には、このクラスが自身をシードするのに使用するシード生成アルゴリズムが使用されます。 この呼出しを使うと、ほかの乱数ジェネレータをシードできます。このメソッドは、下位互換のためだけに提供されています。 呼び出し元は、 SecureRandomオブジェクトを取得するために、別のgetInstanceメソッドの1つを使用し、generateSeedメソッドを呼び出して、そのオブジェクトからシード・バイトを取得することをお勧めします。- パラメータ:
- numBytes- 生成するシード・バイト数。
- 戻り値:
- シード・バイト。
- 例外:
- IllegalArgumentException-- numBytesが負の場合
- 関連項目:
- setSeed(byte[])
 
 - 
generateSeedpublic byte[] generateSeed(int numBytes) 指定されたバイト数のシード・バイトを返します。シード・バイトの計算には、このクラスが自身をシードするのに使用するシード生成アルゴリズムが使用されます。 この呼出しを使うと、ほかの乱数ジェネレータをシードできます。- パラメータ:
- numBytes- 生成するシード・バイト数。
- 戻り値:
- シード・バイト。
- 例外:
- IllegalArgumentException-- numBytesが負の場合
 
 - 
getInstanceStrongpublic 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)
 
 - 
reseedpublic void reseed() エントロピ入力からエントロピ入力を読み取ってこのSecureRandomを再計算します。- 例外:
- UnsupportedOperationException- 基本となるプロバイダ実装がこのメソッドをオーバーライドしていない場合。
- 導入されたバージョン:
- 9
 
 - 
reseedpublic void reseed(SecureRandomParameters params) このSecureRandomをエントロピ入力から追加パラメータで読み取って再計算します。エントロピはエントロピ源から得られることに留意されたい。 paramsの一部のデータにはエントロピが含まれることがありますが、主な用途は多様性を提供することです。- パラメータ:
- params- 余分なパラメータ
- 例外:
- UnsupportedOperationException- 基本となるプロバイダ実装がこのメソッドをオーバーライドしていない場合。
- IllegalArgumentException-- paramsが- nullの場合、この- SecureRandomによって不正またはサポートされていない
- 導入されたバージョン:
- 9
 
 
- 
 
-