Это называется шифрованием с открытым ключом.
- ваше приложение отправляет свой открытый ключ на сервер
- сервер возвращает зашифрованную строку, которая должна быть добавлена к некоторому префиксу
- ваше приложение запрашивает у сервера его открытый ключ
- ваше приложение расшифровывает строку, добавляет префикс
- шифруется с помощью открытого ключа сервера
- отправить ключ на сервер
- сервер проверяет
Если хакер знает ваш префикс, который находится в вашем двоичном файле, он не будет знать суффикс, который предоставляет сервер, и не сможет расшифровать то, что вы отправляете обратно на сервер, потому что у хакера нет личного ключа сервера. Уязвимость заключается в том, что хакер может извлечь секретный ключ из приложения, чтобы расшифровать суффикс. Но сервер может изменить это каждые несколько секунд, если требуется, или это может зависеть от времени. Несмотря на то, что можно использовать зависящий от времени, лучше выбрать изменяемый суффикс, зависящий от времени, если вы выберете это. В какой-то момент, приложив много усилий и имея суперкомпьютер, хакер может взломать это тоже, найдя ключ, который может расшифровать все полученные в результате строки, которые отправляются обратно, поэтому вы не должны генерировать случайные суффиксы для сервер, но перерабатывают немногие из них.
Если вы считаете, что это слишком много работы, вы можете использовать SecureString и зашифрованные строки подключения. Но это наверняка можно взломать, если у вас есть какое-то время, потому что все необходимое находится на стороне клиента, и хакеру не нужны x * 2 bruteforce decrypt-ion.