Хотя в идеальном мире и был бы лучший подход, вы в настоящее время работаете в рамках возможностей вашей крошечной системы.
В этой ситуации я считаю ваш подход разумным: сервер просто сообщает клиенту, используя небезопасный транспорт, о том, что ожидается некоторое сообщение (то есть отправляет некоторое триггерное сообщение, фактическая полезная нагрузка не имеет значения), а затем клиент получает сообщение, используя транспорт, который защищает сообщение от перехвата и изменения, а также гарантирует, что сообщение действительно пришло с сервера (т. е. аутентификация).
Поскольку триггерное сообщение с сервера не содержит фактической полезной нагрузки (прибытие самого сообщения является достаточной полезной нагрузкой), злоумышленник не может изменить или подделать сообщение, чтобы создать небезопасное поведение на клиенте. Худшее, что может случиться, - это то, что какой-то злоумышленник либо заблокирует клиенту получение триггерных сообщений, либо злоумышленник подделает триггерные сообщения, даже если от сервера не поступает действительная команда.
Если последний случай рассматривается как проблема, он может иметь дело с ограничением скорости, т. Е. Если сервер не вернул какую-либо команду, хотя клиент получил триггерное сообщение, то клиент подождет некоторое минимальное время, прежде чем снова связаться с сервером, независимо от того, было ли получено сообщение о запуске или нет. Первый случай, когда злоумышленник может блокировать сообщения с сервера, сложнее, так как в этом случае злоумышленник, вероятно, также может заблокировать дальнейшую связь между клиентом и сервером - но это проблема для любого вида связи между клиентом. и сервер.