モジュール java.base
パッケージ javax.crypto

クラスKEM

java.lang.Object
javax.crypto.KEM

public final class KEM extends Object
このクラスは、キー・カプセル化メカニズム(KEM)の機能を提供します。 KEMを使用すると、2つの関係者間の非対称キーまたは公開キー暗号化を使用して対称キーをセキュリティ保護できます。 送信者は、encapsulateメソッドを呼び出して秘密キーとキーのカプセル化メッセージを生成し、レシーバはdecapsulateメソッドを呼び出して、同じ秘密キーをキーのカプセル化メッセージから回復します。

getInstanceメソッドは、指定されたアルゴリズムを実装する新しいKEMオブジェクトを作成します。

KEMオブジェクトは不変です。 同じKEMオブジェクトで複数のnewEncapsulatorメソッドとnewDecapsulatorメソッドを同時に呼び出すことは安全です。

KEMオブジェクトのインスタンス化時にgetInstanceメソッドでプロバイダが指定されていない場合、newEncapsulatorおよびnewDecapsulatorメソッドは、異なるプロバイダからエンカプセレータまたはデカプセレータを戻すことができます。 選択したプロバイダは、newEncapsulatorまたはnewDecapsulatorメソッドに渡されるパラメータに基づきます: 秘密キーまたは公開キーおよびオプションのAlgorithmParameterSpec KEM.Encapsulator.providerName()およびKEM.Decapsulator.providerName()メソッドは、選択したプロバイダの名前を返します。

EncapsulatorおよびDecapsulatorオブジェクトも不変です。 同じEncapsulatorまたはDecapsulatorオブジェクトに対して複数のencapsulateメソッドとdecapsulateメソッドを同時に起動することは安全です。 encapsulateを起動するたびに、新しい共有シークレットおよびキー・カプセル化メッセージが生成されます。

例:

   // Receiver side
   var kpg = KeyPairGenerator.getInstance("X25519");
   var kp = kpg.generateKeyPair();

   // Sender side
   var kem1 = KEM.getInstance("DHKEM");
   var sender = kem1.newEncapsulator(kp.getPublic());
   var encapsulated = sender.encapsulate();
   var k1 = encapsulated.key();

   // Receiver side
   var kem2 = KEM.getInstance("DHKEM");
   var receiver = kem2.newDecapsulator(kp.getPrivate());
   var k2 = receiver.decapsulate(encapsulated.encapsulation());

   assert Arrays.equals(k1.getEncoded(), k2.getEncoded());

