Заключительный шаг шифрования или дешифрования выполняется без предыдущих шагов обновления
Этот дефект возникает, когда вы выполняете последний шаг шифрования или расшифровки блочного шифра неправильно.
Например, вы делаете одно из следующих:
Вы не выполняете шаги обновления для шифрования или расшифровки данных перед выполнением последнего шага.
/* Initialization of cipher context */ ret = EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); ... /* Missing update step */ ... /* Final step */ ret = EVP_EncryptFinal_ex(ctx, out_buf, &out_len);
Вы выполняете последовательные заключительные шаги без промежуточной инициализации и шагов обновления.
/* Initialization of cipher context */ ret = EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); ... /* Update step(s) */ ret = EVP_EncryptUpdate(ctx, out_buf, &out_len, src, len); ... /* Final step */ ret = EVP_EncryptFinal_ex(ctx, out_buf, &out_len); ... /* Missing initialization and update */ ... /* Second final step */ ret = EVP_EncryptFinal_ex(ctx, out_buf, &out_len);
Необходимо выполнить очистку контекста шифра, а затем выполнить заключительный шаг.
/* Initialization of cipher context */ ret = EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); ... /* Update step(s) */ ret = EVP_EncryptUpdate(ctx, out_buf, &out_len, src, len); ... /* Cleanup of cipher context */ EVP_CIPHER_CTX_cleanup(ctx); ... /* Second final step */ ret = EVP_EncryptFinal_ex(ctx, out_buf, &out_len);
Блочные шифры разбивают ваши данные на блоки фиксированного размера. Во время шифрования или расшифровки шаг обновления шифрует или расшифровывает ваши данные в блоках. Все оставшиеся данные шифруются или расшифровываются на заключительном этапе. Заключительный шаг добавляет заполнение к оставшимся данным так, чтобы оно занимало один блок, и затем шифрует или расшифровывает заполненные данные.
Если вы выполняете последний шаг перед выполнением шагов обновления или выполняете последний шаг, когда нет данных для обработки, поведение не определено. Вы также можете столкнуться с ошибками времени выполнения.
Выполните шифрование или расшифровку в следующей последовательности:
Инициализация контекста шифра
Шаги обновления
Заключительный шаг
Очистка контекста
Группа: Криптография |
Язык: C | C++ |
По умолчанию: Off |
Синтаксис командной строки: CRYPTO_CIPHER_NO_DATA |
Влияние: Средний |
ИДЕНТИФИКАТОР CWE : 311, 325, 372, 664 |