Spec-Zone.ru › OpenJDK 8

Класс 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 могут быть использованы для построения логической последовательности подписей, напоминающей цепочку авторизации и делегирования.
См. также:
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, 2020, 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