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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Donhuan  
#1 Оставлено : 26 ноября 2019 г. 8:47:17(UTC)
Donhuan

Статус: Новичок

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

Добрый день!

Пытаюсь расшифровать сообщение, полученное от партнера. За основу взял код из примера CMS_samples\CMSDecrypt.java
Проблема возникает в долгой отработке метода decode()
Код:

//разбор CMS-сообщения
Asn1BerDecodeBuffer dbuf = new Asn1BerDecodeBuffer(buffer);
final ContentInfo all = new ContentInfo();
all.decode(dbuf); // тормозит!

На файле размером 10Мб отработка ~10 секунд, 50Мб - около 4 минут! Но в итоге файл дешифруется корректно.
С помощью cryptcp.exe этот же 50Мб файл расшифровывается за пару секунд.
Причем, тестовые файлы, аналогичных размеров, шифрованные, а потом расшифрованные с помощью JCP такой проблемой не страдают.
dumpasn1 на файлах от партнера показал, что блок данных разбит на OCTEC STRING по 1024 байта и таких блоков там огромное количество. (см. ниже)
На тестовых файлах, зашифрованных JCP содержится только 1 блок данных нужной длинны.
JCP 2.0.40450-A

Что можно сделать в такой ситуации?

Код:

 390 NDEF:       SEQUENCE {
 392    9:         OBJECT IDENTIFIER data (1 2 840 113549 1 7 1)
         :           (PKCS #7)
 403   29:         SEQUENCE {
 405    6:           OBJECT IDENTIFIER gostCipher (1 2 643 2 2 21)
         :             (GOST 28147-89 (symmetric key block cipher))
 413   19:           SEQUENCE {
 415    8:             OCTET STRING 8A BA 75 0D B3 85 27 EA
 425    7:             OBJECT IDENTIFIER cryptoProCipherA (1 2 643 2 2 31 1)
         :               (CryptoPro params A for GOST 28147-89)
         :             }
         :           }
 434 NDEF:         [0] {
 436 1024:           OCTET STRING
         :             F2 1A 4F 7B 92 15 41 51 B2 A5 60 57 3E C8 64 85
         :             34 4B 05 14 65 30 38 CD 5C 74 AB C1 52 25 84 EA
         :             B7 44 4D 0A 75 0E 1B 0C EB 9A C8 E6 81 43 08 DD
         :             48 8F 16 23 37 8D B5 70 22 3A B4 61 8F 15 2B 71
         :             4A 1C F7 4A C1 CA 7A CE DF CF 43 13 2C F9 69 A8
         :             7A 84 AE 87 71 42 F6 66 9A 9E E5 B5 C6 3C 1B EA
         :             FC F2 7F D7 34 9B 0C 96 6D 79 26 85 6D 54 D5 3F
         :             F8 C4 C1 ED 0D E4 E7 B4 BA F0 6C FA 6C B6 49 C1
         :                     [ Another 896 bytes skipped ]
1464 1024:           OCTET STRING
         :             47 37 C3 49 29 5E 1D 3A 80 AF 42 D1 92 01 FF C2
         :             64 64 98 95 0D 42 A5 AB 0A A4 CC 0C 21 D2 51 A3
         :             DD D9 15 4A D0 5C 78 40 D3 57 D7 D7 A3 3D 08 63
         :             46 71 8D 26 4D C2 EE A9 8B 0F 6F B9 F6 83 50 29
         :             1A C2 AE 8A F7 8E BD D5 6A 90 EE 05 00 12 43 DC
         :             42 45 A4 42 4F 04 68 7D 61 A2 D1 E7 AA D4 FA 2F
         :             9A C7 E8 7C CD 0F 8A 28 B3 DA 0C 20 D7 A9 7B A4
         :             AE 06 2F C2 41 AF 81 93 5B 7B 5B 3B E4 40 4F A5
         :                     [ Another 896 bytes skipped ]
и т.д...


Online Андрей Писарев  
#2 Оставлено : 26 ноября 2019 г. 9:35:47(UTC)
Андрей *

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

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

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


Цитата:

Что можно сделать в такой ситуации?


Предложить тому, кто генерирует такие файлы - изменить программный код?

Сам отправитель не замеряет быстродействие (не выполняет расшифрование для проверки)?
Техническую поддержку оказываем тут
Наша база знаний
Offline two_oceans  
#3 Оставлено : 26 ноября 2019 г. 10:33:27(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
А не может быть проблема в том что кодировка BER вместо DER? Может быть в тестовых файлах DER? Вот что нашел: http://book.itep.ru/4/44/asn44132.htm
То есть вариант где "все вместе" это BER примитивное кодирование, а вариант с делением на блоки по 1024 байта это BER конструктивное кодирование. DER выбирает примитивное кодирование где возможно.

Если разница 4 минуты, то наверно проще потратить время на предварительное объединение блоков.

Отредактировано пользователем 26 ноября 2019 г. 10:45:40(UTC)  | Причина: Не указана

Offline Donhuan  
#4 Оставлено : 26 ноября 2019 г. 11:24:52(UTC)
Donhuan

Статус: Новичок

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

В библиотеке com.objsys.asn1j Asn1BerDecodeBuffer и Asn1DerDecodeBuffer похоже синонимы. Замена одного другим не меняет результат.
Offline Donhuan  
#5 Оставлено : 26 ноября 2019 г. 11:30:40(UTC)
Donhuan

Статус: Новичок

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

Цитата:


Предложить тому, кто генерирует такие файлы - изменить программный код?

Сам отправитель не замеряет быстродействие (не выполняет расшифрование для проверки)?


Как делают шифрование на той стороне сейчас выясняем. Но, как я уже писал, с помощью cryptcp.exe расшифровка 50Мб файла происходит почти мгновенно. Т.е. реализация под windows как-то умеет быстро справляться с этими блоками.
Offline Евгений Афанасьев  
#6 Оставлено : 29 ноября 2019 г. 19:48:00(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Добрый день.
Попробуйте использовать функционал Cades api, в нем работа осуществляется с потоком данных.
Offline Donhuan  
#7 Оставлено : 6 декабря 2019 г. 9:07:12(UTC)
Donhuan

Статус: Новичок

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

Воспроизведение проблемы:

Берем последние версии cryptcp под windows [4.0.1127.0] и JCP [2.0.40450-A]
Тестовый файл 50мб.
Шифруем cryptcp.win32.exe –encr "recipient.cer" file50mb.txt file50mb.txt.enc
Получаем CMS, в котором данные разбиты на блоки по 1024 байта.
Распаковываем из base64.
Расшифровываем с помощью JCP из примера CMS_samples\CMSDecrypt.java
Получаем торможение около 3-4 минут и 100% загрузку cpu на разборе CMS all.decode(dbuf);

Через Cades проблема не возникает.

Отредактировано пользователем 9 декабря 2019 г. 10:35:05(UTC)  | Причина: Не указана

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