Статус: Участник
Группы: Участники
Зарегистрирован: 03.10.2019(UTC) Сообщений: 28 Откуда: MSK Сказал(а) «Спасибо»: 2 раз
|
Подскажите, возможно ли у отделенной подписи Cades Bes удалять подписанта перед сохранением подписи и добавлять его обратно после ее чтения, а сам сертификат подписанта хранить отдельно? Требуется хранить подпись максимально сжато, т.к. файлов очень много, а подписывают их одни и те же люди. Процесс подписания выглядит так: Код:
public static byte[] doSignCadesBes(byte[] origDataOrHash, boolean useHash, JCPPrivateKeyEntry jCPPrivateKeyEntry, Set<X509CRL> x509crls) {
try {
Certificate certificate = jCPPrivateKeyEntry.getCertificate();
Certificate[] chain = jCPPrivateKeyEntry.getCertificateChain();
PrivateKey pk = jCPPrivateKeyEntry.getPrivateKey();
boolean isDetachedSignature = true;
CAdESSignature cadesSignature = new CAdESSignature(isDetachedSignature, useHash);
cadesSignature.setCertificateStore(new CollectionStore(getChainHolder(chain)));
cadesSignature.addSigner(JCP.PROVIDER_NAME, getDigestOid(pk), getPublicKeyOid(pk), pk, Collections.singletonList(certificate), CAdESType.CAdES_BES, null, false, null, null, x509crls);
ByteArrayOutputStream signStream = new ByteArrayOutputStream();
cadesSignature.open(signStream);
cadesSignature.update(origDataOrHash);
cadesSignature.close();
signStream.close();
return signStream.toByteArray();
} catch (Throwable e) {
throw new RuntimeException(e);
}
}
Отредактировано пользователем 23 декабря 2021 г. 16:07:22(UTC)
| Причина: Не указана
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Добрый день. Хотелось бы поправить Вашу формулировку вопроса, суть в следующем: в подписи форматов Cades (да и PKCS7) предоставляется штатный выбор - либо указывается сертификат подписавшего либо указывается информация для поиска сертификата подписавшего (вариантов информации несколько - например, издатель и серийный номер; хэш открытого ключа издателя и номер; но чаще просто CN - что дает неоднозначный поиск если у подписавшего несколько сертификатов). Если указан сертификат, можно дополнительно включить цепочку без корневого или цепочку с корневым. Вместе это дает 4 варианта "включения цепочки сертификата": 1) цепочка не включается (но есть информация для поиска конечного сертификата); 2) включен только конечный сертификат; 3) включены конечный и промежуточные сертификаты; 4) включена вся цепочка. Поэтому корректнее сформулировать не "как удалять подписанта перед сохранением подписи и добавлять его обратно после ее чтения", а "как указать опцию "не включать сертификат" при создании подписи". Вопрос еще и в том, что в зависимости от формата подписи подписываться может не сам документ, а атрибуты подписи. Если подписаны атрибуты, то "очистка" может нарушить подпись и все манипуляции по возвращению будут не очень законны. Не смогу подсказать как "не включать сертификат" точно выглядит на Джаве, лучше уточнить в справке про параметры addSigner или родственного свойства/метода, так как разные программные интерфейсы могут не только прятать этот выбор в самое неожиданное место, но и поддерживать не все 4 варианта при создании подписи. Добавлю, что если подписанных документов действительно много и в подписи используются доказательства подписи, то подойдет как раз оригинальная формулировка вопроса: доказательства большей частью отделять, хранить отдельно (так даже проще обеспечивать их актуальность долгие годы - раз в день скачивать новые с 2-3 серверов, перекрестно, раз в год менять сервера), а в случае необходимости выгрузки документа и подписи за пределы информационной системы комбинировать их вместе в продвинутые форматы CADES. Отредактировано пользователем 24 декабря 2021 г. 1:54:19(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 03.10.2019(UTC) Сообщений: 28 Откуда: MSK Сказал(а) «Спасибо»: 2 раз
|
two_oceans написал: Вместе это дает 4 варианта "включения цепочки сертификата": 1) цепочка не включается (но есть информация для поиска конечного сертификата); 2) включен только конечный сертификат; 3) включены конечный и промежуточные сертификаты; 4) включена вся цепочка.
Меня конечно интересует вариант 1. two_oceans написал: Поэтому корректнее сформулировать не "как удалять подписанта перед сохранением подписи и добавлять его обратно после ее чтения", а "как указать опцию "не включать сертификат" при создании подписи". Вопрос еще и в том, что в зависимости от формата подписи подписываться может не сам документ, а атрибуты подписи. Если подписаны атрибуты, то "очистка" может нарушить подпись и все манипуляции по возвращению будут не очень законны.
Ну документ никогда сам и не подписывается. Подписывается его хэш. И если хэш считать атрибутом, то пусть в списке атрибутов будет не только он, а еще что-то. Не понимаю как удаление сертификата может на это повлиять. two_oceans написал: Не смогу подсказать как "не включать сертификат" точно выглядит на Джаве, лучше уточнить в справке про параметры addSigner или родственного свойства/метода, так как разные программные интерфейсы могут не только прятать этот выбор в самое неожиданное место, но и поддерживать не все 4 варианта при создании подписи.
В процессе поиска... two_oceans написал: Добавлю, что если подписанных документов действительно много и в подписи используются доказательства подписи, то подойдет как раз оригинальная формулировка вопроса: доказательства большей частью отделять, хранить отдельно (так даже проще обеспечивать их актуальность долгие годы - раз в день скачивать новые с 2-3 серверов, перекрестно, раз в год менять сервера), а в случае необходимости выгрузки документа и подписи за пределы информационной системы комбинировать их вместе в продвинутые форматы CADES.
Вот именно способ отделения доказательств от сертификатов и ищу. Подумываю уже самостоятельно посмотреть на структуру дерева ASN1 в подписи для понимания какие из его веток меняются от подписи к подписи, чтобы можно было константные части хранить отдельно.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Здравствуйте.
Т.е. Вы ещё не используете CAdES-T \ XLong1 и решили начать с простого, бороться с CAdES-BES? Как будете доказывать, что на момент подписания сертификат не был отозван? |
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,193 Сказал(а) «Спасибо»: 100 раз Поблагодарили: 274 раз в 254 постах
|
может вам подойдет использование raw signature. подпись в итоге будет 64 байта (для гост 2012-256)
остальные данные собираете как вам угодно. к примеру id документа, id сертификата и т.д.
но учтите что другие люди / ИС скорее всего не смогут с наскоку проверить подписи |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Автор: Alexander Kumanyaev Меня конечно интересует вариант 1.
Уберите Цитата: cadesSignature.setCertificateStore(new CollectionStore(getChainHolder(chain)));
тогда в подписи не будет цепочки подписанта. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 03.10.2019(UTC) Сообщений: 28 Откуда: MSK Сказал(а) «Спасибо»: 2 раз
|
Автор: Андрей * Т.е. Вы ещё не используете CAdES-T \ XLong1 и решили начать с простого, бороться с CAdES-BES? Как будете доказывать, что на момент подписания сертификат не был отозван? Не понял как ваш вопрос относится к топику.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 03.10.2019(UTC) Сообщений: 28 Откуда: MSK Сказал(а) «Спасибо»: 2 раз
|
Автор: Санчир Момолдаев может вам подойдет использование raw signature. подпись в итоге будет 64 байта (для гост 2012-256)
остальные данные собираете как вам угодно. к примеру id документа, id сертификата и т.д.
но учтите что другие люди / ИС скорее всего не смогут с наскоку проверить подписи Такое не подойдет, мне нужна обратимая операция. Вопрос только уменьшении объема хранения.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 03.10.2019(UTC) Сообщений: 28 Откуда: MSK Сказал(а) «Спасибо»: 2 раз
|
Автор: Евгений Афанасьев Автор: Alexander Kumanyaev Меня конечно интересует вариант 1.
Уберите Цитата: cadesSignature.setCertificateStore(new CollectionStore(getChainHolder(chain)));
тогда в подписи не будет цепочки подписанта. А перепаковка подписи из варианта 1 в вариант 4 будет возможна?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Автор: Alexander Kumanyaev Автор: Андрей * Т.е. Вы ещё не используете CAdES-T \ XLong1 и решили начать с простого, бороться с CAdES-BES? Как будете доказывать, что на момент подписания сертификат не был отозван? Не понял как ваш вопрос относится к топику. Зачем вам подписи хранить, начните с этого... Чтобы что? А после истечения срока действия сертификата подписанта? О каком кол-ве идёт речь? Х млн файлов ЭП в год? Сжатие не рассматривали? // если всё таки продолжите расширять до усовершенстованной... |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close