クラスKeyAgreement

java.lang.Object
javax.crypto.KeyAgreement

public class KeyAgreement extends Object
このクラスは、キーの合意プロトコル、つまりキーの交換プロトコルの機能を提供します。

共有の秘密の確立に関係するキーは、キー・ジェネレータのいずれか(KeyPairGeneratorまたはKeyGenerator)かKeyFactoryによって、またはキー協定プロトコルの中間フェーズの結果として作成されます。

キー交換の対応関係ごとに、doPhaseを呼び出す必要があります。 たとえば、キー交換の相手が1つの 合は、lastPhaseフラグをtrueに設定してdoPhaseを1回呼び出す必要があります。 キー交換の相手が2つの 合は、最初はlastPhaseフラグをfalseに設定し、2回目はtrueに設定して、doPhaseを2回呼び出す必要があります。 キー交換の相手の数は任意です。 た し、2つ以上のパーティを持つキー交換のサポートは、実装固有であるか、標準キー契約アルゴリズ で指定されています。

Javaプラットフォー の実装は、すべて次の標準のKeyAgreementアルゴリズ をサポートする必要があります。

  • DiffieHellman
このアルゴリズ は、Javaセキュリティ標準アルゴリズ 名仕様の「KeyAgreementセクション」で説明されています。 サポートされているその他のアルゴリズ については、実装のリリース・ドキュメントを参照してく さい。

導入されたバージョン:
1.4
関連 目:
  • コンストラクタのサマリー

    コンストラクタ
    修飾子
    コンストラクタ
    説明
    protected
    KeyAgreement(KeyAgreementSpi keyAgreeSpi, Provider provider, String algorithm)
    KeyAgreementオブジェクトを作成します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    final Key
    doPhase(Key key, boolean lastPhase)
    このキー合意に関係する相手の れかから受け取った、指定されたキーを使用してこのキー合意の次の段階を実行します。
    final byte[]
    共有の秘密情 を生成して新しいバッファ内に返します。
    final int
    generateSecret(byte[] sharedSecret, int offset)
    共有の秘密情 を生成して、offsetから始まるsharedSecretバッファ内に 納します。
    final SecretKey
    共有の秘密情 を作成して、それを指定されたアルゴリズ の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
    init(Key key)
    指定されたキーでこのキー合意を初期化します。これには、このキー合意に必要なすべてのアルゴリズ ・パラメータを含める必要があります。
    final void
    init(Key key, SecureRandom random)
    指定されたキーと乱数発生の元でこのキー合意を初期化します。
    final void
    指定されたキーとアルゴリズ ・パラメータのセットを使用してこのキー合意を初期化します。
    final void
    指定されたキー、アルゴリズ ・パラメータのセット、および乱数発生の元を使用してこのキー合意を初期化します。

    クラスjava.lang.Objectで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • コンストラクタの詳細

    • 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 - algorithmnullである 合
      関連 目:
    • getInstance

      public static final KeyAgreement getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
      指定したキー合意アルゴリズ を実装するKeyAgreementオブジェクトを返します。

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

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

      パラメータ:
      algorithm - 要求されたキー合意アルゴリズ の標準名。 標準アルゴリズ 名の詳細は、「Javaセキュリティ標準アルゴリズ 名仕様」のKeyAgreementの を参照してく さい。
      provider - プロバイダ名。
      戻り値:
      新しいKeyAgreementオブジェクト
      スロー:
      IllegalArgumentException - providernullまたは空の 合
      NoSuchAlgorithmException - 指定されたアルゴリズ のKeyAgreementSpi実装が、指定されたプロバイダから利用可能でない 合
      NoSuchProviderException - 指定されたプロバイダがセキュリティ・プロバイダ・リストに登録されていない 合
      NullPointerException - algorithmnullである 合
      関連 目:
    • getInstance

      public static final KeyAgreement getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
      指定したキー合意アルゴリズ を実装するKeyAgreementオブジェクトを返します。

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

      パラメータ:
      algorithm - 要求されたキー合意アルゴリズ の標準名。 標準アルゴリズ 名の詳細は、「Javaセキュリティ標準アルゴリズ 名仕様」のKeyAgreementの を参照してく さい。
      provider - プロバイダ
      戻り値:
      新しいKeyAgreementオブジェクト
      スロー:
      IllegalArgumentException - providernullの 合
      NoSuchAlgorithmException - 指定されたアルゴリズ のKeyAgreementSpi実装が、指定されたProviderオブジェクトから使用できない 合
      NullPointerException - algorithmnullである 合
      関連 目:
    • 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

      指定されたキーとアルゴリズ ・パラメータのセットを使用してこのキー合意を初期化します。

      このキー合意が乱数バイトを必要とする 合は、インストールされているプロバイダのうち、もっとも優先 位の高いプロバイダの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 - 共有の秘密キー・マテリアルが、指定されたアルゴリズ の秘密キーを生成に使用できない 合 (キー・データが短すぎるなど)