共有の秘密の確立に関係するキーは、キー・ジェネレータのいずれか(KeyPairGenerator
またはKeyGenerator
)かKeyFactory
によって、またはキー協定プロトコルの中間フェーズの結果として作成されます。
キー交換の対応関係ごとに、doPhase
を呼び出す必要があります。 たとえば、キー交換の相手が1つの場合は、lastPhase
フラグをtrue
に設定してdoPhase
を1回呼び出す必要があります。 キー交換の相手が2つの場合は、最初はlastPhase
フラグをfalse
に設定し、2回目はtrue
に設定して、doPhase
を2回呼び出す必要があります。 キー交換の相手の数は任意です。 ただし、2つ以上のパーティを持つキー交換のサポートは、実装固有であるか、標準キー契約アルゴリズムで指定されています。
Javaプラットフォームの実装は、すべて次の標準のKeyAgreement
アルゴリズムをサポートする必要があります。
DiffieHellman
- 導入されたバージョン:
- 1.4
- 関連項目:
-
コンストラクタのサマリー
修飾子コンストラクタ説明protected
KeyAgreement
(KeyAgreementSpi keyAgreeSpi, Provider provider, String algorithm) KeyAgreement
オブジェクトを作成します。 -
メソッドのサマリー
修飾子と型メソッド説明final Key
このキー合意に関係する相手のだれかから受け取った、指定されたキーを使用してこのキー合意の次の段階を実行します。final byte[]
共有の秘密情報を生成して新しいバッファ内に返します。final int
generateSecret
(byte[] sharedSecret, int offset) 共有の秘密情報を生成して、offset
から始まるsharedSecret
バッファ内に格納します。final SecretKey
generateSecret
(String algorithm) 共有の秘密情報を作成して、それを指定されたアルゴリズムのSecretKey
オブジェクトとして返します。final String
このKeyAgreement
オブジェクトのアルゴリズム名を返します。static final KeyAgreement
getInstance
(String algorithm) 指定したキー合意アルゴリズムを実装するKeyAgreement
オブジェクトを返します。static final KeyAgreement
getInstance
(String algorithm, String provider) 指定したキー合意アルゴリズムを実装するKeyAgreement
オブジェクトを返します。static final KeyAgreement
getInstance
(String algorithm, Provider provider) 指定したキー合意アルゴリズムを実装するKeyAgreement
オブジェクトを返します。final Provider
このKeyAgreement
オブジェクトのプロバイダを返します。final void
指定されたキーでこのキー合意を初期化します。これには、このキー合意に必要なすべてのアルゴリズム・パラメータを含める必要があります。final void
init
(Key key, SecureRandom random) 指定されたキーと乱数発生の元でこのキー合意を初期化します。final void
init
(Key key, AlgorithmParameterSpec params) 指定されたキーとアルゴリズム・パラメータのセットを使用してこのキー合意を初期化します。final void
init
(Key key, AlgorithmParameterSpec params, SecureRandom random) 指定されたキー、アルゴリズム・パラメータのセット、および乱数発生の元を使用してこのキー合意を初期化します。
-
コンストラクタの詳細
-
KeyAgreement
protected KeyAgreement(KeyAgreementSpi keyAgreeSpi, Provider provider, String algorithm) KeyAgreement
オブジェクトを作成します。- パラメータ:
keyAgreeSpi
- 委譲先provider
- プロバイダalgorithm
- アルゴリズム
-
-
メソッドの詳細
-
getAlgorithm
public final String getAlgorithm()このKeyAgreement
オブジェクトのアルゴリズム名を返します。これは、この
KeyAgreement
オブジェクトを作成したgetInstance
呼出しのいずれかに指定された名前と同じです。- 戻り値:
- この
KeyAgreement
オブジェクトのアルゴリズム名。
-
getInstance
public static final KeyAgreement getInstance(String algorithm) throws NoSuchAlgorithmException 指定したキー合意アルゴリズムを実装するKeyAgreement
オブジェクトを返します。このメソッドは、最も優先されるプロバイダから始まる登録済セキュリティ・プロバイダのリストを横断します。 指定されたアルゴリズムをサポートする最初のプロバイダから
KeyAgreementSpi
実装をカプセル化する新しいKeyAgreement
オブジェクトが返されます。登録済みプロバイダのリストは、
Security.getProviders()
メソッド経由で取得できます。- 実装上のノート:
- JDKリファレンス実装では、さらに
jdk.security.provider.preferred
Security
プロパティを使用して、指定したアルゴリズムの優先プロバイダ順序を決定します。 これは、Security.getProviders()
によって返されるプロバイダの順序とは異なる場合があります。 - パラメータ:
algorithm
- 要求されたキー合意アルゴリズムの標準名。 標準アルゴリズム名の詳細は、「Javaセキュリティ標準アルゴリズム名仕様」のKeyAgreementの項を参照してください。- 戻り値:
- 新しい
KeyAgreement
オブジェクト - 例外:
NoSuchAlgorithmException
-Provider
が、指定されたアルゴリズムのKeyAgreementSpi
実装をサポートしていない場合NullPointerException
-algorithm
がnull
である場合- 関連項目:
-
getInstance
public static final KeyAgreement getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException 指定したキー合意アルゴリズムを実装するKeyAgreement
オブジェクトを返します。指定したプロバイダから
KeyAgreementSpi
実装をカプセル化する新しいKeyAgreement
オブジェクトが返されます。 指定したプロバイダは、セキュリティ・プロバイダ・リストに登録する必要があります。登録済みプロバイダのリストは、
Security.getProviders()
メソッド経由で取得できます。- パラメータ:
algorithm
- 要求されたキー合意アルゴリズムの標準名。 標準アルゴリズム名の詳細は、「Javaセキュリティ標準アルゴリズム名仕様」のKeyAgreementの項を参照してください。provider
- プロバイダ名。- 戻り値:
- 新しい
KeyAgreement
オブジェクト - 例外:
IllegalArgumentException
-provider
がnull
または空の場合NoSuchAlgorithmException
- 指定されたアルゴリズムのKeyAgreementSpi
実装が、指定されたプロバイダから利用可能でない場合NoSuchProviderException
- 指定されたプロバイダがセキュリティ・プロバイダ・リストに登録されていない場合NullPointerException
-algorithm
がnull
である場合- 関連項目:
-
getInstance
public static final KeyAgreement getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException 指定したキー合意アルゴリズムを実装するKeyAgreement
オブジェクトを返します。指定したプロバイダから
KeyAgreementSpi
実装をカプセル化する新しいKeyAgreement
オブジェクトが返されます。 指定されたプロバイダをプロバイダ・リストに登録する必要はありません。- パラメータ:
algorithm
- 要求されたキー合意アルゴリズムの標準名。 標準アルゴリズム名の詳細は、「Javaセキュリティ標準アルゴリズム名仕様」のKeyAgreementの項を参照してください。provider
- プロバイダ- 戻り値:
- 新しい
KeyAgreement
オブジェクト - 例外:
IllegalArgumentException
-provider
がnull
の場合NoSuchAlgorithmException
- 指定されたアルゴリズムのKeyAgreementSpi
実装が、指定されたProvider
オブジェクトから使用できない場合NullPointerException
-algorithm
がnull
である場合- 関連項目:
-
getProvider
public final Provider getProvider()このKeyAgreement
オブジェクトのプロバイダを返します。- 戻り値:
- この
KeyAgreement
オブジェクトのプロバイダ
-
init
public final void init(Key key) throws InvalidKeyException 指定されたキーでこのキー合意を初期化します。これには、このキー合意に必要なすべてのアルゴリズム・パラメータを含める必要があります。このキー合意が乱数バイトを必要とする場合は、インストールされているプロバイダのうち、もっとも優先順位の高いプロバイダの
SecureRandom
の実装を乱数発生の元として使用して乱数バイトを取得します。 (インストールされたプロバイダがいずれもSecureRandom
の実装を提供しない場合、システム提供のランダム性ソースが使用されます。)- パラメータ:
key
- 当事者の非公開情報。 たとえば、Diffie-Hellmanのキー合意の場合は、当事者自身のDiffie-Hellman非公開キー- 例外:
InvalidKeyException
- 指定されたキーがこのキー合意に不適切な場合。たとえば、型が間違っている場合、またはアルゴリズムの型に互換性がない場合。
-
init
public final void init(Key key, SecureRandom random) throws InvalidKeyException 指定されたキーと乱数発生の元でこのキー合意を初期化します。 指定されたキーには、このキー合意に必要なすべてのアルゴリズム・パラメータを含める必要があります。キー合意アルゴリズムが乱数バイトを必要とする場合は、指定された乱数発生の元
random
から取得します。 ただし、基本となるアルゴリズム実装が乱数バイトを必要としない場合、random
は無視されます。- パラメータ:
key
- 当事者の非公開情報。 たとえば、Diffie-Hellmanのキー合意の場合は、当事者自身のDiffie-Hellman非公開キーrandom
- 乱数発生の元- 例外:
InvalidKeyException
- 指定されたキーがこのキー合意に不適切な場合。たとえば、型が間違っている場合、またはアルゴリズムの型に互換性がない場合。
-
init
public final void init(Key key, AlgorithmParameterSpec params) throws InvalidKeyException, InvalidAlgorithmParameterException 指定されたキーとアルゴリズム・パラメータのセットを使用してこのキー合意を初期化します。このキー合意が乱数バイトを必要とする場合は、インストールされているプロバイダのうち、もっとも優先順位の高いプロバイダの
SecureRandom
の実装を乱数発生の元として使用して乱数バイトを取得します。 (インストールされたプロバイダがいずれもSecureRandom
の実装を提供しない場合、システム提供のランダム性ソースが使用されます。)- パラメータ:
key
- 当事者の非公開情報。 たとえば、Diffie-Hellmanのキー合意の場合は、当事者自身のDiffie-Hellman非公開キーparams
- キー合意パラメータ- 例外:
InvalidKeyException
- 指定されたキーがこのキー合意に不適切な場合。たとえば、型が間違っている場合、またはアルゴリズムの型に互換性がない場合。InvalidAlgorithmParameterException
- 指定されたパラメータがこのキー合意に不適切な場合。
-
init
public final void init(Key key, AlgorithmParameterSpec params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException 指定されたキー、アルゴリズム・パラメータのセット、および乱数発生の元を使用してこのキー合意を初期化します。- パラメータ:
key
- 当事者の非公開情報。 たとえば、Diffie-Hellmanのキー合意の場合は、当事者自身のDiffie-Hellman非公開キーparams
- キー合意パラメータrandom
- 乱数発生の元- 例外:
InvalidKeyException
- 指定されたキーがこのキー合意に不適切な場合。たとえば、型が間違っている場合、またはアルゴリズムの型に互換性がない場合。InvalidAlgorithmParameterException
- 指定されたパラメータがこのキー合意に不適切な場合。
-
doPhase
public final Key doPhase(Key key, boolean lastPhase) throws InvalidKeyException, IllegalStateException このキー合意に関係する相手のだれかから受け取った、指定されたキーを使用してこのキー合意の次の段階を実行します。- パラメータ:
key
- この段階のキー。 たとえば、2当事者間のDiffie-Hellmanの場合は、相手のDiffie-Hellman公開キーlastPhase
- このキー契約の最終フェーズであるかどうかを示すフラグ。- 戻り値:
- このフェーズによって生成された(中間)キー、またはこのフェーズでキーが生成されない場合は
null
- 例外:
InvalidKeyException
- 指定されたキーがこの段階に不適切な場合。IllegalStateException
- このキー合意が初期化されていない場合。
-
generateSecret
public final byte[] generateSecret() throws IllegalStateException共有の秘密情報を生成して新しいバッファ内に返します。このメソッドは、
KeyAgreement
オブジェクトを、init
メソッドのいずれかへの最新の呼出し後の状態にリセットします。generateSecret
への呼び出し後、新しいキーを提供するためにdoPhase
を呼び出し、generateSecret
を呼び出して新しいシークレットを生成することによって、オブジェクトを今後のキー協定操作に再利用できます。 この場合、init
に提供されているプライベート情報とアルゴリズム・パラメータは、複数のキー協定操作に使用されます。init
メソッドは、generateSecret
より後に呼び出すことで、後続の操作で使用されるプライベート情報を変更できます。- 戻り値:
- 共有の秘密情報の入った新しいバッファ
- 例外:
IllegalStateException
- このキー協定が初期化されていない場合、またはアグリーメントのすべてのパーティに対してキーを指定するためにdoPhase
がコールされていない場合
-
generateSecret
public final int generateSecret(byte[] sharedSecret, int offset) throws IllegalStateException, ShortBufferException 共有の秘密情報を生成して、offset
から始まるsharedSecret
バッファ内に格納します。sharedSecret
バッファが小さすぎて結果を保持できない場合は、ShortBufferException
がスローされます。 この場合、より大きな出力バッファを使用してこの呼出しを繰り返します。このメソッドは、
KeyAgreement
オブジェクトを、init
メソッドのいずれかへの最新の呼出し後の状態にリセットします。generateSecret
への呼び出し後、新しいキーを提供するためにdoPhase
を呼び出し、generateSecret
を呼び出して新しいシークレットを生成することによって、オブジェクトを今後のキー協定操作に再利用できます。 この場合、init
に提供されているプライベート情報とアルゴリズム・パラメータは、複数のキー協定操作に使用されます。init
メソッドは、generateSecret
より後に呼び出すことで、後続の操作で使用されるプライベート情報を変更できます。- パラメータ:
sharedSecret
- 共有の秘密情報を格納するバッファoffset
- 共有の秘密情報が格納されるsharedSecret
内のオフセット- 戻り値:
sharedSecret
に格納されたバイト数- 例外:
IllegalStateException
- このキー協定が初期化されていない場合、またはアグリーメントのすべてのパーティに対してキーを指定するためにdoPhase
がコールされていない場合ShortBufferException
- 指定された出力バッファが小さすぎて秘密情報を保持できない場合
-
generateSecret
public final SecretKey generateSecret(String algorithm) throws IllegalStateException, NoSuchAlgorithmException, InvalidKeyException 共有の秘密情報を作成して、それを指定されたアルゴリズムのSecretKey
オブジェクトとして返します。このメソッドは、
KeyAgreement
オブジェクトを、init
メソッドのいずれかへの最新の呼出し後の状態にリセットします。generateSecret
への呼び出し後、新しいキーを提供するためにdoPhase
を呼び出し、generateSecret
を呼び出して新しいシークレットを生成することによって、オブジェクトを今後のキー協定操作に再利用できます。 この場合、init
に提供されているプライベート情報とアルゴリズム・パラメータは、複数のキー協定操作に使用されます。init
メソッドは、generateSecret
より後に呼び出すことで、後続の操作で使用されるプライベート情報を変更できます。- パラメータ:
algorithm
- 要求された秘密キーアルゴリズム- 戻り値:
- 共有の秘密キー
- 例外:
IllegalStateException
- このキー協定が初期化されていない場合、またはアグリーメントのすべてのパーティに対してキーを指定するためにdoPhase
がコールされていない場合NoSuchAlgorithmException
- 指定された秘密キーアルゴリズムがない場合InvalidKeyException
- 共有の秘密キー・マテリアルが、指定されたアルゴリズムの秘密キーを生成に使用できない場合 (キー・データが短すぎるなど)
-