Foundation 1.1.2

java.security
クラス SecureRandom

java.lang.Object
  上位を拡張 java.util.Random
      上位を拡張 java.security.SecureRandom
すべての実装されたインタフェース:
Serializable

public class SecureRandom
extends Random

このクラスは暗号用に強化された擬似乱数ジェネレータ (PRNG) を提供します。強力な暗号化による擬似乱数は、「FIPS 140-2, Security Requirements for Cryptographic Modules」のセクション 4.9.1 に指定されている統計的乱数生成テストに最低限適合しています。また、SecureRandom は決定性ではない出力を行う必要があるため、シード素材が予測不可能であり、SecureRandom の出力が「RFC 1750: Randomness Recommendations for Security」に記述されているとおり、強力に暗号化されたシーケンスである必要があります。

Java Security に含まれるほかのアルゴリズムベースのクラスと同様に、SecureRandom も実装に依存しないアルゴリズムを提供します。それにより、呼び出し側 (アプリケーションコード) は特定の PRNG アルゴリズムを要求し、そのアルゴリズムに対する SecureRandom オブジェクトが返されます。また、必要に応じて、特定のプロバイダから特定のアルゴリズムを要求することもできます。getInstance メソッドを参照してください。

したがって、SecureRandom オブジェクトを要求するには、2 つの方法があります。1 つはアルゴリズム名のみを指定する方法で、もう 1 つはアルゴリズム名とパッケージプロバイダの両方を指定する方法です。

SecureRandom の実装では、呼び出し側が getInstance メソッドを呼び出したあとで setSeed メソッドを呼び出さないかぎり、ジェネレータ自身の内部状態を完全にランダム化しようとします。

      SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
      random.setSeed(seed);
 

呼び出し側は、getInstance の呼び出しから SecureRandom オブジェクトを取得したあとで、nextBytes を呼び出してランダムバイトを生成できます。

      byte bytes[] = new byte[20];
      random.nextBytes(bytes);
 

呼び出し側は、次の例のように generateSeed メソッドを呼び出して、指定された数のシードバイトを生成することもできます。生成されたシードバイトは、たとえば別の乱数ジェネレータをシードするために使用します。

      byte seed[] = random.generateSeed(20);
 

関連項目:
SecureRandomSpi, Random, 直列化された形式

コンストラクタの概要
  SecureRandom()
          このコンストラクタを使用することにより、呼び出し側は SecureRandom の実装を持つプロバイダのうち、もっとも高い優先順位でインストールされているプロバイダの実装を含む SecureRandom オブジェクトを取得します。
  SecureRandom(byte[] seed)
          このコンストラクタを使用することにより、呼び出し側は SecureRandom の実装を持つプロバイダのうち、もっとも高い優先順位でインストールされているプロバイダの実装を含む SecureRandom オブジェクトを取得します。
protected SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider)
          SecureRandom オブジェクトを作成します。
 
メソッドの概要
 byte[] generateSeed(int numBytes)
          指定されたバイト数のシードバイトを返します。
static SecureRandom getInstance(String algorithm)
          指定された擬似乱数ジェネレータ (PRNG) アルゴリズムを実装した SecureRandom オブジェクトを返します。
static SecureRandom getInstance(String algorithm, Provider provider)
          指定されたプロバイダから指定された PRNG の実装を取得できる場合に、そのプロバイダが提供する PRNG アルゴリズムに対する SecureRandom オブジェクトを生成します。
static SecureRandom getInstance(String algorithm, String provider)
          指定されたプロバイダから指定された PRNG の実装を取得できる場合に、そのプロバイダが提供する PRNG アルゴリズムに対する SecureRandom オブジェクトを生成します。
 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 バイトを使用して、この乱数オブジェクトを再シードします。
 
クラス java.util.Random から継承されたメソッド
nextBoolean, nextDouble, nextFloat, nextGaussian, nextInt, nextInt, nextLong
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

SecureRandom

public SecureRandom()

このコンストラクタを使用することにより、呼び出し側は SecureRandom の実装を持つプロバイダのうち、もっとも高い優先順位でインストールされているプロバイダの実装を含む SecureRandom オブジェクトを取得します。

この SecureRandom インスタンスはシードされていません。SecureRandom オブジェクトをシードするには、setSeed メソッドを呼び出します。setSeed の呼び出しが行われなかった場合は、最初に nextBytes メソッドを呼び出したときに、SecureRandom オブジェクトが自身のシードを行うように強制されます。

このコンストラクタは下位互換のために提供されています。呼び出し側からは、代替の getInstance メソッドのうちの 1 つを使用して SecureRandom オブジェクトを取得することをお勧めします。


SecureRandom

public SecureRandom(byte[] seed)

このコンストラクタを使用することにより、呼び出し側は SecureRandom の実装を持つプロバイダのうち、もっとも高い優先順位でインストールされているプロバイダの実装を含む SecureRandom オブジェクトを取得します。このコンストラクタは、空のコンストラクタの説明で言及されている自己シードのアルゴリズムよりもユーザー指定のシードを優先して使用します。呼び出し側がなんらかの物理デバイス (放射線検出器またはノイズダイオードなど) から高品質の乱数バイトにアクセスできる場合は、空のコンストラクタの方が適している場合があります。

このコンストラクタは下位互換のために提供されています。呼び出し側からは、代替の getInstance メソッドのうちの 1 つを使用して SecureRandom オブジェクトを取得し、続けて setSeed メソッドを呼び出してそのオブジェクトをシードすることをお勧めします。

パラメータ:
seed - シード

SecureRandom

protected SecureRandom(SecureRandomSpi secureRandomSpi,
                       Provider provider)
