Spec-Zone.ru › OpenJDK 25

Класс KEM

java.lang.Object
javax.crypto.KEM
public final class KEM extends Object
Этот класс предоставляет функциональность механизма инкапсуляции ключей (KEM). KEM можно использовать для защиты симметричных ключей с помощью асимметричной криптографии или криптографии с открытым ключом при обмене между двумя сторонами. Отправитель вызывает метод инкапсуляции, чтобы сгенерировать секретный ключ и сообщение инкапсуляции ключа, а получатель вызывает метод декапсуляции, чтобы восстановить тот же секретный ключ из сообщения инкапсуляции ключа.

Метод getInstance создает новый объект KEM, реализующий указанный алгоритм.

Объект KEM неизменяем. Можно безопасно одновременно вызывать несколько методов newEncapsulator и newDecapsulator для одного и того же объекта KEM.

Если при создании объекта KEM в методе getInstance не указан поставщик, методы newEncapsulator и newDecapsulator могут возвращать инкапсуляторы или декапсуляторы от разных поставщиков. Выбранный поставщик зависит от параметров, переданных методам newEncapsulator или newDecapsulator: закрытого или открытого ключа и необязательного параметра AlgorithmParameterSpec. Методы KEM.Encapsulator.providerName() и KEM.Decapsulator.providerName() возвращают имя выбранного поставщика.

Объекты Encapsulator и Decapsulator также неизменяемы. Можно безопасно одновременно вызывать несколько методов encapsulate и decapsulate для одного и того же объекта Encapsulator или Decapsulator. Каждый вызов 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.Decapsulator
Декапсулятор, созданный методом newDecapsulator(PrivateKey) на стороне получателя KEM.
static final class  KEM.Encapsulated
Этот класс задает возвращаемое значение метода инкапсуляции механизма инкапсуляции ключей (KEM), которое включает общий секрет (в виде SecretKey), сообщение инкапсуляции ключа и необязательные параметры.
static final class  KEM.Encapsulator
Инкапсулятор, созданный методом newEncapsulator(PublicKey) на стороне отправителя KEM.

Краткое описание методов

Модификатор и тип Метод Описание
String getAlgorithm()
Возвращает имя алгоритма для этого объекта KEM.
static KEM getInstance(String algorithm)
Возвращает объект KEM, реализующий указанный алгоритм.
static KEM getInstance(String algorithm, String provider)
Возвращает объект KEM, реализующий указанный алгоритм от указанного поставщика средств безопасности.
static KEM getInstance(String algorithm, Provider provider)
Возвращает объект KEM, реализующий указанный алгоритм от указанного поставщика средств безопасности.
KEM.Decapsulator newDecapsulator(PrivateKey privateKey)
Создает декапсулятор KEM на стороне получателя KEM.
KEM.Decapsulator newDecapsulator(PrivateKey privateKey, AlgorithmParameterSpec spec)
Создает декапсулятор KEM на стороне получателя KEM.
KEM.Encapsulator newEncapsulator(PublicKey publicKey)
Создает инкапсулятор KEM на стороне отправителя KEM.
KEM.Encapsulator newEncapsulator(PublicKey publicKey, SecureRandom secureRandom)
Создает инкапсулятор KEM на стороне отправителя KEM.
KEM.Encapsulator newEncapsulator(PublicKey publicKey, AlgorithmParameterSpec spec, SecureRandom secureRandom)
Создает инкапсулятор KEM на стороне отправителя KEM.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание методов

getInstance

public static KEM getInstance(String algorithm) throws NoSuchAlgorithmException
Возвращает объект KEM, реализующий указанный алгоритм.
Параметры:
algorithm — имя алгоритма KEM. Сведения о стандартных именах алгоритмов KEM см. в разделе KEM документации Спецификация стандартных имен алгоритмов Java Security.
Возвращает:
новый объект KEM
Исключения:
NoSuchAlgorithmException — если ни один Provider не поддерживает реализацию KEM для указанного алгоритма
NullPointerException — если algorithm имеет значение null
Внешние спецификации
  • Стандартные имена алгоритмов Java Security

getInstance

public static KEM getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
Возвращает объект KEM, реализующий указанный алгоритм от указанного поставщика средств безопасности.
Параметры:
algorithm — имя алгоритма KEM. Сведения о стандартных именах алгоритмов KEM см. в разделе KEM документации Спецификация стандартных имен алгоритмов Java Security.
provider — поставщик. Если null, этот метод эквивалентен методу getInstance(String).
Возвращает:
новый объект KEM
Исключения:
NoSuchAlgorithmException — если указан provider и он не поддерживает указанный алгоритм KEM либо если provider имеет значение null и нет поставщика, поддерживающего реализацию KEM указанного алгоритма
NullPointerException — если algorithm имеет значение null
Внешние спецификации
  • Стандартные имена алгоритмов Java Security

getInstance

