Spec-Zone.ru › OpenJDK 27

Класс 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
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Показывает, равен ли другой объект этому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API может быть удален в будущей версии.
Финализация устарела и будет удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt либо по истечении определенного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt либо по истечении определенного промежутка реального времени.

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

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, 2026, 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.

Spec-Zone.ru

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