Класс 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
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
SignedObject |
Создает SignedObject из любого сериализуемого объекта. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
String |
getAlgorithm() |
Возвращает имя алгоритма подписи. |
Object |
getObject() |
Возвращает инкапсулированный объект. |
byte[] |
getSignature() |
Возвращает подпись подписанного объекта в виде массива байтов. |
boolean |
verify |
Проверяет, является ли подпись в этом SignedObject действительной подписью объекта, хранящегося внутри, с помощью указанного ключа проверки и заданного механизма проверки. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
boolean |
equals |
Показывает, равен ли другой объект этому объекту. |
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 |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt либо по истечении определенного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова 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— если ключ проверки недействителен.
© 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.