Статус: Новичок
Группы: Участники
Зарегистрирован: 19.12.2008(UTC) Сообщений: 9 Откуда: SPB
|
Мне необходимо сформировать подпись согласно следующим условиям:
ЭЦП формируется согласно требованиям ГОСТ Р 34.10-2001 ("Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи.") и ГОСТ Р 34.11-94 ("Информационная технология. Криптографическая защита информации. Функция хэширования."). Программный продукт КриптоПро CSP 2.0 компании Крипто-Про удовлетворяет указанным условиям. ЭЦП представляет собой строку, закодированную в BASE64 (RFC3548).
----------------- ЭЦП валидируется на платформе .Net. Наше приложение написано на Java. Для формирования подписи используется JCP1.0.42 Ключ и сертификат формируются следующими командами
%java_home%\bin\keytool -genkey -alias mcpjcp -keysize 512 -provider ru.CryptoPro.JCP.JCP -keypass xxx -keystore xxx.keystore -storepass xxx -keyalg GOST3410 -sigalg GOST3411withGOST3410EL -storetype HDImageStore -validity 10000
%java_home%\bin\keytool -export -alias mcpjcp -provider ru.CryptoPro.JCP.JCP -keypass xxx -storetype HDImageStore -keystore xxx.keystore -storepass xxx -sigalg GOST3411withGOST3410EL -file xxx.cer
Код на Java который формирует ЭЦП MessageDigest digest = MessageDigest.getInstance("GOST3411"); digest.update(signParameters.getText().getBytes()); byte[] result = digest.digest();
PrivateKey privateKey = getPrivateKey(signParameters); //загрузка ключа Signature signature = Signature.getInstance("CryptoProSignature"); signature.initSign(privateKey); signature.update(result); return SignUtil.encode(signEncodingType, signature.sign());
Проблема в том, что формируемая подпись не проходит валидацию. В чем может быть пролема? (в принципе есть код создания подписи на C, который использовался для отладки валидации)
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 23.01.2008(UTC) Сообщений: 207
Поблагодарили: 3 раз в 3 постах
|
на подпись нужно подавать непосредственно данные. см. документацию и примеры.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 19.12.2008(UTC) Сообщений: 9 Откуда: SPB
|
Непосредственные данные? То есть MessageDigest digest = MessageDigest.getInstance("GOST3411"); digest.update(signParameters.getText().getBytes()); byte[] result = digest.digest(); не нужно?
Но без digest я тоже делал - ничего не получилось. Именно так и начинал, а уже потом добавил digest.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 23.01.2008(UTC) Сообщений: 207
Поблагодарили: 3 раз в 3 постах
|
хеш не нужен. samples/userSamples/SignAndVerify.java, документация (актуальная версия 1.0.44!)
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 19.12.2008(UTC) Сообщений: 9 Откуда: SPB
|
Я так и делаю как в примере. Толко сам загружаю ключ из хранилища.
В версии 1.0.44 что то пофиксилось касательно данного вопроса?
Я где то встречал на форуме что при валидации в JCP подписии CPS надо преобразовывать последовательность байт. Может с этим как то связано?
У меня уже закончился триал, пока я пытался разобраться с этим вопросом. Как то его можно продлить?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 23.01.2008(UTC) Сообщений: 207
Поблагодарили: 3 раз в 3 постах
|
В версии 1.0.44 обновлены упоминаемые мной примеры и документация. Указание "CryptoProSignature" вызывает класс работающий с обратным порядком байт. Насчет продления/покупки лицензии обращайтесь в коммерческий отдел.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 19.12.2008(UTC) Сообщений: 9 Откуда: SPB
|
Если предположить что Constants.SIGN_CP_ALG="CryptoProSignature", то код в примере аналогичен моему.
//* Создание подписи "CryptoProSignature" (совместимо с КриптоПро CSP) final byte[] signCP = sign(Constants.SIGN_CP_ALG, keyPair.getPrivate(), SAMPLE_TEXT.getBytes()); System.out.println("Value of signature (signCP) is:"); System.out.println(Constants.toHexString(signCP));
public static byte[] sign(String alghorithmName, PrivateKey privateKey, byte[] data) throws Exception { final Signature sig = Signature.getInstance(alghorithmName); sig.initSign(privateKey); sig.update(data); return sig.sign(); }
Есть ли какойнибудь простой способ провалидировать подпиь через CPS?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 16.04.2008(UTC) Сообщений: 1,445
Сказал(а) «Спасибо»: 37 раз Поблагодарили: 577 раз в 401 постах
|
csptest -keyset -verify GOST -in data.bin -signature sign.bin -certificate cert.cer
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 19.12.2008(UTC) Сообщений: 9 Откуда: SPB
|
Что нужно установить по-минимуму,чтобы получить csptest?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 19.12.2008(UTC) Сообщений: 9 Откуда: SPB
|
в состав какого продукта входит csptest?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close