クラスSecureRandom

java.lang.Object
java.util.Random
java.security.SecureRandom
すべての実装されたインタフェース:
Serializable, RandomGenerator

public class SecureRandom extends Random
このクラスは暗号用に強化された乱数ジェネレータ(RNG)を提供します。

強力な暗号化による乱数は、「FIPS 140-2, Security Requirements for Cryptographic Modules」のセクション4.9.1に指定されている統計的乱数生成テストに最低限適合しています。 また、SecureRandomは非決定的な出力を生成する必要があります。 したがって、SecureRandomオブジェクトに渡されるシード・マテリアルは予測できない必要があり、RFC 4086: セキュリティのランダ 性要件で説明されているように、すべてのSecureRandom出力シーケンスは暗号的に強力である必要があります。

多くのSecureRandom実装は、疑似乱数ジェネレータ(PRNG(deterministic random bits generator、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パラメータを使用できます。

ノート: 実装によっては、generateSeedreseedおよびnextBytesメソッドが、たとえば、様々なUnixに似たオペレーティング・システ でエントロピ・ソースが/dev/randomの 合に、エントロピが収集されるとブロックされることがあります。

スレッドの安全性

SecureRandomオブジェクトは、複数の同時スレッドで安全に使用できます。
実装要件:
SecureRandomサービス・プロバイダは、プロバイダの登録時に「サービス・プロバイダ属性」 "ThreadSafe"を"true"に設定することで、それがスレッド・セーフであることを通知できます。 それ以外の 合、このクラスはかわりに、SecureRandomSpi実装の次のメソッドへのアクセスを同期します:
導入されたバージョン:
1.1
外部仕様
関連 目:
  • コンストラクタの詳細

    • SecureRandom

      public SecureRandom()
      デフォルトの乱数アルゴリズ を実装する、セキュリティ保護された乱数ジェネレータ(RNG)を構築します。

      このコンストラクタは、最優先のProviderから に、登録済みのセキュリティProviderのリストをトラバースします。 SecureRandom (RNG)アルゴリズ をサポートする最初のプロバイダからSecureRandomSpi実装をカプセル化する新しいSecureRandomオブジェクトが返されます。 どのプロバイダもRNGアルゴリズ をサポートしていない 合は、実装固有のデフォルトが返されます。

      登録済みプロバイダのリストは、Security.getProviders()メソッド経由で取得できます。

      標準RNGアルゴリズ 名の詳細は、「Javaセキュリティ標準アルゴリズ 名仕様」SecureRandomの を参照してく さい。

    • SecureRandom

      public SecureRandom(byte[] seed)
      デフォルトの乱数アルゴリズ を実装する、セキュリティ保護された乱数ジェネレータ(RNG)を構築します。 SecureRandomインスタンスは、指定されたシード・バイトでシードされます。

      このコンストラクタは、最優先のProviderから に、登録済みのセキュリティProviderのリストをトラバースします。 SecureRandom (RNG)アルゴリズ をサポートする最初のプロバイダからSecureRandomSpi実装をカプセル化する新しいSecureRandomオブジェクトが返されます。 どのプロバイダもRNGアルゴリズ をサポートしていない 合は、実装固有のデフォルトが返されます。

      登録済みプロバイダのリストは、Security.getProviders()メソッド経由で取得できます。

      標準RNGアルゴリズ 名の詳細は、「Javaセキュリティ標準アルゴリズ 名仕様」SecureRandomの を参照してく さい。

      パラメータ:
      seed - シード。
      スロー:
      NullPointerException - seednullの 合
    • 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.preferred Securityプロパティを使用して、指定したアルゴリズ の優先プロバイダ 序を決定します。 これは、Security.getProviders()によって返されるプロバイダの 序とは異なる 合があります。
      パラメータ:
      algorithm - RNGアルゴリズ の名前。 標準RNGアルゴリズ 名の詳細は、「Javaセキュリティ標準アルゴリズ 名仕様」SecureRandomの を参照してく さい。
      戻り値:
      新しいSecureRandomオブジェクト
      スロー:
      NoSuchAlgorithmException - Providerが、指定されたアルゴリズ のSecureRandomSpi実装をサポートしていない 合
      NullPointerException - algorithmnullである 合
      導入されたバージョン:
      1.2
      関連 目:
    • 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 - algorithmnullである 合
      導入されたバージョン:
      1.2
      関連 目:
    • getInstance

      public static SecureRandom getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
      指定された乱数ジェネレータの(RNG)アルゴリズ を実装するSecureRandomオブジェクトを返します。

      指定したプロバイダからSecureRandomSpi実装をカプセル化する新しいSecureRandomオブジェクトが返されます。 指定されたプロバイダをプロバイダ・リストに登録する必要はありません。

      パラメータ:
      algorithm - RNGアルゴリズ の名前。 標準RNGアルゴリズ 名の詳細は、「Javaセキュリティ標準アルゴリズ 名仕様」SecureRandomの を参照してく さい。
      provider - プロバイダ
      戻り値:
      新しいSecureRandomオブジェクト
      スロー:
      IllegalArgumentException - 指定されたプロバイダがnullの 合
      NoSuchAlgorithmException - 指定されたアルゴリズ のSecureRandomSpi実装が、指定されたProviderオブジェクトから使用できない 合
      NullPointerException - algorithmnullである 合
      導入されたバージョン:
      1.4
      関連 目:
    • getInstance

      public static SecureRandom getInstance(String algorithm, SecureRandomParameters params) throws NoSuchAlgorithmException
      指定された乱数ジェネレータの(RNG)アルゴリズ を実装し、指定されたSecureRandomParametersリクエストをサポートするSecureRandomオブジェクトを返します。

      このメソッドは、最も優先されるプロバイダから始まる登録済セキュリティ・プロバイダのリストを横断します。 指定されたアルゴリズ をサポートし、指定された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 - algorithmnullである 合
      導入されたバージョン:
      9
      関連 目:
    • 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 - algorithmnullである 合
      導入されたバージョン:
      9
      関連 目:
    • getInstance

      public static SecureRandom getInstance(String algorithm, SecureRandomParameters params, Provider provider) throws NoSuchAlgorithmException
      指定された乱数ジェネレータの(RNG)アルゴリズ を実装し、指定されたSecureRandomParametersリクエストをサポートするSecureRandomオブジェクトを返します。

      指定したプロバイダからSecureRandomSpi実装をカプセル化する新しいSecureRandomオブジェクトが返されます。 指定されたプロバイダをプロバイダ・リストに登録する必要はありません。

      パラメータ:
      algorithm - RNGアルゴリズ の名前。 標準RNGアルゴリズ 名の詳細は、「Javaセキュリティ標準アルゴリズ 名仕様」SecureRandomの を参照してく さい。
      params - 新しく作成されたSecureRandomオブジェクトがサポートするSecureRandomParameters
      provider - プロバイダ
      戻り値:
      新しいSecureRandomオブジェクト
      スロー:
      IllegalArgumentException - 指定されたプロバイダまたはパラメータがnullの 合
      NoSuchAlgorithmException - 指定されたプロバイダが、指定されたアルゴリズ およびパラメータのSecureRandomSpi実装をサポートしていない 合
      NullPointerException - algorithmnullである 合
      導入されたバージョン:
      9
      関連 目:
    • getProvider

      public final Provider getProvider()
      このSecureRandomオブジェクトのプロバイダを返します。
      戻り値:
      このSecureRandomオブジェクトのプロバイダ。
    • getAlgorithm

      public String getAlgorithm()
      このSecureRandomオブジェクトによって実装されたアルゴリズ の名前を返します。
      戻り値:
      アルゴリズ の名前。アルゴリズ 名を特定できない 合はunknown
      導入されたバージョン:
      1.5
    • toString

      public String toString()
      このSecureRandomの人間が読める文字列表現を返します。
      オーバーライド:
      toString、クラスObject
      戻り値:
      文字列表現
    • getParameters

      public SecureRandomParameters getParameters()
      このSecureRandomインスタンスの有効なSecureRandomParametersを返します。

      戻り値は、getInstanceメソッドに渡されるSecureRandomParametersオブジェクトと異なる 合がありますが、このSecureRandomオブジェクトの存続期間中は変更できません。

      呼出し側は、戻り値を使用して、このSecureRandomがサポートする機能を確認できます。

      戻り値:
      有効なSecureRandomParametersパラメータ、またはパラメータが使用されていない 合はnull
      導入されたバージョン:
      9
      関連 目:
    • setSeed

      public void setSeed(byte[] seed)
      このランダ なオブジェクトを、指定されたシードに再シードします。 シードは、既存のシードを置き換えるのではなく、補足します。 これにより、呼出しを繰り返しても、ランダ 性が減少しないことが保証されます。

      nextBytesまたはreseedコールの前にsetSeedがコールされた 合、PRNG SecureRandomは自動的にシードされません。 呼び出し側は、seed引数に、このSecureRandomのセキュリティのための十分なエントロピが含まれていることを確認する必要があります。

      パラメータ:
      seed - シード。
      スロー:
      NullPointerException - seednullの 合
      関連 目:
    • setSeed

      public void setSeed(long seed)
      指定されたlong seedに含まれている8バイトを使用して、この乱数オブジェクトを再シードします。 与えられたシードは、既存のシードと置き換わるのではなく、既存のシードに追 されます。 これにより、呼出しを繰り返しても、ランダ 性が減少しないことが保証されます。

      nextBytesまたはreseedコールの前にsetSeedがコールされた 合、PRNG SecureRandomは自動的にシードされません。 呼び出し側は、seed引数に、このSecureRandomのセキュリティのための十分なエントロピが含まれていることを確認する必要があります。

      このメソッドは、java.util.Randomとの互換性のために定義されています。

      オーバーライド:
      setSeed、クラスRandom
      パラメータ:
      seed - シード。
      関連 目:
    • nextBytes

      public void nextBytes(byte[] bytes)
      ユーザーが指定したバイト数の乱数バイト数を生成します。
      定義:
      インタフェースRandomGenerator内のnextBytes
      オーバーライド:
      nextBytes、クラスRandom
      パラメータ:
      bytes - 乱数バイトを充填する配列。
      スロー:
      NullPointerException - bytesnullの 合
    • nextBytes

      public void nextBytes(byte[] bytes, SecureRandomParameters params)
      追 パラメータを使用して、ユーザー指定のランダ ・バイト数を生成します。
      パラメータ:
      bytes - 乱数バイトを充填する配列
      params - 追 パラメータ
      スロー:
      NullPointerException - bytesnullの 合
      UnsupportedOperationException - 基本のプロバイダ実装がこのメソッドをオーバーライドしていない 合
      IllegalArgumentException - paramsnullの 合、このSecureRandomによって不正またはサポートされていない
      導入されたバージョン:
      9
    • next

      protected final int next(int numBits)
      ユーザーが指定した数の擬似乱数ビット(右詰、ゼロ埋め込み)を含む整数を生成します。 このメソッドはjava.util.Randomメソッドをオーバーライドし、そのクラス(例: nextIntnextLongおよびnextFloat)から継承されたすべてのメソッドにランダ ・ビットのソースを提供します。
      オーバーライド:
      next、クラスRandom
      パラメータ:
      numBits - 生成する擬似乱数ビットの数(0 <= numBits <= 32)。
      戻り値:
      ユーザー指定の擬似乱数ビット(右詰め、先 にゼロ埋め込み)を含むint
    • getSeed

      public static byte[] getSeed(int numBytes)
      指定されたバイト数のシード・バイトを返します。シード・バイトの計算には、このクラスが自身をシードするのに使用するシード生成アルゴリズ が使用されます。 この呼出しを使うと、ほかの乱数ジェネレータをシードできます。

      このメソッドは、下位互換のため けに提供されています。 呼出し側は、代替のgetInstanceメソッドのいずれかを使用してSecureRandomオブジェクトを取得し、generateSeedメソッドをコールしてそのオブジェクトからシード・バイトを取得することをお薦めします。

      パラメータ:
      numBytes - 生成するシード・バイト数。
      戻り値:
      シード・バイト。
      スロー:
      IllegalArgumentException - numBytesが の 合
      関連 目:
    • 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
      関連 目:
    • reseed

      public void reseed()
      このSecureRandomを、エントロピ・ソースから読み取られたエントロピ入力で再シードします。
      スロー:
      UnsupportedOperationException - 基礎となるプロバイダ実装がこのメソッドをオーバーライドしていない 合。
      導入されたバージョン:
      9
    • reseed

      public void reseed(SecureRandomParameters params)
      このSecureRandomを、エントロピ・ソースから読み取られたエントロピ入力で追 パラメータとともに再シードします。

      エントロピはエントロピ源から取得されることに注意してく さい。 paramsの一部のデータにはエントロピが含まれている 合がありますが、その主な用途は多様性を提供することです。

      パラメータ:
      params - 余分なパラメータ
      スロー:
      UnsupportedOperationException - 基礎となるプロバイダ実装がこのメソッドをオーバーライドしていない 合。
      IllegalArgumentException - paramsnullの 合、このSecureRandomによって不正またはサポートされていない
      導入されたバージョン:
      9