Класс 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
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
SignedObject |
Создаёт SignedObject из любого сериализуемого объекта. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
String |
getAlgorithm() |
Возвращает имя алгоритма подписи. |
Object |
getObject() |
Возвращает инкапсулированный объект. |
byte[] |
getSignature() |
Возвращает подпись на подписанном объекте в виде массива байтов. |
boolean |
verify |
Проверяет, является ли подпись в этом SignedObject действительной подписью для объекта, хранящегося внутри, с заданным ключом проверки, используя указанный движок проверки. |
Подробное описание конструкторов
SignedObject
public SignedObject(Serializable object, PrivateKey signingKey, Signature signingEngine) throws IOException, InvalidKeyException, SignatureException
- Параметры:
-
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
- Параметры:
-
verificationKey- открытый ключ для проверки. -
verificationEngine- движок проверки подписи. - Возвращает:
-
trueесли подпись действительна,falseв противном случае - Исключения:
-
SignatureException- если проверка подписи не удалась (исключение предотвратило нормальное завершение работы движка проверки подписи). -
InvalidKeyException- если ключ проверки недействителен.
© 1993, 2021, 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/17/docs/api/java.base/java/security/SignedObject.html