В классической теории информации, в той ее части, которая касается защиты, есть перечень атак на клиента и сеть в целом.
Приведу лишь несколько для того, чтоб более менее направить разработчиков в правильное русло, кое есть наука…
1. Атака типа man-in-the-middle
2. Атака повторением
3. Атака на протокол, анализ трафика
4. Отказ от обслуживания
Ну и ряд других…
Надо почитать умные книги — там все сказано.
Самый главный минус всей архитектуры выше состоит в том, что связка открытый-закрытый ключ, генерируются сервером!
Я бы предложил линковать в клиент библиотеку QCA и генерировать ключи локально, отдавая на сервер публичный ключ. Тогда сервер выступал бы только вроде публичной адресной книги для установления соединения между клиентами.