Spec-Zone.ru › OpenJDK 25

Класс 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 (например, для сохранения критически важных данных управления доступом на диске).
  • Вложенные объекты SignedObject можно использовать для построения логической последовательности подписей, напоминающей цепочку авторизации и делегирования.
Начиная с версии:
1.2
См. также:
  • Signature
  • Сериализованное представление

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

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

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

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

Методы, объявленные в классе 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 — если ключ проверки недействителен.

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по 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/java/security/SignedObject.html

Spec-Zone.ru

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