Spec-Zone.ru › OpenJDK 24

Класс KEM

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

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

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

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

Объекты Encapsulator и Decapsulator также неизменяемы. Безопасно вызывать несколько методов encapsulate и decapsulate для одного и того же объекта Encapsulator или Decapsulator одновременно. Каждый вызов 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

Краткое описание вложенных классов

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

Методы, объявленные в классе java.lang.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 в Спецификации стандартных имён алгоритмов Java Security для получения информации о стандартных именах алгоритмов KEM.
Возвращаемое значение:
новый объект KEM
Исключения:
NoSuchAlgorithmException - если ни один Provider не поддерживает реализацию KEM для указанного алгоритма
NullPointerException - если algorithm является null

getInstance

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

getInstance

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

newEncapsulator

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

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

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

newEncapsulator

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

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

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

newEncapsulator

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

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

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

newDecapsulator

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

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

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

newDecapsulator

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

getAlgorithm

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

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/javax/crypto/KEM.html

Spec-Zone.ru

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