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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline doubleside  
#1 Оставлено : 25 июня 2018 г. 14:20:26(UTC)
doubleside

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

Группы: Участники
Зарегистрирован: 23.05.2018(UTC)
Сообщений: 71
Великобритания
Откуда: London

Сказал(а) «Спасибо»: 5 раз
Поблагодарили: 1 раз в 1 постах
Это нормально что базе64 для сигнатуры каждый раз разная? при прогонке тестов?
Подписываю xmlдля смева сигнатура разнится всегда
Хеш одинаковый
Offline doubleside  
#2 Оставлено : 25 июня 2018 г. 14:25:26(UTC)
doubleside

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

Группы: Участники
Зарегистрирован: 23.05.2018(UTC)
Сообщений: 71
Великобритания
Откуда: London

Сказал(а) «Спасибо»: 5 раз
Поблагодарили: 1 раз в 1 постах
Код подписания

byte[] signed (String input) throws NoSuchProviderException, NoSuchAlgorithmException, SignatureException, KeyStoreException, UnrecoverableEntryException, InvalidKeyException, IOException, CertificateException {
Signature sig = Signature.getInstance("GOST3411withGOST3410EL", "JCP");
sig.initSign(getPrivate());
sig.update(input.getBytes());
FileWriter wr = new FileWriter("certs/san.cert");
wr.write(toPEM(getCert()));
wr.close();
return sig.sign();
}

Код преобразования в базе64
public String base64(byte[] input){
return new sun.misc.BASE64Encoder().encode(input);
}



Сам тест

@Test
public void signed1() throws CertificateException, InvalidKeyException, NoSuchAlgorithmException, KeyStoreException, SignatureException, NoSuchProviderException, UnrecoverableEntryException, IOException {
String f = "<ns1:SenderProvidedRequestData xmlns:ns1=\"urn://x-artefacts-smev-gov-ru/services/message-exchange/types/1.1\" Id=\"SIGNED_BY_CONSUMER\"><ns1:MessageID>db0486d0-3c08-11e5-95e2-d4c9eff07b77</ns1:MessageID><ns2:MessagePrimaryContent xmlns:ns2=\"urn://x-artefacts-smev-gov-ru/services/message-exchange/types/basic/1.1\"><ns3:BreachRequest xmlns:ns3=\"urn://x-artefacts-gibdd-gov-ru/breach/root/1.0\" Id=\"PERSONAL_SIGNATURE\"><ns3:RequestedInformation><ns4:RegPointNum xmlns:ns4=\"urn://x-artefacts-gibdd-gov-ru/breach/commons/1.0\">Т785ЕС57</ns4:RegPointNum></ns3:RequestedInformation><ns3:Governance><ns5:Name xmlns:ns5=\"urn://x-artefacts-gibdd-gov-ru/breach/commons/1.0\">ГИБДД РФ</ns5:Name><ns6:Code xmlns:ns6=\"urn://x-artefacts-gibdd-gov-ru/breach/commons/1.0\">GIBDD</ns6:Code><ns7:OfficialPerson xmlns:ns7=\"urn://x-artefacts-gibdd-gov-ru/breach/commons/1.0\"><ns8:FamilyName xmlns:ns8=\"urn://x-artefacts-smev-gov-ru/supplementary/commons/1.0.1\">Загурский</ns8:FamilyName><ns9:FirstName xmlns:ns9=\"urn://x-artefacts-smev-gov-ru/supplementary/commons/1.0.1\">Андрей</ns9:FirstName><ns10:Patronymic xmlns:ns10=\"urn://x-artefacts-smev-gov-ru/supplementary/commons/1.0.1\">Петрович</ns10:Patronymic></ns7:OfficialPerson></ns3:Governance></ns3:BreachRequest></ns2:MessagePrimaryContent><ns1:TestMessage></ns1:TestMessage></ns1:SenderProvidedRequestData>";
Sign sign = new Sign();
assertNotEquals(null, sign.signed(f));
Gost3411Hash g = new Gost3411Hash();
System.out.println(g.base64(sign.signed(f)));
}
Offline Евгений Афанасьев  
#3 Оставлено : 25 июня 2018 г. 15:00:01(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Автор: doubleside Перейти к цитате
Это нормально что базе64 для сигнатуры каждый раз разная? при прогонке тестов?

Да - https://support.cryptopr...odnikh-i-tekh-zhe-dnnykh

Offline doubleside  
#4 Оставлено : 25 июня 2018 г. 15:28:01(UTC)
doubleside

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

Группы: Участники
Зарегистрирован: 23.05.2018(UTC)
Сообщений: 71
Великобритания
Откуда: London

Сказал(а) «Спасибо»: 5 раз
Поблагодарили: 1 раз в 1 постах
странно то что все равно получается что ошибка целостности ЭП ОВ

@Test
public void getPrivate() throws UnrecoverableEntryException, NoSuchAlgorithmException, KeyStoreException, NoSuchProviderException, IOException, CertificateException {
Sign sign = new Sign();
Gost3411Hash g = new Gost3411Hash();
assertNotEquals(null, sign.getPrivate());
System.out.print(g.h_Base64rfc2045(sign.getPrivate().getEncoded()));
}

И в этом случае тест проходит если закомментировать последнюю строчку т/е/ приватный ключ не нулл но почему при выводе его хеша на консоль кидает эксепшн
java.lang.NullPointerException
at java.security.MessageDigest.update(MessageDigest.java:335)
at crypto.Gost3411Hash.hash_byte(Gost3411Hash.java:59)
at crypto.Gost3411Hash.h_Base64rfc2045(Gost3411Hash.java:73)

at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)


Это особенность jcp что она не отдает закрытый ключ или как?
Сама реализация хеша и вывода на консоль построена на баунси кастле
public byte[] hash_byte(byte[] data) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance( "GOST3411" );
md.update( data );
byte[] digest = md.digest();
return digest;
}

public String base64(byte[] input){
return new sun.misc.BASE64Encoder().encode(input);
}

public String h_Base64rfc2045(String data) throws NoSuchAlgorithmException {
return base64(hash_byte(data));
}

public String h_Base64rfc2045(byte[] data) throws NoSuchAlgorithmException {
return base64(hash_byte(data));
}

Я всетаки не пойму ключ приватный я извклекаю или нет? Он как бы не нул но попытка посчитать хеш и вывести его в виде базе64 дает нулл пойнтер эксепшен

Отредактировано пользователем 25 июня 2018 г. 15:33:00(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#5 Оставлено : 25 июня 2018 г. 16:00:58(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Посмотрите в отладчике, если это сторонняя реализация.
1) Можно перечислить контейнеры и узнать, какие алиасы доступны.
2) С ключами формата JCP умеет работать только JCP. Если используется что-то вроде privateKey.getEncoded() (строка из сообщения выше: "sign.getPrivate().getEncoded()"), то getEncoded() вернет null, т.к. JCP не экспортирует закрытые ключи.

Отредактировано пользователем 25 июня 2018 г. 16:02:07(UTC)  | Причина: Не указана

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