Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline snikolay  
#1 Оставлено : 22 ноября 2023 г. 12:05:32(UTC)
snikolay

Статус: Новичок

Группы: Участники
Зарегистрирован: 22.11.2023(UTC)
Сообщений: 1

Добрый день.

ОС Ubuntu. CSP 5.0, JCP 2.0.42646.

С помощью КриптоАрм создана связка открытого и закрытого ключа и помещена в хранилище следующей командой:
Цитата:
/opt/cprocsp/bin/amd64/certmgr -install -pfx -file file.pfx -pin ...


На Java реализован функционал подписи текста. Нужно через вызов cryptcp делать верификацию этой подписи.

Закрытый и открытый ключи беру из хранилища:

Цитата:
KeyStore keyStore = KeyStore.getInstance("HDImageStore", "JCP");
KeyStore.ProtectionParameter protectedParam = new KeyStore.PasswordProtection(password.toCharArray());
JCPPrivateKeyEntry entry = (JCPPrivateKeyEntry) keyStore.getEntry(alias, protectedParam);
PrivateKey privateKey = entry.getPrivateKey();
PublicKey publicKeyStore = entry.getCertificate().getPublicKey();


Подпись осуществляется следующим набором команд:

Цитата:
Signature sig = Signature.getInstance(JCP.CRYPTOPRO_SIGN_2012_512_NAME);
sig.initSign(privateKey);
sig.update(dataBytesToSign);
byte[] signedBytes = sig.sign();



Сохранение подписи в файл:

Цитата:
File signFile = new File(signFileName);
try (FileOutputStream outputStream = new FileOutputStream(signFile)) {
outputStream.write(signedBytes);
}



Проверка подписи в Java для тестов осуществляется следующим набором команд:

Цитата:
Signature publicSignature = Signature.getInstance(JCP.CRYPTOPRO_SIGN_2012_512_NAME);
publicSignature.initVerify(publicKeyStore);
publicSignature.update(signedBytes);
boolean isVerified = publicSignature.verify(dataBytesToSign);


Результат верификации - true.

Если эту подпись проверить следующей командой:

Цитата:
/opt/cprocsp/bin/amd64/cryptcp -vsignf -norev -f public_key.cer file_to_sign.xml
(public_key.cer - открытый ключ, file_to_sign.xml - содержимое для подписи. Предварительно в директорию с данными файлами добавляется файл file_to_sign.xml.sgn , содержащий подпись, полученную в Java).

то выдается ошибка:

Цитата:
Signature verifying... [ErrorCode: 0xffffffff]


Если сделать подпись командой:

Цитата:
/opt/cprocsp/bin/amd64/cryptcp -sign -detach -der file_to_sign.xml file_to_sign.xml.sgn -nochain -norev
и повторно вызвать команду выше cryptcp -vsignf, то проверка проходит успешно.

Читал данный пост - https://www.cryptopro.ru...spx?g=posts&t=16921. Пробовал предварительно хэшировать массив байт текста и затем подписывать и верифицировать. В java проверка проходит, через cryptcp - нет.

Объясните, пожалуйста, с чем связана проблема верификации подписи в cryptcp и как ее устранить?

Отредактировано пользователем 22 ноября 2023 г. 12:39:31(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 22 ноября 2023 г. 19:05:11(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,927
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Здравствуйте.
Signature создает "голую" подпись (64/128 байт), а вам надо, скорее всего, CMS или CAdES.
См. примеры в пакете samples-sources.jar/CAdES или samples-sources.jar/CMS_samples (класс CMSSign).
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.