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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline ozhdanov  
#1 Оставлено : 18 марта 2021 г. 13:16:40(UTC)
ozhdanov

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

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

Сказал(а) «Спасибо»: 6 раз
Добрый день! Столкнулся с данной проблемой: при проверке созданной мной подписи на стороннем ресурсе возникает ошибка
Код:
Ошибка проверки отсоединенной подписи xml Error in function CryptMsgUpdate occured. Object already exists. (0x8009000f)

Аналогичная проблема присутствует в данной теме http://www.cryptopro.ru/...aspx?g=posts&t=15665
Суть её в том что, в атрибутивном составе подписи есть дублирующая запись [1.2.643.2.2.9, NULL], из-за которой падает проверка.

Код:
$$$ Print signature information $$$
 Signature #1 (CAdES-BES) verified by OID.1.2.840.113549.1.9.2=MSKS77, STREET="пер. 2-й Лесной, д. 11, Стр. 1", CN=ГКУ «Организатор перевозок», OU=Управление информационных технологий, O=ГКУ «Организатор перевозок», L=Москва, ST=77 г. Москва, C=RU, EMAILADDRESS=ChernyshevMS@transport.mos.ru, OID.1.2.643.3.131.1.1=#120C303037373130363630313439, OID.1.2.643.100.1=#120D31303737373436323531343238
