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

Уведомление

Icon
Error

5 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline Alexander Kumanyaev  
#1 Оставлено : 23 декабря 2021 г. 16:06:44(UTC)
Alexander Kumanyaev

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

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline two_oceans  
#2 Оставлено : 24 декабря 2021 г. 1:38:11(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 394 раз в 366 постах
Добрый день.
Хотелось бы поправить Вашу формулировку вопроса, суть в следующем:
в подписи форматов Cades (да и PKCS7) предоставляется штатный выбор - либо указывается сертификат подписавшего либо указывается информация для поиска сертификата подписавшего (вариантов информации несколько - например, издатель и серийный номер; хэш открытого ключа издателя и номер; но чаще просто CN - что дает неоднозначный поиск если у подписавшего несколько сертификатов). Если указан сертификат, можно дополнительно включить цепочку без корневого или цепочку с корневым.

Вместе это дает 4 варианта "включения цепочки сертификата": 1) цепочка не включается (но есть информация для поиска конечного сертификата); 2) включен только конечный сертификат; 3) включены конечный и промежуточные сертификаты; 4) включена вся цепочка.

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

Не смогу подсказать как "не включать сертификат" точно выглядит на Джаве, лучше уточнить в справке про параметры addSigner или родственного свойства/метода, так как разные программные интерфейсы могут не только прятать этот выбор в самое неожиданное место, но и поддерживать не все 4 варианта при создании подписи.

Добавлю, что если подписанных документов действительно много и в подписи используются доказательства подписи, то подойдет как раз оригинальная формулировка вопроса: доказательства большей частью отделять, хранить отдельно (так даже проще обеспечивать их актуальность долгие годы - раз в день скачивать новые с 2-3 серверов, перекрестно, раз в год менять сервера), а в случае необходимости выгрузки документа и подписи за пределы информационной системы комбинировать их вместе в продвинутые форматы CADES.

Отредактировано пользователем 24 декабря 2021 г. 1:54:19(UTC)  | Причина: Не указана

Offline Alexander Kumanyaev  
#3 Оставлено : 24 декабря 2021 г. 15:30:08(UTC)
Alexander Kumanyaev

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

Группы: Участники
Зарегистрирован: 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 в подписи для понимания какие из его веток меняются от подписи к подписи, чтобы можно было константные части хранить отдельно.

Offline Андрей *  
#4 Оставлено : 24 декабря 2021 г. 15:57:46(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,691
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2044 раз в 1585 постах
Здравствуйте.

Т.е. Вы ещё не используете CAdES-T \ XLong1 и решили начать с простого, бороться с CAdES-BES?
Как будете доказывать, что на момент подписания сертификат не был отозван?
Техническую поддержку оказываем тут
Наша база знаний
Offline Санчир Момолдаев  
#5 Оставлено : 24 декабря 2021 г. 17:50:58(UTC)
Санчир Момолдаев

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

Группы: Модератор, Участники
Зарегистрирован: 03.12.2018(UTC)
Сообщений: 1,040
Российская Федерация

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 226 раз в 213 постах
может вам подойдет использование raw signature.
подпись в итоге будет 64 байта (для гост 2012-256)

остальные данные собираете как вам угодно.
к примеру id документа, id сертификата и т.д.

но учтите что другие люди / ИС скорее всего не смогут с наскоку проверить подписи
Техническую поддержку оказываем тут
Наша база знаний
Offline Евгений Афанасьев  
#6 Оставлено : 24 декабря 2021 г. 17:51:16(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 688 раз в 649 постах
Автор: Alexander Kumanyaev Перейти к цитате

Меня конечно интересует вариант 1.

Уберите
Цитата:

cadesSignature.setCertificateStore(new CollectionStore(getChainHolder(chain)));

тогда в подписи не будет цепочки подписанта.

Offline Alexander Kumanyaev  
#7 Оставлено : 24 декабря 2021 г. 20:41:26(UTC)
Alexander Kumanyaev

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

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

Сказал(а) «Спасибо»: 2 раз
Автор: Андрей * Перейти к цитате
Т.е. Вы ещё не используете CAdES-T \ XLong1 и решили начать с простого, бороться с CAdES-BES?
Как будете доказывать, что на момент подписания сертификат не был отозван?

Не понял как ваш вопрос относится к топику.

Offline Alexander Kumanyaev  
#8 Оставлено : 24 декабря 2021 г. 20:42:52(UTC)
Alexander Kumanyaev

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

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

Сказал(а) «Спасибо»: 2 раз
Автор: Санчир Момолдаев Перейти к цитате
может вам подойдет использование raw signature.
подпись в итоге будет 64 байта (для гост 2012-256)

остальные данные собираете как вам угодно.
к примеру id документа, id сертификата и т.д.

но учтите что другие люди / ИС скорее всего не смогут с наскоку проверить подписи

Такое не подойдет, мне нужна обратимая операция. Вопрос только уменьшении объема хранения.

Offline Alexander Kumanyaev  
#9 Оставлено : 24 декабря 2021 г. 20:46:22(UTC)
Alexander Kumanyaev

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

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

Сказал(а) «Спасибо»: 2 раз
Автор: Евгений Афанасьев Перейти к цитате
Автор: Alexander Kumanyaev Перейти к цитате

Меня конечно интересует вариант 1.

Уберите
Цитата:

cadesSignature.setCertificateStore(new CollectionStore(getChainHolder(chain)));

тогда в подписи не будет цепочки подписанта.



А перепаковка подписи из варианта 1 в вариант 4 будет возможна?
Offline Андрей *  
#10 Оставлено : 24 декабря 2021 г. 20:52:56(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,691
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2044 раз в 1585 постах
Автор: Alexander Kumanyaev Перейти к цитате
Автор: Андрей * Перейти к цитате
Т.е. Вы ещё не используете CAdES-T \ XLong1 и решили начать с простого, бороться с CAdES-BES?
Как будете доказывать, что на момент подписания сертификат не был отозван?

Не понял как ваш вопрос относится к топику.



Зачем вам подписи хранить, начните с этого... Чтобы что? А после истечения срока действия сертификата подписанта?
О каком кол-ве идёт речь? Х млн файлов ЭП в год? Сжатие не рассматривали? // если всё таки продолжите расширять до усовершенстованной...
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
5 Страницы123>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.