Для начала, я ни в коем случае не эксперт или что-то близкое к этому в криптографии. Я знаю об этом самое основное, достаточно, чтобы более или менее выбрать метод для реализации, а затем прочитать об этом, чтобы я знал, что я реализую. Так что, пожалуйста, извините за якобы глупые вопросы, ха-ха.
Имея это в виду, я создал класс шифрования/дешифрования AES-256/CBC/PKCS#7 + HMAC-SHA512 в приложении-помощнике Android, которое я делаю (предположительно, локально (очень?) личные вещи, и я мог бы опубликовать это в Play Store, так что это не только для меня). Предполагается, что эта комбинация будет очень надежной в течение следующих ??(?) лет. Может быть немного медленнее, но я не возражаю, по крайней мере, сейчас (очень мало данных). Хотя я также читал, что с этим есть одна проблема, когда вектор инициализации используется повторно. Кажется, что с CBC невозможно вернуть данные (правильно?), как это возможно с другими режимами, и поэтому я выбрал этот. [Если есть какие-либо другие проблемы с этим методом, я буду рад узнать о них.]
Но через некоторое время можно обнаружить шаблоны и увидеть, где сообщения равны (равные блоки по 16 байт). Зная, что означает этот блок, можно было бы знать, что он не изменился с течением времени, например, после различных зашифрованных версий.
Поэтому у меня возникла идея: все данные, которые я шифрую, должны быть закодированы с использованием UTF-7. Остальные значения байтов (128-255) используются как случайные значения, которые помещаются по одному на каждые 16 байтов в случайной позиции. Например, в индексе 4 добавляется 154 байта, а в индексе 19 добавляется 234 байта. Таким образом, это всегда случайно, и на самом деле равные блоки данных будут другими, если один и тот же IV используется повторно («случайные» могут повторять значения, и я не могу проверить, использовал ли я их уже в этом случае, поэтому я подумал на этом, чтобы предотвратить проблемы).
Хороший ли это подход? Может ли это смягчить проблему? Может быть, решить его полностью за следующие бесконечные годы, и теперь метод станет полностью безопасным или, по крайней мере, намного более безопасным?
Кроме того, если я что-то сказал не так, я буду рад, если меня поправят! Спасибо!