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