Класс 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 runtime в качестве неоспоримого маркера авторизации — такого, который можно передавать без опасения, что маркер может быть злонамеренно изменён без обнаружения.
- Он может использоваться для подписи и сериализации данных/объектов для хранения вне Java runtime (например, для хранения критически важных данных управления доступом на диске).
- Вложенные 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 действительной подписью для объекта, хранящегося внутри, с заданным ключом проверки, используя указанный движок проверки. |
Методы, объявленные в классе 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/security/SignedObject.html