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