JavaTM 2
Platform
Std. Ed. v1.4.0

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 API のアルゴリズムベースのほかのクラスと同様、SecureRandom クラスは実装に依存しないアルゴリズムを提供します。つまり、呼び出し側 (アプリケーションのコード) は、特定の PRNG アルゴリズムを要求すれば、そのアルゴリズムに対応する SecureRandom オブジェクトを受け取ることができます。必要であれば、特定のプロバイダからの特定のアルゴリズムを要求することも可能です。詳細は、getInstance メソッドを参照してください。

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

呼び出し側が、次に示すように getInstance メソッドの呼び出しのすぐあとに setSeed メソッドを呼び出す場合を除いて、SecureRandom の実装は、ジェネレータの内部状態を完全にランダムにしようと試みます。

      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 アルゴリズムによる SecureRandom オブジェクトを作成します。
static SecureRandom getInstance(String algorithm, String provider)
          指定された 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 アルゴリズムに対する SecureRandom オブジェクトを作成します。指定されたプロバイダで PRNG の実装が利用できる場合は、そのプロバイダの実装によって提供された PRNG アルゴリズムが使用されます。

返された 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 アルゴリズムによる SecureRandom オブジェクトを作成します。ただし、そのような PRNG 実装がプロバイダから使用可能な場合に限ります。注: 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 - 生成するシードバイト数
戻り値:
シードバイト

JavaTM 2
Platform
Std. Ed. v1.4.0

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

Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.