導入されたバージョン:
21
  • メソッドの詳細

    • getInstance

      public static KEM getInstance(String algorithm) throws NoSuchAlgorithmException
      指定されたアルゴリズムを実装するKEMオブジェクトを返します。
      パラメータ:
      algorithm - KEMアルゴリズムの名前。 標準のKEMアルゴリズム名の詳細は、「Javaセキュリティ標準アルゴリズム名仕様」KEMの項を参照してください。
      戻り値:
      新しいKEMオブジェクト
      例外:
      NoSuchAlgorithmException - Providerが、指定されたアルゴリズムのKEM実装をサポートしていない場合
      NullPointerException - algorithmnullである場合
    • getInstance

      public static KEM getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
      指定されたセキュリティ・プロバイダから指定されたアルゴリズムを実装するKEMオブジェクトを返します。
      パラメータ:
      algorithm - KEMアルゴリズムの名前。 標準のKEMアルゴリズム名の詳細は、「Javaセキュリティ標準アルゴリズム名仕様」KEMの項を参照してください。
      provider - プロバイダ nullの場合、このメソッドはgetInstance(String)と同等です。
      戻り値:
      新しいKEMオブジェクト
      例外:
      NoSuchAlgorithmException - providerが指定され、指定されたKEMアルゴリズムをサポートしない場合、またはprovidernullであり、指定されたアルゴリズムのKEM実装をサポートするプロバイダが存在しない場合
      NullPointerException - algorithmnullである場合
    • getInstance

      public static KEM getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
      指定されたセキュリティ・プロバイダから指定されたアルゴリズムを実装するKEMオブジェクトを返します。
      パラメータ:
      algorithm - KEMアルゴリズムの名前。 標準のKEMアルゴリズム名の詳細は、「Javaセキュリティ標準アルゴリズム名仕様」KEMの項を参照してください。
      provider - プロバイダ nullの場合、このメソッドはgetInstance(String)と同等です。
      戻り値:
      新しいKEMオブジェクト
      例外:
      NoSuchAlgorithmException - providerが指定され、指定されたKEMアルゴリズムをサポートしない場合、またはprovidernullであり、指定されたアルゴリズムのKEM実装をサポートするプロバイダが存在しない場合
      NoSuchProviderException - 指定されたプロバイダがセキュリティ・プロバイダ・リストに登録されていない場合
      NullPointerException - algorithmnullである場合
    • newEncapsulator

      public KEM.Encapsulator newEncapsulator(PublicKey publicKey) throws InvalidKeyException
      KEMセンダー側にKEMエンカプセレータを作成します。

      このメソッドはnewEncapsulator(publicKey, null, null)と同等です。

      パラメータ:
      publicKey - レシーバの公開キーは、nullにできません
      戻り値:
      このキーのエンカプセレータ
      例外:
      InvalidKeyException - publicKeynullまたは無効な場合
      UnsupportedOperationException - AlgorithmParameterSpecを指定する必要があるため、このメソッドがサポートされていない場合
    • newEncapsulator

      public KEM.Encapsulator newEncapsulator(PublicKey publicKey, SecureRandom secureRandom) throws InvalidKeyException
      KEMセンダー側にKEMエンカプセレータを作成します。

      このメソッドはnewEncapsulator(publicKey, null, secureRandom)と同等です。

      パラメータ:
      publicKey - レシーバの公開キーは、nullにできません
      secureRandom - カプセル化のランダム性のソース。 nullの場合、実装のデフォルトが使用されます。
      戻り値:
      このキーのエンカプセレータ
      例外:
      InvalidKeyException - publicKeynullまたは無効な場合
      UnsupportedOperationException - AlgorithmParameterSpecを指定する必要があるため、このメソッドがサポートされていない場合
    • newEncapsulator

      KEMセンダー側にKEMエンカプセレータを作成します。

      アルゴリズムでは、AlgorithmParameterSpec子クラスを定義して、このメソッドに追加情報を提供できます。 これは、同じキーを使用して様々な方法で共有シークレットを導出できる場合に特に役立ちます。 このオブジェクト内の追加情報をキー・カプセル化メッセージとともに送信して、レシーバが一致するデカプセレータを作成できるようにする必要がある場合は、カプセル化出力内のKEM.Encapsulated.paramsフィールドにバイト配列として含められます。 この場合、セキュリティ・プロバイダは、KEMと同じアルゴリズム名を使用してAlgorithmParameters実装を提供する必要があります。 受信側は、受信したparamsバイト配列でこのようなAlgorithmParametersインスタンスを開始し、newDecapsulator(PrivateKey, AlgorithmParameterSpec)コールで使用されるAlgorithmParameterSpecオブジェクトをリカバリできます。

      パラメータ:
      publicKey - レシーバの公開キーは、nullにできません
      spec - オプションのパラメータは、nullです
      secureRandom - カプセル化のランダム性のソース。 nullの場合、実装のデフォルトが使用されます。
      戻り値:
      このキーのエンカプセレータ
      例外:
      InvalidAlgorithmParameterException - specが無効であるか、または1つが必要だがspecnullの場合
      InvalidKeyException - publicKeynullまたは無効な場合
    • newDecapsulator

      public KEM.Decapsulator newDecapsulator(PrivateKey privateKey) throws InvalidKeyException
      KEMレシーバ側にKEMデカプセレータを作成します。

      このメソッドはnewDecapsulator(privateKey, null)と同等です。

      パラメータ:
      privateKey - レシーバの秘密キーは、nullにできません
      戻り値:
      このキーのデカプセレータ
      例外:
      InvalidKeyException - privateKeynullまたは無効な場合
      UnsupportedOperationException - AlgorithmParameterSpecを指定する必要があるため、このメソッドがサポートされていない場合
    • newDecapsulator

      KEMレシーバ側にKEMデカプセレータを作成します。
      パラメータ:
      privateKey - レシーバの秘密キーは、nullにできません
      spec - パラメータはnullです
      戻り値:
      このキーのデカプセレータ
      例外:
      InvalidAlgorithmParameterException - specが無効であるか、または1つが必要だがspecnullの場合
      InvalidKeyException - privateKeynullまたは無効な場合
    • getAlgorithm

      public String getAlgorithm()
      このKEMオブジェクトのアルゴリズムの名前を返します。
      戻り値:
      このKEMオブジェクトのアルゴリズムの名前。