Přeskočit na hlavní obsah

Obálka MAC protokolu FLAP

Obálka MAC (nastavení zařízení flap-hash) chrání paket FLAP 64bitovým autentizačním kódem zprávy (MAC) s klíčem claim token zařízení a identifikuje zařízení jeho sériovým číslem. Všechna vícebajtová pole jsou ve formátu big-endian.

+-------------+-----------------+-------------+----------------------+
| MAC tag | Serial number | Header | Data |
| 8 bytes | 4 bytes | 2 bytes | 0 to 494 bytes |
+-------------+-----------------+-------------+----------------------+
\___ MAC envelope ___________/ \___ FLAP packet _________________/
PoleVelikostPopis
Tag MAC8 BAutentizační kód zprávy přes zbytek datagramu, viz Autentizační kód zprávy
Sériové číslo4 BSériové číslo zařízení HARDWARIO jako 32bitové celé číslo bez znaménka, například 2159017985 je 80 b0 00 01
Paket FLAP2 až n BHlavička a data

Cloud odpovídá ve stejné obálce. Obsahuje sériové číslo zařízení a tag MAC spočítaný stejným klíčem, takže zařízení může ověřit, že odpověď pochází z Cloudu a patří jemu.

FormátPort UDPPoužívá
Raw5002Zařízení postavená na nRF9160 nebo nRF9151
Base645003CHESTER (nRF9160)

Autentizační kód zprávy​

Tag MAC chrání integritu a autenticitu sériového čísla a paketu FLAP. Jde o secret-prefix MAC nad SHA-256, jehož 256bitový výstup se zkrátí na 64 bitů pomocí XOR foldingu:

digest = SHA-256( key || serial_number || header || data )
tag[i] = digest[i] ^ digest[i + 8] ^ digest[i + 16] ^ digest[i + 24] for i = 0..7
  • key je šestnáctibajtový claim token zařízení. Zařízení ho zobrazí jako 32 hexadecimálních znaků příkazem shellu info claim-token a stejná hodnota se zadává při přidání zařízení do HARDWARIO Cloud.
  • serial_number, header a data jsou bajty přesně tak, jak jsou v datagramu, tedy vše za tagem MAC.

Příjemce spočítá tag z přijatých bajtů a porovná ho s přijatým tagem. Zařízení musí navíc ověřit, že sériové číslo v odpovědi je jeho vlastní.

Příklad​

S claim tokenem 98a8856ba6534bd5212176b22f3acbb3 a sériovým číslem 2159017985 (0x80b00001) se potvrzení se sekvenčním číslem 20 (hlavička 0x2014, bez dat) spočítá takto:

SHA-256 input 98a8856ba6534bd5212176b22f3acbb3 80b00001 2014
MAC tag 478acfb86b963d2b
Datagram 478acfb86b963d2b 80b00001 2014
Base64 R4rPuGuWPSuAsAABIBQ=

Raw a base64​

Na portu 5002 se obálka MAC posílá surově (raw) jako binární data. Na portu 5003 se celá obálka MAC včetně tagu MAC zakóduje do base64 (RFC 4648, standardní abeceda s doplňováním =) a odešle jako text ASCII. Příjemce base64 nejprve dekóduje zpět na binární obálku a tu pak zpracuje stejně jako na portu 5002. Cloud odpovídá ve stejném formátu.

Formát base64 používá jen zařízení CHESTER, jehož modem nRF9160 se ovládá příkazy AT. V datovém režimu AT ukončuje data sekvence +++, takže binární data, která ji náhodou obsahují, by se usekla. Zařízení CHESTER proto posílá každý datagram jako řetězcový parametr příkazu AT#XSEND, který nese jen text ASCII, a base64 umožní bezpečně přenést binární obálku jako text.

Bezpečnostní vlastnosti​

  • Autentizace a autorizace. Jako zařízení s tímto sériovým číslem se přijme jen odesílatel, který zná claim token, a zařízení přijme odpověď jen od Cloudu, který ho zná.
  • Integrita. Bez claim tokenu nikdo nevytvoří nový paket ani nezmění existující tak, aby ho Cloud nebo zařízení přijaly. Šance uhodnout platný tag je 1 ku 264 na pokus.
  • Ochrana proti opakování. Sekvenční číslo je pokryté kódem MAC, takže ho bez claim tokenu nikdo nezmění. Cloud přijme jen další očekávané sekvenční číslo: přehraný paket se starým sekvenčním číslem ignoruje a zopakování posledního paketu zpracuje jako opakované odeslání (viz Přenosy).
  • Bez šifrování. Data putují jako prostý text. Kde je potřeba důvěrnost, použijte privátní APN s tunelem IPsec (viz Zabezpečení platformy) nebo obálku DTLS.
  • Claim token držte v tajnosti. Je zároveň důkazem vlastnictví při přidání zařízení do Cloudu i klíčem MAC.

Limity velikosti​

FormátMaximální datagramData na fragment downlinku
Raw (port 5002)508 B494 B
Base64 (port 5003)508 znaků360 B
  • Zařízení by mělo i své uplinkové datagramy držet do 508 bajtů. Zařízení CHESTER posílá v base64 nejvýše 360 bajtů dat na fragment.
  • Cloud přijme datagram o velikosti až 1024 bajtů. Delší datagram se ořízne a neprojde ověřením.

Nastavení zařízení​

Zařízení postavená na nRF9151 vybírají obálku a server příkazem shellu cloud config. Příkaz cloud config show vypíše všechna nastavení cloudu. Pro obálku MAC platí:

ParametrVýchozí hodnotaPopis
protocolflap-hashObálka: flap-hash vybere obálku MAC
addr157.245.24.13Výchozí IP adresa serveru
addr2, addr3PrázdnéDruhá a třetí IP adresa serveru, prázdná hodnota znamená nepoužito
port-flap-hash5002Port UDP pro obálku MAC
failover3Počet po sobě jdoucích neúspěšných pokusů, po kterých zařízení přepne na další adresu, 0 přepínání vypne

Výchozí hodnoty adres serveru, portů a failover pocházejí z voleb Kconfig firmwaru, takže je lze změnit při sestavení firmwaru.

Přepnutí zařízení na obálku MAC v shellu zařízení:

cloud config protocol flap-hash
config save

Zařízení CHESTER používá vždy obálku MAC jako text base64. Jeho port (výchozí 5003) se nastavuje při sestavení firmwaru a adresu serveru nastavuje příkaz lte config addr.

Neplatné obálky​

Cloud neodpoví na neplatné base64, obálku kratší než 14 bajtů, sériové číslo 0 ani na sériové číslo, které nezná.

Pokud je sériové číslo známé, ale tag MAC nesouhlasí, Cloud odpoví žádostí o reset (viz Reset).