Signer #1 has 3 signed attributes.
 Attribute
	type : 1.2.840.113549.1.9.4
	value: [#4226f0fce6fb86a5c6c77efe1b7811e253dbc60660b07a146085838f13bf2cc1]
 Attribute
	type : 1.2.840.113549.1.9.3
	value: [1.2.840.113549.1.7.1]
 Attribute
	type : 1.2.840.113549.1.9.16.2.47
	value: [[[[[1.2.643.7.1.1.2.2], #4e9af63cd33fcf75f430389e916e07b68937b20fcf6c725bbee69e3801363e2d, [[[4][[[1.2.643.100.1, 1027707013806]], [[1.2.643.3.131.1.1, 007707314029]], [[1.2.840.113549.1.9.1, support@e-moskva.ru]], [[2.5.4.6, RU]], [[2.5.4.8, 77 г. Москва]], [[2.5.4.7, Москва]], [[2.5.4.9, Большой Сухаревский пер., д. 11, стр. 1, оф. 6]], [[2.5.4.10, АО «Электронная Москва»]], [[2.5.4.3, АО «Электронная Москва»]]]], 677036994132206913257123694011436200587]]]]]
$$$ Print counter signature information $$$
 Signature #2 (CAdES-T) verified by OID.1.2.840.113549.1.9.2=MSKS77, STREET="пер. 2-й Лесной, д. 11, Стр. 1", CN=ГКУ «Организатор перевозок», OU=Управление информационных технологий, O=ГКУ «Организатор перевозок», L=Москва, ST=77 г. Москва, C=RU, EMAILADDRESS=ChernyshevMS@transport.mos.ru, OID.1.2.643.3.131.1.1=#120C303037373130363630313439, OID.1.2.643.100.1=#120D31303737373436323531343238
Signer #2 has 3 signed attributes.
 Attribute
	type : 1.2.840.113549.1.9.4
	value: [#4226f0fce6fb86a5c6c77efe1b7811e253dbc60660b07a146085838f13bf2cc1]
 Attribute
	type : 1.2.840.113549.1.9.3
	value: [1.2.840.113549.1.7.1]
 Attribute
	type : 1.2.840.113549.1.9.16.2.47
	value: [[[[[1.2.643.7.1.1.2.2], #4e9af63cd33fcf75f430389e916e07b68937b20fcf6c725bbee69e3801363e2d, [[[4][[[1.2.643.100.1, 1027707013806]], [[1.2.643.3.131.1.1, 007707314029]], [[1.2.840.113549.1.9.1, support@e-moskva.ru]], [[2.5.4.6, RU]], [[2.5.4.8, 77 г. Москва]], [[2.5.4.7, Москва]], [[2.5.4.9, Большой Сухаревский пер., д. 11, стр. 1, оф. 6]], [[2.5.4.10, АО «Электронная Москва»]], [[2.5.4.3, АО «Электронная Москва»]]]], 677036994132206913257123694011436200587]]]]]
Signer #2 has 1 unsigned attributes.
 Attribute
	type : 1.2.840.113549.1.9.16.2.14
	value: [[1.2.840.113549.1.7.2, [0][3, [[1.2.643.2.2.9, NULL]], [1.2.840.113549.1.9.16.1.4, [0]#306b02010106072a8503020226043030300c06082a8503070101020205000420d80832fcb28c4f85feffc44a0627cf3475d9f2bf754fe529129c73378f3da293020d318626a792000000000914edb7180f32303231303331383039313131355a300302016402060178449a5b99], [0][[[0]2, 81844514725496667470640, [1.2.643.2.2.3], [[[1.2.643.100.1, 1037700085444]], [[1.2.643.3.131.1.1, 007717107991]], [[2.5.4.9, ул. Сущёвский вал, д. 18]], [[2.5.4.8, 77 г. Москва]], [[2.5.4.7, Москва]], [[1.2.840.113549.1.9.1, info@cryptopro.ru]], [[2.5.4.6, RU]], [[2.5.4.10, ООО "КРИПТО-ПРО"]], [[2.5.4.3, Тестовый УЦ ООО "КРИПТО-ПРО"]]], [200228140200Z, 210528141200Z], [[[1.2.643.100.1, 1007712345678]], [[1.2.643.3.131.1.1, 007712345678]], [[1.2.840.113549.1.9.1, support@cryptopro.ru]], [[2.5.4.6, RU]], [[2.5.4.8, 77 г. Москва]], [[2.5.4.7, Москва]], [[2.5.4.10, ООО "КРИПТО-ПРО"]], [[2.5.4.11, Тестовый УЦ]], [[2.5.4.3, Тестовая служба штампов времени ООО "КРИПТО-ПРО"]], [[2.5.4.9, ул. Сущёвский вал, д. 18]]], [[1.2.643.2.2.19, [1.2.643.2.2.35.1, 1.2.643.2.2.30.1]], #0343000440C22F03A4937ABA2FAE2BAE2CD537C9BAE06964F53B185434D4B14DC6A8E44655A92D262B0CCC7E653B305B58FD77790F71DD7D67A82C87A1DD882882FEEA961A], [3][[2.5.29.15, TRUE, #030206c0], [2.5.29.37, TRUE, #300a06082b06010505070308], [2.5.29.14, #041426fd6e30be3f3a39ac40c70082b38b6867958b04], [2.5.29.35, #3082017c80147a65a2ed4fae6e3010eec403cb5bda56c4dae4b1a1820150a482014c308201483118301606052a85036401120d31303337373030303835343434311a301806082a85030381030101120c3030373731373130373939313139303706035504091e300443043b002e0020042104430449045104320441043a04380439002004320430043b002c00200434002e0020003100383121301f06035504081e180037003700200433002e0020041c043e0441043a043204303115301306035504071e0c041c043e0441043a043204303120301e06092a864886f70d0109011611696e666f4063727970746f70726f2e7275310b300906035504061302525531293027060355040a1e20041e041e041e00200022041a04200418041f0422041e002d041f0420041e00223141303f06035504031e380422043504410442043e0432044b04390020042304260020041e041e041e00200022041a04200418041f0422041e002d041f0420041e002282104e98f3f34f95449d4d8b1c52ac44bc27], [2.5.29.31, #30533051a04fa04d864b687474703a2f2f7777772e63727970746f70726f2e72752f72612f6364702f376136356132656434666165366533303130656563343033636235626461353663346461653462312e63726c], [1.3.6.1.5.5.7.1.1, #3081a1303406082b060105050730018628687474703a2f2f7777772e63727970746f70726f2e72752f6f6373706e63322f6f6373702e737266303206082b060105050730018626687474703a2f2f7777772e63727970746f70726f2e72752f6f637370322f6f6373702e737266303506082b060105050730028629687474703a2f2f7777772e63727970746f70726f2e72752f72612f6364702f6361636572332e637274], [2.5.29.16, #3022800f32303230303232383134303230305a810f32303231303532383134303230305a], [2.5.29.32, #3014300806062a8503647101300806062a8503647102], [1.2.643.100.111, #0c29d09ad180d0b8d0bfd182d0bed09fd180d0be204353502028d0b2d0b5d180d181d0b8d18f20332e3629], [1.2.643.100.112, #308201240c2b22d09ad180d0b8d0bfd182d0bed09fd180d0be20435350222028d0b2d0b5d180d181d0b8d18f20332e36290c5322d0a3d0b4d0bed181d182d0bed0b2d0b5d180d18fd18ed189d0b8d0b920d186d0b5d0bdd182d1802022d09ad180d0b8d0bfd182d0bed09fd180d0be20d0a3d0a62220d0b2d0b5d180d181d0b8d0b820312e350c4fd0a1d0b5d180d182d0b8d184d0b8d0bad0b0d18220d181d0bed0bed182d0b2d0b5d182d181d182d0b2d0b8d18f20e2849620d0a1d0a42f3132342d3237333820d0bed1822030312e30372e323031350c4fd0a1d0b5d180d182d0b8d184d0b8d0bad0b0d18220d181d0bed0bed182d0b2d0b5d182d181d182d0b2d0b8d18f20e2849620d0a1d0a42f3132382d3237363820d0bed1822033312e31322e32303135]]], [1.2.643.2.2.3], #03410015A0D0C3399E9A5419CA3983AD25C341EDECAB785F665754A286725397B7329F03A8C214468348964D7E55108E5C6DB7EED488B9471D18836D8E5141C4517FC7], [[1, [[[[1.2.643.100.1, 1037700085444]], [[1.2.643.3.131.1.1, 007717107991]], [[2.5.4.9, ул. Сущёвский вал, д. 18]], [[2.5.4.8, 77 г. Москва]], [[2.5.4.7, Москва]], [[1.2.840.113549.1.9.1, info@cryptopro.ru]], [[2.5.4.6, RU]], [[2.5.4.10, ООО "КРИПТО-ПРО"]], [[2.5.4.3, Тестовый УЦ ООО "КРИПТО-ПРО"]]], 81844514725496667470640], [1.2.643.2.2.9, NULL], [0][[1.2.840.113549.1.9.3, [1.2.840.113549.1.9.16.1.4]], [1.2.840.113549.1.9.4, [#35c207c5d62c230b629ff374ba6fea12e631d897b70aa04ce66bfc5d2febe24a]], [1.2.840.113549.1.9.16.2.12, [[[[#0f6cac8415b5d421fd529c201bc135f36a69af56, [[[4][[[1.2.643.100.1, 1037700085444]], [[1.2.643.3.131.1.1, 007717107991]], [[2.5.4.9, ул. Сущёвский вал, д. 18]], [[2.5.4.8, 77 г. Москва]], [[2.5.4.7, Москва]], [[1.2.840.113549.1.9.1, info@cryptopro.ru]], [[2.5.4.6, RU]], [[2.5.4.10, ООО "КРИПТО-ПРО"]], [[2.5.4.3, Тестовый УЦ ООО "КРИПТО-ПРО"]]]], 81844514725496667470640]]]]]], [1.2.840.113549.1.9.16.2.47, [[[[[1.2.643.2.2.9], #6bb4152cbd01b08b3d82ca2cefa333e0d9a0ecbc7f68a608908ce7d3583b3d67, [[[4][[[1.2.643.100.1, 1037700085444]], [[1.2.643.3.131.1.1, 007717107991]], [[2.5.4.9, ул. Сущёвский вал, д. 18]], [[2.5.4.8, 77 г. Москва]], [[2.5.4.7, Москва]], [[1.2.840.113549.1.9.1, info@cryptopro.ru]], [[2.5.4.6, RU]], [[2.5.4.10, ООО "КРИПТО-ПРО"]], [[2.5.4.3, Тестовый УЦ ООО "КРИПТО-ПРО"]]]], 81844514725496667470640]]]]]]], [1.2.643.2.2.19, NULL], #f2574e003192435fdb0ba66add685bd45f4637d25b90fc42f6240014792baacf7246913bfcdd33fa8359d009267faee44f80586a624132e3ff8c9612d2c931e0]]]]]
$$$ Print counter signature information $$$


Подпись создаю примером из состава samples-source SignByJCSPExample_2012_256
Код:
    /**
     * Создание CAdES-подписи с двумя подписантами: CAdES-BES и
     * CAdES-X Long Type 1.
     *
     * @param config Конфигурация подписи.
     * @param outFileName Файл для сохранения подписи.
     * @return готовую подпись.
     * @throws Exception
     */
    public static InputStream createMixedSignatureWith2Signers(IConfiguration
        config, String outFileName) throws Exception {

        CAdESSignature cadesSignature = new CAdESSignature(config.detached());

        cadesSignature.setCertificateStore(config.getCertificateStore());
        cadesSignature.setCRLStore(config.getCRLStore());

        // Создаем подписанта CAdES-BES.
        cadesSignature.addSigner(config.getProviderName(),
            config.getDigestOid(),
            config.getPublicKeyOid(),
            config.getPrivateKey(),
            config.getChain(),
            CAdESType.CAdES_BES,
            null,
            false,
            config.getSignedAttributes(),
            config.getUnsignedAttributes(),
            config.getCRLs());

        // Создаем подписанта CAdES-X Long Type 1.
        cadesSignature.addSigner(config.getProviderName(),
            config.getDigestOid(),
            config.getPublicKeyOid(),
            config.getPrivateKey(),
            config.getChain(),
            CAdESType.CAdES_X_Long_Type_1,
            config.getTSAAddress(),
            false,
            null,
            null,
            config.getCRLs());

        // Сохраним подпись либо в файл, либо в массив.
        OutputStream outSignatureStream = config.useStream()
            ? new FileOutputStream(outFileName) : new ByteArrayOutputStream();

        cadesSignature.open(outSignatureStream);
        InputStream dataStream = config.getDataStream();
        cadesSignatureUpdate(cadesSignature, dataStream); // хеш

        // Завершаем создание подписи с двумя подписантами.
        cadesSignature.close();
        dataStream.close();
        outSignatureStream.close();

        CAdESSigner[] signers = cadesSignature.getCAdESSignerInfos();
        for (int i = 0; i < signers.length; i++) {

            CAdESSigner signer = signers[i];

            // Только ему могут подаваться атрибуты (см. выше).
            if (signer.getSignatureType().equals(CAdESType.CAdES_BES)) {

                AttributeTable cdsAttrs = signer.getSignerSignedAttributes();
                if (config.getSignedAttributes() != null) {
                    if (config.getSignedAttributes().size() != cdsAttrs.size()) {
                        throw new Exception("Invalid count of signed attributes in " +
                            "CAdES signature # " + i);
                    } // if
                } // if
                else {
                    if (cdsAttrs != null) {
                        throw new Exception("Count of signed attributes must be null " +
                            "in CAdES signature # " + i);
                    } // if
                } // else

                cdsAttrs = signer.getSignerUnsignedAttributes();
                if (config.getUnsignedAttributes() != null) {
                    if (config.getUnsignedAttributes().size() != cdsAttrs.size()) {
                        throw new Exception("Invalid count of unsigned attributes in " +
                            "CAdES signature # " + i);
                    } // if
                } // if
                else {
                    if (cdsAttrs != null) {
                        throw new Exception("Count of unsigned attributes must be null " +
                            "in CAdES signature # " + i);
                    } // if
                } // else

            } // if

        } // for

        InputStream signatureStream;

        // Если это массив, сохраним и снова прочтем.
        if (!config.useStream() && outSignatureStream instanceof ByteArrayOutputStream) {

            byte[] cadesCms = ((ByteArrayOutputStream)outSignatureStream).toByteArray();

            if (outFileName != null) {
                Array.writeFile(outFileName, cadesCms);
            } // if

            // Подпись.
            signatureStream = new ByteArrayInputStream(cadesCms);

        } // if
        else {
            // Читаем подпись.
            signatureStream = new FileInputStream(outFileName);
        } // else

        return signatureStream;
    }

Хочу попробовать решить данную проблему удалив одну из дублирующихся записей, но метод, который должен вернуть информацию о подписях, возвращает пустой список.
На скриншоте в режиме дебага [img]http://[/img] 2021-03-18_13-13-34.png (271kb) загружен 3 раз(а). 2021-03-18_13-13-04.png (299kb) загружен 2 раз(а).показаны дубли атрибутов.
Подскажите, как удалить дублирующийся атрибут? Или как решить проблему другим способом
Offline Евгений Афанасьев  
#2 Оставлено : 18 марта 2021 г. 14:27:12(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Здравствуйте.
Может, вы их сами добавляете, передавая config.getSignedAttributes(),
config.getUnsignedAttributes()?
Offline Евгений Афанасьев  
#3 Оставлено : 18 марта 2021 г. 15:35:40(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
На картинках, что вы привели, зарегистрированные алгоритмы провайдеров вроде JCP, к подписи и ее атрибутам не имеют отношения.
Offline ozhdanov  
#4 Оставлено : 18 марта 2021 г. 17:30:23(UTC)
ozhdanov

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

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

Сказал(а) «Спасибо»: 6 раз
config.getSignedAttributes() и config.getUnsignedAttributes() равны null.

Может я ошибочно использую термины. Можно ли удалить дубликат записи алгоритма провайдеров. как советуют в теме http://www.cryptopro.ru/...aspx?g=posts&t=15665 ?
Offline Евгений Афанасьев  
#5 Оставлено : 18 марта 2021 г. 17:44:27(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Можете приложить проблемную подпись?
Offline ozhdanov  
#6 Оставлено : 18 марта 2021 г. 18:04:32(UTC)
ozhdanov

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

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

Сказал(а) «Спасибо»: 6 раз
CADES_signature.txt (28kb) загружен 6 раз(а).
Offline Евгений Афанасьев  
#7 Оставлено : 18 марта 2021 г. 18:41:59(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Да, алгоритм хеширования продублирован. Будем разбираться, спасибо. О результатах напишем.
Offline Евгений Афанасьев  
#8 Оставлено : 18 марта 2021 г. 18:54:04(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
В RFC 5652 https://tools.ietf.org/html/rfc5652 написано:
Код:

The message digest algorithms for all the signers and the
SignerInfo values for all the signers are collected together with
the content into a SignedData value

Код:

digestAlgorithms is a collection of message digest algorithm
identifiers.  There MAY be any number of elements in the
collection, including zero.  Each element identifies the message
digest algorithm, along with any associated parameters, used by
one or more signer.  The collection is intended to list the
message digest algorithms employed by all of the signers, in any
order, to facilitate one-pass signature verification.
Implementations MAY fail to validate signatures that use a digest
algorithm that is not included in this set.

Нет строгого требования исключать дубликаты: алгоритмы указаны для всех подписантов, число алгоритмов может (MAY) совпадать с числом подписантов.
Да и в коде bouncycastle, использующемся для кодирования/декодирования подписи, список алгоритмов хеширования представлен вектором, куда помещаются алгоритмы хеширования при обходе всех создаваемых подписантов - то есть двух.

Отредактировано пользователем 18 марта 2021 г. 22:05:07(UTC)  | Причина: Не указана

Offline ozhdanov  
#9 Оставлено : 19 марта 2021 г. 9:57:26(UTC)
ozhdanov

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

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

Сказал(а) «Спасибо»: 6 раз
Я понял, спасибо. Но у нас ситуация, что подпись проверяется на стороне и вероятней всего средствами крипто про CSP на linux. Как писали в теме, на которую я ссылался
Цитата:
Теперь про вторую причину. Как я уже писал ранее, указанный файл подписи спокойно проверяется в Microsoft Windows. При этом проверка подписи в Linux при помощи кастомной утилитой, основанной на реализации ГОСТовских алгоритмов от BouncyCastle, также проходит успешно. Но при использовании в Linux КриптоПРО CSP версии 4.0 и 5.0 - возникает указанная ошибка.
Она происходит при декодировании подписи в процедуре CryptMsgUpdate модуля libcapi20.so, которая натыкается на дублирующую запись в списке идентификаторов используемых хэш-функций. Скорее всего при декодировании производится построение словаря (ключ-значение) на основе списка идентификаторов хэш-функций, и наличие повторяющейся записи как раз и приводит к указанной ошибке "Object already exists".

В ОС Windows используется нативная реализация декодирования подписи от Microsfot из модуля crypt32.dll (у BouncyCastle тоже собственная процедура). В ней при декодировании digestAlgorithms скорее всего используется не словарь, а простой список (либо словарь при добавлении предварительно проверяется), - и при таком подходе обработка рассматриваемой подписи не вызывает никаких ошибок.
Ради эксперимента я перекодировал программными средствами свой файл подписи, убрав из него дубль идентификатора алгоритма хэш-функции. После этого проверка в Linux КриптоПРО CSP прошла успешно.

Подскажите, есть возможность подстроится под это поведение и удалить дубликат в момент формирования подписи или после этого?
Offline Евгений Афанасьев  
#10 Оставлено : 19 марта 2021 г. 10:16:27(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Боюсь, что кроме как перепаковкой сообщения (декодируем, находим нужный кусок с алгоритмами, вырезаем дубликат, запаковываем снова), никак.
Спасибо, проверим встречно конкретно этот случай с проверкой на линуксе средствами CSP.

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