モジュール 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