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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline MIkhailF  
#1 Оставлено : 17 октября 2023 г. 16:34:12(UTC)
MIkhailF

Статус: Активный участник

Группы: Участники
Зарегистрирован: 17.08.2022(UTC)
Сообщений: 49
Российская Федерация
Откуда: Спб

Имеем такой код:
Signature signer = Signature.getInstance(algoName, JCP.PROVIDER_NAME);
signer.initSign(privateKey);
signer.update(msg.getBytes());
byte[] signature = signer.sign();
Signature validator = Signature.getInstance(algoName, JCP.PROVIDER_NAME);
validator.initVerify(publicKey);
validator.update(msg.getBytes());
boolean result = validator.verify(signature);
System.out.println("Signature verified: " + result);


Вопросы:
1. Что значит, если в result получили true?
2. Что значит, если в result получили false?

Поясню смысл вопроса. Если получили true, значит в соответствии с ключом и алгоритмом подпись была получена правильно? Можно ли быть в этом уверенным?
Если получили false, где может быть ошибка? Предполагается, что ключ и алгоритм указаны верно. Где ещё может быть ошибка
UPD. Было проведен следующий эксперимент
1. Определённую строку подписал на сайте КриптоПро(https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_bes_sample.html) некоторым сертификатом. Скопировал подпись в java код(перменная MSG1)
2. Далее был выполнен следующий код:

private byte[] signMessage(String algoName, PrivateKey privateKey, String msg) throws NoSuchProviderException, NoSuchAlgorithmException, InvalidKeyException, SignatureException, InvalidAlgorithmParameterException, UnsupportedEncodingException {
Signature signer = Signature.getInstance(algoName, JCP.PROVIDER_NAME);
signer.initSign(privateKey);
updateMsg(signer,getBytes(msg));
return signer.sign();
}

private boolean checkSigned(String algoName, PublicKey publicKey, String msg, byte[] signature) throws NoSuchProviderException, NoSuchAlgorithmException, InvalidKeyException, SignatureException {
boolean result;
Signature validator = Signature.getInstance(algoName, JCP.PROVIDER_NAME);
validator.initVerify(publicKey);
validator.update(getBytes(msg));
result = validator.verify(signature);
System.out.println("Signature verified: " + result);
return result;
}

....
byte[] signature = signMessage(algoName,pKey,uuidSt2);// ту же самую строку uuidSt2 подписал на сайте
checked = checkSigned(algoName,publicKey,uuidSt2,signature);
byte[] buf3 = Base64.getDecoder().decode(MSG1);
byte[] buf4 = new Decoder().decodeBuffer(new String(buf3));
byte[] buf5 = getBytes(MSG1);
checked3 = checkSigned(algoName,publicKey,uuidSt2,buf3);
checked4 = checkSigned(algoName,publicKey,uuidSt2,buf4);
checked5 = checkSigned(algoName,publicKey,uuidSt2,buf5);
В переменных checked3,checkedr4,checked5 cодержится false. В checked - true.
С надеждой на ответ,
Михаил

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

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.