Если у вас нет безопасного канала, вы не можете доверять IV, который отправляет вам другая сторона, потому что злоумышленник вполне может подделать его. Даже если у вас есть безопасный канал, другая сторона может не считаться особенно надежной.
Если на вашем главном устройстве есть какой-то CSPRNG, независимо от того, питается ли он генератором случайных чисел или нет, вы можете его использовать. В противном случае, если у вас может быть какой-то постоянный счетчик, одним из простых способов справиться с этим является использование функции вывода ключа, такой как HKDF. Просто используйте свой общий ключ в качестве ввода энтропии в функции вывода ключа, используйте счетчик в качестве соли, а затем сгенерируйте обе новый ключ и IV для каждого сообщения. Отправьте счетчик вместо IV вместе с сообщением, и другая сторона сможет получить ваш ключ.
Это может работать, даже если у вас нет постоянного счетчика, если на ведущем устройстве есть доверенные часы. Вы можете использовать отметку времени плюс более эфемерный счетчик или любой другой тип данных, которые гарантированно не повторяются, и использовать это в HKDF. Затем вы просто отправляете это вместе с сообщением, и обе стороны могут согласовать секретный ключ и IV.
Как упоминалось навсегда, вы также можете использовать протокол двойного храповика, хотя он более сложный. Это также требует, чтобы обе стороны, по крайней мере изначально, имели CSPRNG, поскольку он вам понадобится для ключей Диффи-Хеллмана.