クラス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
  • ネストされたクラスのサマリー

    ネストされたクラス
    修飾子と型
    クラス
    説明
    static final class 
    KEMレシーバ側で newDecapsulator(PrivateKey)によって生成されるデカプセル。
    static final class 
    このクラスは、共有シークレット(SecretKeyとして)、キー・カプセル化メッセージおよびオプション・パラメータを含む、キー・カプセル化メカニズム(KEM)のカプセル化メソッドの戻り値を指定します。
    static final class 
    KEM送信側の newEncapsulator(PublicKey)によって生成されるカプセル化装置。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    このKEMオブジェクトのアルゴリズムの名前を返します。
    static KEM
    getInstance(String algorithm)
    指定されたアルゴリズムを実装するKEMオブジェクトを返します。
    static KEM
    getInstance(String algorithm, String provider)
    指定されたセキュリティ・プロバイダから指定されたアルゴリズムを実装するKEMオブジェクトを返します。
    static KEM
    getInstance(String algorithm, Provider provider)
    指定されたセキュリティ・プロバイダから指定されたアルゴリズムを実装するKEMオブジェクトを返します。
    KEMレシーバ側にKEMデカプセレータを作成します。
    KEMレシーバ側にKEMデカプセレータを作成します。
    KEMセンダー側にKEMエンカプセレータを作成します。
    newEncapsulator(PublicKey publicKey, SecureRandom secureRandom)
    KEMセンダー側にKEMエンカプセレータを作成します。
    KEMセンダー側にKEMエンカプセレータを作成します。

    クラスオブジェクトで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    修飾子と型
    メソッド
    説明
    protected Object
    このオブジェクトのコピーを作成して、返します。
    boolean
    このオブジェクトと他のオブジェクトが等しいかどうかを示します。
    protected void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は非推奨であり、将来のリリースで削除される可能性があります。
    final Class<?>
    このObjectの実行時クラスを返します。
    int
    このオブジェクトに対するハッシュ・コード値を返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    オブジェクトの文字列表現を返します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
  • メソッドの詳細

    • 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オブジェクトのアルゴリズムの名前。