Я немного смущен, как правильно использовать AES и HMAC (на основе SHA-256) при передаче зашифрованного сообщения от сервера к клиенту или наоборот
Исправьте меня, пожалуйста, если следующий метод неверен:
- Возьмите защищенный ключ из файла ключей (например, мы предлагаем использовать AES-256, и у нас уже есть действительный ключ длиной в 256 бит)
- Генерируйте случайный IV для AES-256, чтобы быть уверенным, что один и тот же обычный текст будет иметь разный вывод шифрования.
- Вычислить HMAC-SHA-256, используя простой текст и защищенный ключ. (Первый вопрос: следует ли использовать IV для вычисления HMAC? Например, присоединить к защищенному ключу?)
- Зашифруйте простой текст с помощью AES-256.
- Составьте сообщение для клиента следующим образом: HMAC + IV + ENCRYPTED_MESSAGE
Самый большой вопрос: возможно ли каким-то образом не отправлять IV клиенту, а генерировать его таким же образом и по-прежнему быть криптобезопасным? Или это нормально, чтобы отправить IV тоже?
В конечном итоге я получаю произвольное IV поколение, потому что необходимо, чтобы один и тот же простой текст заканчивался разными результатами шифрования.