Заключительный этап шифрования или дешифрования выполняется без предыдущих шагов обновления
Этот дефект возникает при неправильном выполнении последнего шага блочного шифрования или дешифрования.
Например, можно выполнить одно из следующих действий:
Перед выполнением последнего шага действия по обновлению для шифрования или дешифрования данных не выполняются.
/* 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++ |
| По умолчанию: Откл. |
Синтаксис командной строки: CRYPTO_CIPHER_NO_DATA |
| Воздействие: среднее |
| CWE ID: 311, 325, 372, 664 |