SecureRandom オブジェクトを作成します。

パラメータ:
secureRandomSpi - SecureRandom の実装
provider - プロバイダ
メソッドの詳細

getInstance

public static SecureRandom getInstance(String algorithm)
                                throws NoSuchAlgorithmException
指定された擬似乱数ジェネレータ (PRNG) アルゴリズムを実装した SecureRandom オブジェクトを返します。要求された PRNG の実装をデフォルトのプロバイダパッケージが提供している場合は、その実装を含む SecureRandom のインスタンスが返されます。指定された PRNG がデフォルトのパッケージで使用できない場合は、ほかのパッケージが検索されます。

返された SecureRandom インスタンスはシードされていません。SecureRandom オブジェクトをシードするには、setSeed メソッドを呼び出します。setSeed の呼び出しが行われなかった場合は、最初に nextBytes メソッドを呼び出したときに、SecureRandom オブジェクトが自身のシードを行うように強制されます。

パラメータ:
algorithm - PRNG アルゴリズムの名前。 PRNG アルゴリズムの標準的な名前については、「Java 暗号化アーキテクチャー API の仕様およびリファレンス」の付録 A を参照
戻り値:
新規 SecureRandom オブジェクト
例外:
NoSuchAlgorithmException - PRNG アルゴリズムが呼び出し側の環境で使用できない場合
導入されたバージョン:
1.2

getInstance

public static SecureRandom getInstance(String algorithm,
                                       String provider)
                                throws NoSuchAlgorithmException,
                                       NoSuchProviderException
指定されたプロバイダから指定された PRNG の実装を取得できる場合に、そのプロバイダが提供する PRNG アルゴリズムに対する SecureRandom オブジェクトを生成します。

返された SecureRandom インスタンスはシードされていません。SecureRandom オブジェクトをシードするには、setSeed メソッドを呼び出します。setSeed の呼び出しが行われなかった場合は、最初に nextBytes メソッドを呼び出したときに、SecureRandom オブジェクトが自身のシードを行うように強制されます。

パラメータ:
algorithm - PRNG アルゴリズムの名前。 PRNG アルゴリズムの標準的な名前については、「Java 暗号化アーキテクチャー API の仕様およびリファレンス」の付録 A を参照
provider - プロバイダ名
戻り値:
新規 SecureRandom オブジェクト
例外:
NoSuchAlgorithmException - 要求された PRNG の実装をそのプロバイダから取得できない場合
NoSuchProviderException - プロバイダが設定されていない場合
IllegalArgumentException - プロバイダ名が null または空の場合
導入されたバージョン:
1.2
関連項目:
Provider

getInstance

public static SecureRandom getInstance(String algorithm,
                                       Provider provider)
                                throws NoSuchAlgorithmException
指定されたプロバイダから指定された PRNG の実装を取得できる場合に、そのプロバイダが提供する PRNG アルゴリズムに対する SecureRandom オブジェクトを生成します。注:provider を登録する必要はありません。

返された SecureRandom インスタンスはシードされていません。SecureRandom オブジェクトをシードするには、setSeed メソッドを呼び出します。setSeed の呼び出しが行われなかった場合は、最初に nextBytes メソッドを呼び出したときに、SecureRandom オブジェクトが自身のシードを行うように強制されます。

パラメータ:
algorithm - PRNG アルゴリズムの名前。 PRNG アルゴリズムの標準的な名前については、「Java 暗号化アーキテクチャー API の仕様およびリファレンス」の付録 A を参照
provider - プロバイダ
戻り値:
新規 SecureRandom オブジェクト
例外:
NoSuchAlgorithmException - 要求された PRNG の実装をそのプロバイダから取得できない場合
IllegalArgumentException - provider が null の場合
導入されたバージョン:
1.4
関連項目:
Provider

getProvider

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

戻り値:
この SecureRandom オブジェクトのプロバイダ

setSeed

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

パラメータ:
seed - シード
関連項目:
getSeed(int)

setSeed

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

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

オーバーライド:
クラス Random 内の setSeed
パラメータ:
seed - シード
関連項目:
getSeed(int)

nextBytes

public void nextBytes(byte[] bytes)
ユーザーが指定したバイト数の乱数バイト数を生成します。このメソッドは、このクラスによって返されたすべての乱数エンティティー (シードバイトを除く) に基づいています。

オーバーライド:
クラス Random 内の nextBytes
パラメータ:
bytes - 乱数バイトを充填する配列

next

protected final int next(int numBits)
ユーザーが指定した数の擬似乱数ビット (右詰、ゼロ埋め込み) を含む整数を生成します。このメソッドは、java.util.Random メソッドをオーバーライドし、そのクラス (たとえば、nextIntnextLong、および nextFloat) から継承するメソッドのすべてに乱数ビットの発生源を提供するのに役立ちます。

オーバーライド:
クラス Random 内の next
パラメータ:
numBits - 0 <= numBits <= 32 の場合、生成する擬似乱数ビットの数
戻り値:
ユーザー指定の擬似乱数ビット (右詰め、先頭にゼロ埋め込み) を含む int

getSeed

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

このメソッドは、下位互換のためだけに提供されています。呼び出し側からは、代替の getInstance メソッドのうちの 1 つを使用して SecureRandom オブジェクトを取得したすぐあとに、setSeed メソッドを呼び出してそのオブジェクトからシードバイトを取得することをお勧めします。

パラメータ:
numBytes - 生成するシードバイト数
戻り値:
シードバイト
関連項目:
setSeed(byte[])

generateSeed

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

パラメータ:
numBytes - 生成するシードバイト数
戻り値:
シードバイト

Foundation 1.1.2

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。