Tohodle bych se nebal, protoze vlastni komunikacni protokol ma svuj pevne dany format a na konci je CRC soucet. Kdyz uz by nahodou kod prosel pres startovni sekvenci CRCcko ho urcite zastavi.
To je dost odvážné tvrzení :-) CRC je příliš krátké na to, aby někoho
určitě zastavilo. Útočník akorát nepošle změněná data hned na první pokus, ale bude muset vystřílet těch pokusů víc.
Popravde receno utajit je nepotrebuju, ale nesmi byt zmeneny.
Pokud to opravdu stačí, stačí ta data podepisovat. Buď klasicky asymetrickými klíči, nebo pokud můžete klientům věřit, pak stačí použít ten hash (data + sdílený klíč). Inspirovat se můžete třeba u JSON Web Token, jakým způsobem je to podepisováno.
Jak nad tim ale premejslim tak moc nedokazu pochopit co se bude dit, kdyz utocnik zachyti dva zasifrovane ramce. Jeden bude znamenat napr. odemkni dvere a druhy zamkni dvere. Pokud jsou to platne ramce a utocnik je bude stridave odesilat, tak je zarizeni musi preci nutne vyhodnotit jako spravne. Nenapada me mechanismus jak by se dalo zajistit aby to zarizeni odmitlo pozadavek. Mozna mi stale neco unika...nebylo by to naposled 
To je zase jiná věc – obrana proti replay attack. Tam je potřeba vyřešit, aby každý požadavek musel být jiný. Například můžete na obou stranách držet sekvenční číslo – server zvýší číslo o jedničku a pošle požadavek. Klient si ověří, že sekvenční číslo požadavku je nižší, než poslední známé číslo – pokud ano, požadavek je platný a provede se, a čítač se posune na nejnovější číslo. Kdyby útočník vzal data a poslal je znovu, klient bude vědět, že tohle sekvenční číslo už vylo použité dříve a že je to opakování požadavku. Díky tomu, že to celé máte v TCP/IP spojení, nemusíte řešit, že by požadavky přišly v jiném pořadí. Ještě bude potřeba dořešit přetočení sekvence – buď ji nadimenzovat tak, aby se nikdy nepřetočila (např. pokud zařízení fyzicky zvládne provést cca 1000 příkazů a pak už bude tak opotřebované, že přestane fungovat, je sekvence s prostorem 4 miliardy hodnot dostatečná rezerva). Případně se dají sekvenční čísla počítat jen v rámci jednoho TCP/IP spojení, pak ale zase musíte řešit, jak zabránit tomu, aby útočník nezopakoval celé dřívější spojení (nebo jeho začátek). Pomůže třeba pokud má ten klient přesný čas (pak může být součástí přenášených dat, klient ho ověří – pokud by někdo data zopakoval, buď nebude sedět čas, nebo opakování přijde velice rychle za sebou – předpokládám, že pokud přijdou třeba během vteřiny dva příkazy na zavření ničemu to nevadí).
Akorát to trochu vypadá, že tu znovu vymýšlíme TLS. A to není zrovna jednoduché – i experti v tom dělají chyby, takže dnes už máme 6. verzi. Chápu, že bude problém použít hotovou knihovnu, implementovat celé TLS na zelné louce je hodně náročné – ale tohle vyzobávání dílčích částí, které vám budou stačit a které bude snadné implementovat, určitě povede k tomu, že na něco zapomeneme. Další věc je, jakou úroveň spolehlivosti potřebujete. TLS věří i banky a vlády, vám možná stačí nižší spolehlivost, takže by pak nemuselo tolik vadit, že tam budou nějaké menší díry, které bude relativně náročné zneužít.