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

Уведомление

Icon
Error

5 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline aekimtsov  
#1 Оставлено : 4 июня 2012 г. 18:51:50(UTC)
aekimtsov

Статус: Участник

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

Здравствуйте. Требуется проверить в JCP подпись сделанную на CSP.
Подпись в CSP проверяется успешно, однако, на JCP всегда возвращается false.
Вот пример кода:

//Снимаю хэш с тестовой строки
final String SAMPLE_TEXT_1 = "Some Data 1";
final MessageDigest digest = MessageDigest.getInstance("GOST3411");
digest.update(SAMPLE_TEXT_1.getBytes("UTF-8"));
byte[] digestResult1 = digest.digest();

// читаю публичный ключ из файла сертификата
InputStream inStream = new FileInputStream("c:/certnew.cer");
X509Certificate cert = X509Certificate.getInstance(inStream);
inStream.close();
PublicKey publicKey = cert.getPublicKey();


//Конвертирую полученную со стороны CSP подпись из base64
byte[] signature = Base64.decodeBase64("elxux7JzIdHS8Zqx+8AyuA+2GGNDvxTfC3XQT7PhFPwrXs5sCJaJqwkmfnsXK7N63IZreVO71vvfzI4rnWVb7w==");

//Инициирую проверку
final Signature sig = Signature.getInstance("CryptoProSignature");
sig.initVerify(publicKey);
sig.update(digestResult1);


//Здесь всегда получаю false
boolean verify = sig.verify(signature);


Подскажите пожалуйста, где ещё искать грабли?
Offline Евгений Афанасьев  
#2 Оставлено : 4 июня 2012 г. 19:30:00(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Здравствуйте.
Попробуйте развернуть подпись.
http://www.cryptopro.ru/....aspx?g=posts&t=1035
http://www.cryptopro.ru/....aspx?g=posts&t=4625
Offline aekimtsov  
#3 Оставлено : 4 июня 2012 г. 19:56:00(UTC)
aekimtsov

Статус: Участник

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

Спасибо за быстрый ответ.
Попробовал инвертировать массив байт подписи. Не помогло.
Как я понял из последнего поста отсюда: http://www.cryptopro.ru/....aspx?g=posts&t=1035 , инвертировать подпись нужно в случае использования GOST3411withGOST3410EL вместо CryptoProSignature. Однако я инициирую подпись с правильным параметром CryptoProSignature и по идее не должен её инвертировать. В любом случае, к сожалению, это не помогло.
Offline Евгений Афанасьев  
#4 Оставлено : 4 июня 2012 г. 20:28:16(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
А хешы с данных в csptest и jcp сходятся?
Offline aekimtsov  
#5 Оставлено : 4 июня 2012 г. 20:41:51(UTC)
aekimtsov

Статус: Участник

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

Не знаю на счёт csptest (этим занимается разрабочик со стороны C++), но совпадение хэшей проверяли. То есть снятие хэша со строки "Some Data 1" даёт одинаковый результат в CSP и JCP.
Offline Евгений Афанасьев  
#6 Оставлено : 4 июня 2012 г. 21:39:07(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Пробовали проверить, используя GOST3411withGOST3410EL?
Offline aekimtsov  
#7 Оставлено : 4 июня 2012 г. 21:48:34(UTC)
aekimtsov

Статус: Участник

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

Спасибо за внимание к теме :)
Да, пробовал. Результата не дало. Вообще, форум проштудировал внимательно. Но мог и пропустить что нибудь, так что буду рад опробовать все Ваши советы.
Offline Евгений Афанасьев  
#8 Оставлено : 4 июня 2012 г. 22:23:07(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Попробуйте сделать наоборот, сформировать подпись в jcp и проверить в csp (csptest), убирать getBytes("UTF-8") вы, вероятно, пробовали; попробуйте подать данные в sig.update, а не хэш.
Напишите, какую jre вы используете, ОС, версию jcp.

Отредактировано пользователем 4 июня 2012 г. 22:25:23(UTC)  | Причина: Не указана

