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

Уведомление

Icon
Error

5 Страницы«<345
Опции
К последнему сообщению К первому непрочитанному
Offline Юрий  
#41 Оставлено : 26 сентября 2013 г. 11:27:41(UTC)
Юрий

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

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 675
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 3 раз
Поблагодарили: 95 раз в 68 постах
Ладно, если уж очень хочется странного (получить DER, а не BER), то используйте в CMSG_STREAM_INFO результат работы функции CryptMsgCalculateEncodedLength и возможно наступит счастье.
Хотя CryptDecryptMessage прекрасно работает и с BER на самом деле.
С уважением,
Юрий Строжевский
Offline burning-dragon  
#42 Оставлено : 26 сентября 2013 г. 11:58:47(UTC)
burning-dragon

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

Группы: Участники
Зарегистрирован: 19.09.2013(UTC)
Сообщений: 18

При указании размера возвращаемого CryptMsgCalculateEncodedLength счастья не наступило.
CryptDecryptMessage смогла расшифровать файлик в BER размером 2кб, а вот на 5мб уже споткнулась с сообщением "Нехватка памяти для ASN1. (0x80093106)".
В DER кодировке такие файлы проблемой не являются.
Offline Максим Коллегин  
#43 Оставлено : 15 января 2014 г. 11:25:37(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,421
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 38 раз
Поблагодарили: 734 раз в 632 постах
Наконец дошли руки разобраться с проблемой.
1. cbContent должен быть равен размеру зашифровываемых данных, иначе нарушается структура ASN1, ровно поэтому при маленьких размерах возникает ошибка отсутствия ключей - информация о сертификате не попадает в сообщение. Для нашего CSP было несколько ошибок реализации такого варианта использования - постараемся исправить.
2. Если cbContext равен -1, то все работает.
3. В исходном коде ошибка - не всегда вызывается с fFinal = true в последнем блоке.
Знания в базе знаний, поддержка в центре поддержки
Offline Максим Коллегин  
#44 Оставлено : 5 декабря 2014 г. 7:35:43(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,421
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 38 раз
Поблагодарили: 734 раз в 632 постах
Ошибки в CSP исправлены только в CSP 4.0, в сборках с февраля 2014.
Есть один нюанс. MS использует размер блока ключа (8 байт) в качестве размера блока шифруемых данных - скорость поточного шифрования по 8 байт будет весьма невысокой (несколько мегабайт в секунду)
Но есть параметр dwKeyZeroBlockLen (HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Crypto Pro\Cryptography\CurrentVersion\Parameters), указав размер ~несколько килобайт скорость на порядок вырастет, но при этом поточное шифрование в DER работать не сможет.
Знания в базе знаний, поддержка в центре поддержки
thanks 1 пользователь поблагодарил Максим Коллегин за этот пост.
Андрей * оставлено 05.12.2014(UTC)
Offline TestUser  
#45 Оставлено : 10 марта 2015 г. 18:40:07(UTC)
TestUser

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

Группы: Участники
Зарегистрирован: 10.03.2015(UTC)
Сообщений: 3

Сказал(а) «Спасибо»: 1 раз
Добрый день!

Верно ли, что при расшифровании данных в потоковом режиме, всё зашифрованное сообщение от момента последнего вызова CryptMsgUpdate до первого вызова CryptMsgControl будет находиться в памяти приложения?

Отредактировано пользователем 10 марта 2015 г. 18:56:06(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#46 Оставлено : 10 марта 2015 г. 19:20:06(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,421
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 38 раз
Поблагодарили: 734 раз в 632 постах
Нет.
Знания в базе знаний, поддержка в центре поддержки
Offline TestUser  
#47 Оставлено : 11 марта 2015 г. 9:56:55(UTC)
TestUser

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

Группы: Участники
Зарегистрирован: 10.03.2015(UTC)
Сообщений: 3

Сказал(а) «Спасибо»: 1 раз
В таком случае не очень ясна последовательность действий.
Возьмём в качестве образца пример из КриптоПро .NET StreamVerify.cs.
Последовательность действий следующая:
1. Открытие сообщения для декодирования и передача структуры CMSG_STREAM_INFO.
2. Чтение входного потока файла небольшими порциями и передача их в CryptMsgUpdate.
3. Чтение заголовков получившегося сообщения и получение информации о подписанте.
4. Вызов CryptMsgControl.

Разве на шаге 2 не весь файл целиком перемещается в память?

Для случая расшифрования на этапе 2 после каждого вызова CryptMsgUpdate можно проверять доступность параметра сообщения CMSG_ENVELOPE_ALGORITHM_PARAM. Если данной параметр ещё не доступен, то CryptMsgGetParam вернёт ошибку CRYPT_E_STREAM_MSG_NOT_READY. Как только этот параметр станет доступным, можно получать информацию о получателях сообщения и вызывать CryptMsgControl. Но как в этом случае передать оставшиеся данные для расшифрования?
Если продолжить читать файл и вызывать последовательно CryptMsgUpdate и CryptMsgControl, то уже на второй итерации вызов CryptMsgControl возвращает ошибку CRYPT_E_ALREADY_DECRYPTED.
Offline Георгий Садофьев  
#48 Оставлено : 11 марта 2015 г. 11:18:00(UTC)
Георгий Садофьев

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

Группы: Участники
Зарегистрирован: 14.10.2011(UTC)
Сообщений: 150
Мужчина

Поблагодарили: 33 раз в 32 постах
CrypMsgControl достаточно вызвать один раз для начала процесса расшифрования.
Затем данные добавляются вызовом CryptMsgUpdate и расшифровываются.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Георгий Садофьев за этот пост.
TestUser оставлено 11.03.2015(UTC)
Offline TestUser  
#49 Оставлено : 11 марта 2015 г. 11:51:07(UTC)
TestUser

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

Группы: Участники
Зарегистрирован: 10.03.2015(UTC)
Сообщений: 3

Сказал(а) «Спасибо»: 1 раз
Спасибо!

Ещё вопрос.
Есть ли ограничение на размер буфера, передаваемого в функцию CryptMsgUpdate?

При передаче буфера размером 10 MB (а именно 1024*1000*10 байтов) возникает ошибка E_OUTOFMEMORY.

В данной статье (ссылка) указывается значение 1024*1000*100 (примерно 97 MB):

Цитата:
It turns out that CryptMsgUpdate API has a limit on the size of the data that we can pass to it when decoding (when used along with CryptMsgOpenToDecode). This limit is 1024 * 1000 * 100 bytes (around 100MB), and it was set starting on Windows XP SP2 and Windows Server 2003 SP1. This applies to all versions of Windows after that, regardless of being x86 or x64.


А также сообщение от MS: Ошибка при декодировании данных.
Цитата (ссылка):

Цитата:
There is a counter in the ASN structure that is increased every time an octet block is processed when the ASN sequence that wraps the octets is BER encoded. It adds the number of bytes that have already been processed plus the new block size; as the number of processed bytes grows that is added to the counter and the rate at which the counter grows increases. Since the counter is represented by an integer it can overflow. On Windows 7, the ASN code checks for overflow so the function fails. On pre-Windows 7 platforms, the overflow still occurs but it wasn't checked. That counter is not critical for operation and did not cause issues in the code for the previous versions of the OS.

Offline Максим Коллегин  
#50 Оставлено : 11 марта 2015 г. 11:59:32(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,421
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 38 раз
Поблагодарили: 734 раз в 632 постах
Нужно определять экспериментально.
Знания в базе знаний, поддержка в центре поддержки
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
5 Страницы«<345
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.