23.12.2005 18:50:06Блочное шифрование и лишние 8 байт Ответов: 2
Максим
Скажите, почему размер зашифрованного сообщения больше на 8 байт? Туда пишется контрольная сумма? IV? В моем приложении размер зашифрованных данных обязательно должен быть равен размеру исходных. Подскажите, как решить проблему.
 
Ответы:
26.12.2005 10:59:02Василий
Функционирует в полном соответствии с MSDN.
По умолчанию для блочного шифрования используется метод дополнения (параметр KP_PADDING) под названием PKCS5_PADDING, т.е. стандарт PKCS 5. Вот его описание (из нашей документации на КриптоПро CSP):
ДОПОЛНЕНИЕ PKCS #5 Эта схема дополнения определена RSA Data Security, Inc. и описана в "Public-Key Cryptography Standards (PKCS)", PKCS #5, раздел 6.2. При использовании данной схемы, последовательность всегда дополняется знаками, даже в случае, когда её длина кратна длине блока шифрования. Последовательность дополнения состоит из байтов, каждый из которых равен числу дополнительных байтов. Если дополняется последовательность из 24 бит, последовательность дополнения равна “05 05 05 05 05”. Если дополняется 64 бита, последовательность дополнения равна “08 08 08 08 08 08 08 08”. При расшифровании, если расширение блока удовлетворяет условиям дополнения PKCS #5, функция CPDecrypt() в переменной pdwDataLen, возвращает истинное значение длины открытого текста. Если расширение блока не удовлетворяет условиям дополнения PKCS #5, функция CPDecrypt() возвращет ошибку NTE_BAD_DATA,а в переменной pdeDataLen значение длины шифрованного текста. Дополнение PKCS #5 не обеспечивает контроль целостности данных.

Другие виды дополнений:
ДОПОЛНЕНИЕ ZERO При использовании данной схемы, последовательность дополняется нулевыми байтами до наименьшей длины, кратной длине блока шифрования. ДОПОЛНЕНИЕ RANDOM При использовании данной схемы, последовательность дополняется случайными байтами до наименьшей длины, кратной длине блока шифрования.
26.12.2005 11:02:55Василий
Да, если не хотите увеличения размера шифртекста, не используйте блочное шифрование.
Параметр KP_MODE функции CryptSetKeyParam
Режим шифра. Переменная типа DWORD. Передаётся функции через буфер pbData. В следующем списке приведены режимы шифрования, доступные в настоящее время:
CRYPT_MODE_ECB - блочный шифр простой замены ГОСТ 28147-89;
CRYPT_MODE_CNT - шифрование гаммированием ГОСТ 28147-89;
CRYPT_MODE_CFB - шифрование гаммированием с обратной связью ГОСТ 28147-89;
CRYPT_MODE_CBC - блочный шифр с обратной связью на базе ГОСТ 28147-89.