1. Нужно каждому терминалу назначить свой секретный ключ, которым он будет делать цифровую подпись и которым будет декодировать принятые сообщения. Делать общий ключ для сервера нельзя, так как сложно сделать ключ не извлекаемым из терминала. При компрометации одного терминала (украли, вскрыли), теряете только его безопасность, а не всей сети. Соответственно, нужно хранить ключи на сервере отдельно для каждого терминала. Так можно использовать обычные МК.
В крупных сетях ставят специальные контроллеры, в которых ключ хранится, шифрует и дешифрует внутри чипа защищённо и неизвлекаемо. Тогда можно прошивать всем один общий ключ сервера. Удобно, но вряд ли это наш случай. Но вдруг выйдут наши МК с достаточной защитой? Нужно поглядывать.
2. Использовать шифрование не хуже AES256. Любые, популярные в прошлом, менее стойкие алгоритмы вскрываются, утрирую, школьниками. Что-нибудь самописное - можно сесть в лужу с security through obscurity. Делайте так, чтобы злоумышленник, имея на руках ваш вскрытый терминал, с извлечённым ключом, мог расшифровать то, что вы отправляли этому терминалу, знал, какой шифр используется. Но не мог ничего сделать с любыми другими не вскрытыми - у всех разные ключи, а собранных данных (даже если перехватить все шифровки) недостаточно для вскрытия хотя бы одного ключа.