クラス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を起動するたびに、新しい共有シークレットおよびキー・カプセル化メッセージが生成されます。

架空のKEMアルゴリズムABCを使用した操作の例:

    // Receiver side
    KeyPairGenerator g = KeyPairGenerator.getInstance("ABC");
    KeyPair kp = g.generateKeyPair();
    publishKey(kp.getPublic());

    // Sender side
    KEM senderKEM = KEM.getInstance("ABC");
    PublicKey receiverPublicKey = retrieveKey();
    ABCKEMParameterSpec senderSpec = new ABCKEMParameterSpec(args);
    KEM.Encapsulator e = senderKEM.newEncapsulator(
            receiverPublicKey, senderSpec, null);
    KEM.Encapsulated enc = e.encapsulate();
    SecretKey senderSecret = enc.key();

    sendBytes(enc.encapsulation());
    sendBytes(enc.params());

    // Receiver side
    byte[] ciphertext = receiveBytes();
    byte[] params = receiveBytes();

    KEM receiverKEM = KEM.getInstance("ABC");
    AlgorithmParameters algParams =
            AlgorithmParameters.getInstance("ABC");
    algParams.init(params);
    ABCKEMParameterSpec receiverSpec =
            algParams.getParameterSpec(ABCKEMParameterSpec.class);
    KEM.Decapsulator d =
            receiverKEM.newDecapsulator(kp.getPrivate(), receiverSpec);
    SecretKey receiverSecret = d.decapsulate(ciphertext);

    // senderSecret and receiverSecret should now be equal.

導入されたバージョン:
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オブジェクトのアルゴリズムの名前。