Spec-Zone.ru › OpenJDK 24

Класс SignedObject

java.lang.Object
java.security.SignedObject
Все реализуемые интерфейсы:
Serializable
public final class SignedObject extends Object implements Serializable

SignedObject — это класс для создания аутентичных объектов во время выполнения, чья целостность нельзя нарушить незамеченным.

Более конкретно, SignedObject содержит другой сериализуемый объект, подписываемый объект и его подпись.

Подписываемый объект — это «глубокая копия» (в сериализованной форме) исходного объекта. После создания копии дальнейшая модификация исходного объекта не повлияет на копию.

Базовый алгоритм подписи определяется объектом Signature, переданным в конструктор, и методом verify. Типичное использование для подписи выглядит следующим образом:


 Signature signingEngine = Signature.getInstance(algorithm,
                                                 provider);
 SignedObject so = new SignedObject(myobject, signingKey,
                                    signingEngine);
 

Типичное использование для проверки выглядит следующим образом (получив SignedObject so):


 Signature verificationEngine =
     Signature.getInstance(algorithm, provider);
 if (so.verify(publickey, verificationEngine))
     try {
         Object myobj = so.getObject();
     } catch (java.lang.ClassNotFoundException e) {};
 

Стоит отметить несколько моментов. Во-первых, нет необходимости инициализировать движок подписи или проверки, поскольку он будет повторно инициализирован внутри конструктора и метода verify. Во-вторых, для успешной проверки указанный открытый ключ должен соответствовать закрытому ключу, использованному для генерации SignedObject.

Более важно, что по соображениям гибкости конструктор и метод verify позволяют использовать настраиваемые движки подписи, которые могут реализовывать алгоритмы подписи, не установленные формально как часть криптопровайдера. Однако программист, пишущий код верификатора, должен понимать, какой движок Signature используется, так как его собственная реализация метода verify вызывается для проверки подписи. Другими словами, злонамеренный Signature может выбрать всегда возвращать true при проверке, пытаясь обойти проверку безопасности.

Алгоритм подписи может быть, среди прочих, стандартным NIST DSA, используя DSA и SHA-256. Алгоритм определяется с использованием той же конвенции, что и для подписей. Например, алгоритм DSA, использующий алгоритм дайджеста сообщений SHA-256, может быть указан как "SHA256withDSA". В случае RSA алгоритм подписи может быть указан, например, как "SHA256withRSA". Имя алгоритма должно быть указано, поскольку нет значения по умолчанию.

Имя провайдера пакета криптографии также определяется параметром Signature в конструкторе и методе verify. Если провайдер не указан, используется провайдер по умолчанию. Каждая установка может быть настроена на использование конкретного провайдера в качестве значения по умолчанию.

Возможные применения SignedObject включают:

  • Он может использоваться внутри любого Java-времени выполнения в качестве неподделываемого маркера авторизации — такого, который может передаваться без страха, что маркер может быть злонамеренно изменен незамеченным.
  • Он может использоваться для подписи и сериализации данных/объекта для хранения вне Java-времени выполнения (например, для хранения критических данных управления доступом на диске).
  • Вложенные SignedObjects могут использоваться для построения логической последовательности подписей, напоминающей цепочку авторизации и делегирования.
С момента:
1.2
См. также:
  • Signature
  • Сериализованная форма

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

Конструктор Описание
SignedObject(Serializable object, PrivateKey signingKey, Signature signingEngine)
Создает SignedObject из любого сериализуемого объекта.

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

Модификатор и тип Метод Описание
String getAlgorithm()
Возвращает имя алгоритма подписи.
Object getObject()
Возвращает инкапсулированный объект.
byte[] getSignature()
Возвращает подпись на подписанном объекте в виде массива байтов.
boolean verify(PublicKey verificationKey, Signature verificationEngine)
Проверяет, является ли подпись в этом SignedObject действительной подписью для хранящегося внутри объекта с заданным ключом проверки, используя выделенный движок проверки.

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

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

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

SignedObject

public SignedObject(Serializable object, PrivateKey signingKey, Signature signingEngine) throws IOException, InvalidKeyException, SignatureException
Создает SignedObject из любого сериализуемого объекта. Заданный объект подписывается с помощью заданного закрытого ключа, используя выделенный движок подписи.
Параметры:
object - подписываемый объект.
signingKey - закрытый ключ для подписи.
signingEngine - движок подписи.
Исключения:
IOException - если произошла ошибка при сериализации
InvalidKeyException - если ключ недействителен.
SignatureException - если подпись не удалась.

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

getObject

public Object getObject() throws IOException, ClassNotFoundException
Возвращает инкапсулированный объект. Инкапсулированный объект десериализуется перед возвращением.
Возвращает:
инкапсулированный объект.
Исключения:
IOException - если произошла ошибка при десериализации
ClassNotFoundException - если произошла ошибка при десериализации

getSignature

public byte[] getSignature()
Возвращает подпись на подписанном объекте в виде массива байтов.
Возвращает:
подпись. Возвращает новый массив каждый раз при вызове этого метода.

getAlgorithm

public String getAlgorithm()
Возвращает имя алгоритма подписи.
Возвращает:
имя алгоритма подписи.

verify

public boolean verify(PublicKey verificationKey, Signature verificationEngine) throws InvalidKeyException, SignatureException
Проверяет, является ли подпись в этом SignedObject действительной подписью для хранящегося внутри объекта с заданным ключом проверки, используя выделенный движок проверки.
Параметры:
verificationKey - открытый ключ для проверки.
verificationEngine - движок проверки подписи.
Возвращает:
true, если подпись действительна, false в противном случае
Исключения:
SignatureException - если проверка подписи не удалась (исключение предотвратило нормальное завершение работы движка проверки подписи).
InvalidKeyException - если ключ проверки недействителен.

© 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/java/security/SignedObject.html

Spec-Zone.ru

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