Во-первых, передача зашифрованного текста и ключа через небезопасный канал, как вы, вероятно, можете определить, небезопасна. Сохранение зашифрованного текста и ключа вместе в одном месте - это то же самое, что хранить открытый текст, поэтому не делайте этого.
Вместо того, чтобы определять, правильно ли задан ключ для зашифрованного текста, криптографические системы вместо этого определяют, является ли зашифрованный текст законным, прежде чем они даже расшифруют. Наиболее распространенный способ сделать это - использовать MAC или Code Authentication Code. HMAC - это общий способ сделать это, как и аутентифицированные блочные режимы, такие как GCM.
И, наконец, IV используется для обеспечения того, чтобы дублированные блоки открытого текста не приводили к повторным блокам зашифрованного текста. Например. в режиме ECB, который не использует IV, каждый идентичный блок открытого текста будет шифровать один и тот же шифрованный текст под заданным ключом. Применение IV (в таких режимах, как CBC) гарантирует, что одинаковые блоки открытого текста выглядят по-разному из-за прикованной операции XOR, которая начинается с IV.
Чтобы решить вашу проблему, используйте режим GCM или используйте KDF для получения симметричного ключа и ключа для HMAC.
Обратите внимание, что вопросы, связанные с криптографией, которые не связаны напрямую с программированием, лучше задавать на [сайте crypto sister] (http://crypto.stackexchange.com) –