Offline ah  
#9 Оставлено : 6 июня 2012 г. 22:02:17(UTC)
ah

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

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

Здравствуйте, пробовали сделать наоборот - создаем подпись в jcp, я проверяю в csp - результат тот же - false

все необходимое для работы проверено, поэтому привожу код непосредственно по работе с принятыми данными


FILE *hFile;
BYTE rgbFile[BUFSIZE];
DWORD cbRead = 0;
BOOL bResult = false;
HCRYPTKEY hPubKey;


hFile = fopen("/media/58FF-9FCC/newCertificate.cer", "r+b");

if(hFile)
printf("The file was opened successfully\n");
else
printf("The error of file opening");

do
{
cbRead = (DWORD)fread(rgbFile, 1, BUFSIZE, hFile);
if(!cbRead)
{
bResult = TRUE;
break;
}
}
while(!feof(hFile));

printf("Number of items read is %d \n", cbRead);

if (pSignerCert = CertCreateCertificateContext(CERT_TYPE, rgbFile, cbRead))
{
printf("a new certificate has been created\n");
if(CryptImportPublicKeyInfo(hProv, CERT_TYPE, &(pSignerCert->pCertInfo->SubjectPublicKeyInfo), &hPubKey))
printf("import was successfully performed\n");
else
{ printf("import was bad");
return -1;
}

unsigned char* sign = NULL;
int leng;
std::string inp = "aba7cc287acbf39a593594f6060930530553413d58c5bb974dd179590c8680ef3bac67bdc27822f7a4437b9468eece2c366bd2231073e61d0feb20fa34f6d997";
//подпись
std::cout << inp.length() << std::endl;
string_to_bytearray(inp, sign, leng);
for(i = 0 ; i < leng ; i++)
{
printf("%02x ",sign[i]); //делаю для проверки функции, которую взял со сторонних сайтов ибо родной такой функции нет - как будет видно по выводу - рез-т //аналогичен
}

if (!CryptVerifySignature(hHash, (BYTE*) sign, (DWORD) leng, hPubKey, 0, 0)) {
printf("\nvse ploho");
return -1;
}

delete[] sign;



Вывод работы:

The file was opened successfully
Number of items read is 787
a new certificate has been created
import was successfully performed
128
ab a7 cc 28 7a cb f3 9a 59 35 94 f6 06 09 30 53 05 53 41 3d 58 c5 bb 97 4d d1 79 59 0c 86 80 ef 3b ac 67 bd c2 78 22 f7 a4 43 7b 94 68 ee ce 2c 36 6b d2 23 10 73 e6 1d 0f eb 20 fa 34 f6 d9 97
vse ploho


Как видно - импорт ключа открытого из сертификата, присланного мне коллегой, прошел успешно...hHash - хэндл хэша снятого с той же строки "Some Data 1", однако проверка подписи возвращает FALSE

Буду очень признателен за любую оказанную помощь!!
Offline aekimtsov  
#10 Оставлено : 7 июня 2012 г. 0:46:44(UTC)
aekimtsov

Статус: Участник

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

ah написал:
Здравствуйте, пробовали сделать наоборот - создаем подпись в jcp, я проверяю в csp - результат тот же - false

К обсуждению ветки подключился наш разработчик со стороны C++ ))), вдвоём мы точно всем мозг вынесем )

afev написал:
Попробуйте сделать наоборот, сформировать подпись в jcp и проверить в csp (csptest), убирать getBytes("UTF-8") вы, вероятно, пробовали; попробуйте подать данные в sig.update, а не хэш.
Напишите, какую jre вы используете, ОС, версию jcp.

Убирать getBytes("UTF-8") пробовал, подавать на вход данные вместо хэша - тоже.

Версия Java:
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)

ОС: Windows 7 6.1.7601 SP1 64 разрядная

JCP:
jcp.1.0.52

Ключевую пару на JCP я генерировал по "GOST3410", выгружал сертификат как в примере userSamples.Certificates.java
Код, если нужно, могу выложить.

Отредактировано пользователем 7 июня 2012 г. 0:48:57(UTC)  | Причина: Не указана

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