public class KeyAgreement extends Object
共有の秘密の確立に関係するキーは、キー・ジェネレータのいずれか(KeyPairGenerator
またはKeyGenerator
)かKeyFactory
によって、またはキー協定プロトコルの中間フェーズの結果として作成されます。
キー交換の対応関係ごとに、doPhase
を呼び出す必要があります。 たとえば、キー交換の相手が1つの場合は、lastPhase
フラグをtrue
に設定してdoPhase
を1回呼び出す必要があります。 キー交換の相手が2つの場合は、最初はlastPhase
フラグをfalse
に設定し、2回目はtrue
に設定して、doPhase
を2回呼び出す必要があります。 キー交換の相手の数は任意です。
Javaプラットフォームの実装は、すべて次の標準のKeyAgreement
アルゴリズムをサポートする必要があります。
DiffieHellman
- 導入されたバージョン:
- 1.4
- 関連項目:
KeyGenerator
,SecretKey
-
コンストラクタのサマリー
コンストラクタ 修飾子 コンストラクタ 説明 protected
KeyAgreement(KeyAgreementSpi keyAgreeSpi, Provider provider, String algorithm)
KeyAgreementオブジェクトを生成します。 -
メソッドのサマリー
修飾子と型 メソッド 説明 Key
doPhase(Key key, boolean lastPhase)
このキー合意に関係する相手のだれかから受け取った、指定されたキーを使用してこのキー合意の次の段階を実行します。byte[]
generateSecret()
共有の秘密情報を生成して新しいバッファ内に返します。int
generateSecret(byte[] sharedSecret, int offset)
共有の秘密情報を生成して、offset
から始まるsharedSecret
バッファ内に格納します。SecretKey
generateSecret(String algorithm)
共有の秘密情報を作成して、それを指定されたアルゴリズムのSecretKey
オブジェクトとして返します。String
getAlgorithm()
このKeyAgreement
オブジェクトのアルゴリズム名を返します。static KeyAgreement
getInstance(String algorithm)
指定したキー合意アルゴリズムを実装するKeyAgreement
オブジェクトを返します。static KeyAgreement
getInstance(String algorithm, String provider)
指定したキー合意アルゴリズムを実装するKeyAgreement
オブジェクトを返します。static KeyAgreement
getInstance(String algorithm, Provider provider)
指定したキー合意アルゴリズムを実装するKeyAgreement
オブジェクトを返します。Provider
getProvider()
このKeyAgreement
オブジェクトのプロバイダを返します。void
init(Key key)
指定されたキーでこのキー合意を初期化します。これには、このキー合意に必要なすべてのアルゴリズム・パラメータを含める必要があります。void
init(Key key, SecureRandom random)
指定されたキーと乱数発生の元でこのキー合意を初期化します。void
init(Key key, AlgorithmParameterSpec params)
指定されたキーとアルゴリズム・パラメータのセットを使用してこのキー合意を初期化します。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
オブジェクトを返します。このメソッドは、最優先のProviderから順に、登録済みのセキュリティProviderのリストをトラバースします。 指定されたアルゴリズムをサポートする最初のプロバイダのKeyAgreementSpi実装をカプセル化する新しいKeyAgreementオブジェクトが返されます。
登録済みプロバイダのリストは、
Security.getProviders()
メソッド経由で取得できます。- 実装上の注意:
- JDKリファレンス実装では、
jdk.security.provider.preferred
Security
プロパティを使用して、指定されたアルゴリズムの優先プロバイダの順序を決定します。 これは、Security.getProviders()
によって返されるプロバイダの順序とは異なる場合があります。 - パラメータ:
algorithm
- 要求されたキー合意アルゴリズムの標準名。 標準アルゴリズム名については、「Javaセキュリティ標準アルゴリズム名指定」のKeyAgreementセクションを参照してください。- 戻り値:
- 新しい
KeyAgreement
オブジェクト - 例外:
NoSuchAlgorithmException
-Provider
が、指定されたアルゴリズムのKeyAgreementSpi
実装をサポートしていない場合NullPointerException
-algorithm
がnull
である場合- 関連項目:
Provider
-
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
である場合- 関連項目:
Provider
-
getInstance
public static final KeyAgreement getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException指定したキー合意アルゴリズムを実装するKeyAgreement
オブジェクトを返します。指定されたProviderオブジェクトからのKeyAgreementSpiの実装をカプセル化する新しいKeyAgreementオブジェクトが返されます。 指定されたProviderオブジェクトは、プロバイダ・リストに登録する必要はありません。
- パラメータ:
algorithm
- 要求されたキー合意アルゴリズムの標準名。 標準アルゴリズム名については、「Javaセキュリティ標準アルゴリズム名指定」のKeyAgreementセクションを参照してください。provider
- プロバイダ- 戻り値:
- 新しい
KeyAgreement
オブジェクト - 例外:
IllegalArgumentException
-provider
がnull
の場合NoSuchAlgorithmException
- 指定されたProviderオブジェクトから指定されたアルゴリズムのKeyAgreementSpi
実装を使用できない場合NullPointerException
-algorithm
がnull
である場合- 関連項目:
Provider
-
getProvider
public final Provider getProvider()このKeyAgreement
オブジェクトのプロバイダを返します。- 戻り値:
- この
KeyAgreement
オブジェクトのプロバイダ
-
init
public final void init(Key key) throws InvalidKeyException指定されたキーでこのキー合意を初期化します。これには、このキー合意に必要なすべてのアルゴリズム・パラメータを含める必要があります。このキー合意が乱数バイトを必要とする場合は、インストールされているプロバイダのうち、もっとも優先順位の高いプロバイダの
SecureRandom
の実装を乱数発生の元として使用して乱数バイトを取得します。 SecureRandomを提供するプロバイダが1つもインストールされていない場合は、システムが提供する乱数発生の元が使用されます。- パラメータ:
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を提供するプロバイダが1つもインストールされていない場合は、システムが提供する乱数発生の元が使用されます。- パラメータ:
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
- 共有の秘密キーデータを使用して、指定されたアルゴリズムの秘密キーを生成できない場合(キー・データが短すぎるなど)
-