public static KEM getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
Возвращает объект KEM, реализующий указанный алгоритм от указанного поставщика средств безопасности.
Параметры:
algorithm — имя алгоритма KEM. Сведения о стандартных именах алгоритмов KEM см. в разделе KEM документации Спецификация стандартных имен алгоритмов Java Security.
provider — поставщик. Если null, этот метод эквивалентен методу getInstance(String).
Возвращает:
новый объект KEM
Исключения:
NoSuchAlgorithmException — если указан provider и он не поддерживает указанный алгоритм KEM либо если provider имеет значение null и нет поставщика, поддерживающего реализацию KEM указанного алгоритма
NoSuchProviderException — если указанный поставщик не зарегистрирован в списке поставщиков средств безопасности
NullPointerException — если algorithm имеет значение null
Внешние спецификации
  • Стандартные имена алгоритмов Java Security

newEncapsulator

public KEM.Encapsulator newEncapsulator(PublicKey publicKey) throws InvalidKeyException
Создает инкапсулятор KEM на стороне отправителя KEM.

Этот метод эквивалентен newEncapsulator(publicKey, null, null).

Параметры:
publicKey — открытый ключ получателя; не должен иметь значение null
Возвращает:
инкапсулятор для этого ключа
Исключения:
InvalidKeyException — если publicKey имеет значение null или недопустим
UnsupportedOperationException — если этот метод не поддерживается, поскольку необходимо предоставить AlgorithmParameterSpec

newEncapsulator

public KEM.Encapsulator newEncapsulator(PublicKey publicKey, SecureRandom secureRandom) throws InvalidKeyException
Создает инкапсулятор KEM на стороне отправителя KEM.

Этот метод эквивалентен newEncapsulator(publicKey, null, secureRandom).

Параметры:
publicKey — открытый ключ получателя; не должен иметь значение null
secureRandom — источник случайных данных для инкапсуляции. Если значение равно null, будет использоваться источник по умолчанию из реализации.
Возвращает:
инкапсулятор для этого ключа
Исключения:
InvalidKeyException — если publicKey имеет значение null или недопустим
UnsupportedOperationException — если этот метод не поддерживается, поскольку необходимо предоставить AlgorithmParameterSpec

newEncapsulator

public KEM.Encapsulator newEncapsulator(PublicKey publicKey, AlgorithmParameterSpec spec, SecureRandom secureRandom) throws InvalidAlgorithmParameterException, InvalidKeyException
Создает инкапсулятор KEM на стороне отправителя KEM.

Алгоритм может определить дочерний класс AlgorithmParameterSpec, чтобы предоставить дополнительные сведения в этом методе. Это особенно полезно, если один и тот же ключ можно использовать для получения общих секретов разными способами. Если какие-либо дополнительные сведения из этого объекта необходимо передать вместе с сообщением инкапсуляции ключа, чтобы получатель мог создать соответствующий декапсулятор, они будут включены в виде массива байтов, возвращаемого методом KEM.Encapsulated.params() в выходных данных инкапсуляции. В этом случае поставщик средств безопасности должен предоставить реализацию AlgorithmParameters с тем же именем алгоритма, что и у KEM. Получатель может создать такой экземпляр AlgorithmParameters с полученным массивом байтов params и восстановить объект AlgorithmParameterSpec для использования при вызове метода newDecapsulator(PrivateKey, AlgorithmParameterSpec).

Параметры:
publicKey — открытый ключ получателя; не должен иметь значение null
spec — необязательный параметр; может иметь значение null
secureRandom — источник случайных данных для инкапсуляции. Если значение равно null, будет использоваться источник по умолчанию из реализации.
Возвращает:
инкапсулятор для этого ключа
Исключения:
InvalidAlgorithmParameterException — если spec недопустим или если параметр необходим, но spec имеет значение null
InvalidKeyException — если publicKey имеет значение null или недопустим

newDecapsulator

public KEM.Decapsulator newDecapsulator(PrivateKey privateKey) throws InvalidKeyException
Создает декапсулятор KEM на стороне получателя KEM.

Этот метод эквивалентен newDecapsulator(privateKey, null).

Параметры:
privateKey — закрытый ключ получателя; не должен иметь значение null
Возвращает:
декапсулятор для этого ключа
Исключения:
InvalidKeyException — если privateKey имеет значение null или недопустим
UnsupportedOperationException — если этот метод не поддерживается, поскольку необходимо предоставить AlgorithmParameterSpec

newDecapsulator

public KEM.Decapsulator newDecapsulator(PrivateKey privateKey, AlgorithmParameterSpec spec) throws InvalidAlgorithmParameterException, InvalidKeyException
Создает декапсулятор KEM на стороне получателя KEM.
Параметры:
privateKey — закрытый ключ получателя; не должен иметь значение null
spec — параметр; может иметь значение null
Возвращает:
декапсулятор для этого ключа
Исключения:
InvalidAlgorithmParameterException — если spec недопустим или если параметр необходим, но spec имеет значение null
InvalidKeyException — если privateKey имеет значение null или недопустим

getAlgorithm

public String getAlgorithm()
Возвращает имя алгоритма для этого объекта KEM.
Возвращает:
имя алгоритма для этого объекта KEM.

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков с концептуальными обзорами, определениями терминов, обходными решениями и примерами работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/javax/crypto/KEM.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API