Класс 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
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, 2023, 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/21/docs/api/java.base/java/security/SignedObject.html