Jste zde

Jednoduché řešení bezpečného připojení IoT zařízení do cloudu

Bezpečnostní hrozby, které hrozí IoT zařízením jsou všude kolem nás. Představíme si příslušný hardware, který je v současné době používán k zesílení bezpečnosti celé aplikace. Identifikujeme bezpečnostní mezery a jak mohou vývojáři a návrháři vestavěných systémů používat JSON Web Token (JWT) k jejich odstranění.

Vývojáři často vyhledávají rychlou cestu ke zprovoznění bezpečné komunikace s cloudem. Musí volit kompromis mezi složitostí bezpečnostního systému a velikostí paměti či výkonem procesoru, které jsou implementovány do malých bateriových zařízeních IoT. Existují hotová řešení, které tyto problémy odstraňují a zjednodušují implementaci bezpečnostních prvků v zařízeních IoT.

Společnost  Microchip Technology a společnost Google vytvořili řešení, které kombinuje schopnosti zabezpečeného hardwaru společnosti Microchip s jednoduchou datovou strukturou JSON Web Token (JWT). Výsledkem je snadná metoda pro zajištění vzájemné autentizace mezi zařízeními IoT a službou Cloud IoT Core.

Zranitelnost IoT zařízení

Útoky na zařízení, které mají přístup k internetu mohou mít mnoho podob. Dokonce i nejmenší síť IoT zařízeních není v bezpečí. Často jsou cílem pro hackery, kteří tyto zařízení využijí pro své botnety (automaty se škodlivým kódem), aby mohli ovlivnit službu (DDoS) a další. Proto je nutné, aby každé zařízení připojené k internetu chránilo svůj systém. Ochrana spočívá v použití robustních hardwarových bezpečnostních mechanismů, které jsou schopny takové útoky odrazit. Pokud použijeme systémovou paměť nebo flash paměť k ukládání soukromých klíčů používaných pro šifrování a autentizaci, zařízení IoT se stane zranitelným. Hackeři tyto klíče mohou ukrást a využít je k získání přístupu k síti a k citlivým firemním údajům.

Integrované obvody pro bezpečnost

Specializované bezpečnostní obvody, jako jsou integrované obvody CryptoMemory a CryptoAuthentication od společnosti Microchip Technology mají integrovány hardwarové  mechanizmy, které chrání soukromé klíče a další tajná data. Bezpečného úložiště EEPROM lze dosáhnout pouze pomocí kryptograficky zabezpečených mechanismů, které jsou přístupné prostřednictvím sériového rozhraní SPI nebo I2C (obrázek 1). Výsledkem je součástka, která se jednoduše integruje do IoT zařízení a tím získáme bezpečné uložiště pro citlivá data.

Obrázek 1: CryptoMemory IC AT88SC0204C zajišťuje bezpečné ukládání do paměti EEPROM pomocí integrovaných kryptografických mechanismů. (Zdroj obrázku: technologie Microchip)

 

ATECC608A patří do rodiny čipů CryptoAuthentication od Microchipu. Vylepšují bezpečnost úložného prostoru, jelikož obsahují sadu kryptografických algoritmů. Je vybaven hardwarovou akcelerací pro náročné algoritmy:

Asymetrické kryptografické algoritmy:

  • FIPS186-3 algoritmus digitálního podpisu eliptické křivky (ECDSA)
  • FIPS SP800-56A eliptická křivka Diffie-Hellman (ECDH)
  • NIST Standardní kryptografie s eliptickou křivkou P256 (ECC)

Symetrické kryptografické algoritmy:

  • SHA-256 hash cryptography
  • Kryptografie HMA (Hash-based authentication code)
  • Kryptografie AES-128
  • AES-GCM (Galois field multiply) kryptografie

Klíčové derivační funkce (KDF):

  • Pseudonáhodná funkce (PRF) KDF
  • Extrakt a rozšíření založené na HMAC KDF (HKDF)

 

Pro experty představuje tato sada kryptografických funkcí komplexní sadu mechanismů potřebných pro podporu protokolů vyšší úrovně pro autentizaci a bezpečnou výměnu dat. Například, schopnost KDF poskytuje základní mechanismy potřebné pro zabezpečení přenosové vrstvy (TLS) pro autentizaci účastníků ještě před zahájením výměny dat.

V tomto protokolu TLS spojení(session) začíná klientem, který pošle serveru žádost na zahájení zabezpečeného spojení (session). Server odpovídá svým digitálním certifikátem, který klient používá k potvrzení totožnosti serveru. Poté, co klient tímto způsobem autentizuje server, nastavení spojení(session) pokračuje tím, že klient vygeneruje klíč spojení pomocí veřejného klíče serveru pro šifrování pomocí náhodných hodnot vytvořených pomocí PRF KDF nebo robustnějšího HDKF.

Autentizační protokol TLS je zásadní pro zabezpečení sítě Internet. Poskytovatelé certifikátů se nazývají certifikačními autoritami (CA), které jsou nedílnou součástí zabezpečené komunikace. Klienti (společnosti) získají důvěryhodné certifikáty od certifikačních autorit, aby si je nainstalovali na své vlastní servery. Tím mohou ve své komunikaci používat standardní autentizační protokol TLS popsaný výše.

U aplikací IoT, kde se sítě propojují s firemními zdroji, tento druh jednosměrné autentizace nestačí k zajištění ochrany. Například, hackeři s podvodnými certifikáty mohou reprezentovat sebe jako legitimní servery, ke kterým se připojují zařízení IoT, a tím využít této slabiny k útoku na citlivá data.

Certifikáty, klíče, a software potřebný k implementaci autentizace klientů pomocí TLS může překročit možnosti mnoha zařízení IoT. Proto se často volí implementace protokolu vzájemného ověřování TLS. Microchip Technology a Google vytvořili alternativní přístup, který kombinuje schopnosti ATECC608A s jednoduchou datovou strukturou nazývanou JSON Web Token (JWT). Výsledkem je snadná metoda pro zajištění vzájemné autentizace mezi zařízeními IoT a službami Core Cloud IoT Core.

Autentizace založená na JSON Web Token (JWT)

JWT je otevřený standard (RFC 75193), který definuje kompaktní a nezávislý způsob pro bezpečný přenos informací mezi stranami pomocí JSON objektu. Tyto informace lze ověřit a lze jim důvěřovat, protože jsou digitálně podepsány. JWT může být podepsán pomocí tajného hesla (HMAC) nebo pomocí páru veřejný/privátní klíč za použití RSA. Samotná struktura JWT se skládá ze tří částí:

Header(„Hlavička“) - obsahuje JSON jméno: název ("alg") kryptografického algoritmu (například "EC256" pro ECDSA s použitím křivky NIST P-256), použitý k podpisu tokenu a typ tokenu (" typ") např. " JWT ".

Payload(„Užitný náklad “) -  zahrnuje název JSON: obsahuje tvrzení o entitě (např. uživatel) a další metadata. Existují tři druhy tvrzení: rezervované (reserved), veřejné (public) a privátní (private)

Signature(„Podpis“) - k vytvoření podpisu je zapotřebí vzít zakódovanou hlavičku, zakódovaný náklad, tajný klíč a algoritmus specifikovaný v hlavičce, a to vše následně podepsat.

RFC 7519 poskytuje velkou flexibilitu při určování nároků v „payloadu“ nebo v jiných částech. Tento standard dokonce umožňuje nezabezpečené JWT, vytvořené bez podpisu nebo šifrování. V tomto případě by hlavička zahrnovala název algoritmu jako {"alg": "none"}. Pro služby JWT používané s hlavními službami služby Google Cloud IoT Core vyžaduje společnost Google sekci podpisů a „payload“ se třemi povinnými nároky(claim), včetně:

  • "iat" – „issued at“ čas, kdy byl token vytvořen. Formát časového razítka je ISO 8601 UTC jako sekundy od 1970-01-01T00: 00Z (například 1561896000 pro 30. června 2019 12:00:00 GMT ).
  • "exp" - časové razítko UTC, které určuje vypršení platnosti tokenu s maximální hodnotou 24 hodin po uplynutí doby "iat" plus deset minut navíc, kvůli zkreslení systémových hodin mezi různými klienty a servery (například 1561982400 pro 1. červenec 2019 12:00:00 PM GMT)
  • "aud" - řetězec obsahující ID projektu Google Cloud

 

Google schéma pro autentizaci zařízení IoT kombinuje normální autentizaci serveru založenou na TLS s autentizací pomocí JWT. Chcete-li zahájit nové spojení(session), zařízení IoT otevře zabezpečený soket pro server a ověří server pomocí stejného protokolu TLS popsaného výše.

Další krok v tomto procesu spočívá v tom, že služba Google IoT využívá protokol MQTT pro transakce sítě IoT. Pomocí zabezpečeného soketu pro ověřený server se zařízení IoT "přihlásí" na hostitelské služby MQTT tohoto serveru pomocí jedinečného JWT jako přihlašovacího hesla (Výpis 1).

/* Populate the buffer with the username */
int config_get_client_username(char* buf, size_t buflen)
{
    if(buf && buflen)
    {
        int rv = snprintf(buf, buflen, "unused");
 
        if(0 < rv && rv < buflen)
        {
            buf[rv] = 0;
            return 0;
        }
    }
    return -1;
}
 
/* Populate the buffer with the user's password */
int config_get_client_password(char* buf, size_t buflen)
{
    int rv = -1;
    if(buf && buflen)
    {
        atca_jwt_t jwt; 
        uint32_t ts = time_utils_get_utc();
        rv = atcab_init(&cfg_ateccx08a_i2c_default);
        if(ATCA_SUCCESS != rv)
        {
            return rv;
        }
        /* Build the JWT */
        rv = atca_jwt_init(&jwt, buf, buflen);
        if(ATCA_SUCCESS != rv)
        {
            return rv;
        }
        if(ATCA_SUCCESS != (rv = atca_jwt_add_claim_numeric(&jwt, "iat", ts)))
        {
            return rv;
        }
        if(ATCA_SUCCESS != (rv = atca_jwt_add_claim_numeric(&jwt, "exp", ts + 86400)))
        {
            return rv;
        }
        if(ATCA_SUCCESS != (rv = atca_jwt_add_claim_string(&jwt, "aud", config_gcp_project_id)))
        {
            return rv;
        }
        rv = atca_jwt_finalize(&jwt, 0);
        atcab_release();
    }
    return rv;
}
 

Výpis 1: Zahrnuje software sample repository v Microchip Technology Google Cloud Platform IoT Core. Modul poskytuje rutiny pro vytvoření fiktivního uživatelského jména a objekt JWT jako heslo pro autentizaci klienta s hostitelem MQTT. (Zdroj kódu: technologie Microchip)

I když zařízení IoT pošle uživatelské jméno jako součást této přihlašovací sekvence, uživatelské jméno se nepoužívá k autentizaci. Následně se přenáší fiktivní uživatelské jméno (Výpis 2). Místo toho autentizace zařízení IoT probíhá na základě JWT odeslaného jako přihlašovací heslo. Protože podpis JWT je kombinací hlavičky, „payloadu“, a soukromého klíče zařízení, služby Google Cloud IoT Core mohou ověřit, že JWT opravdu pochází z autorizovaného zařízení. Pro toto ověření služby Google Cloud IoT využívají veřejný klíč, který byl dříve uložen v cloudu Google vývojářem zařízení IoT, a to pomocí níže popsaného postupu správy klíčů. Na rozdíl od použití samotného TLS, tento přístup poskytuje vzájemnou autentizaci pomocí hybridního přístupu, který proces urychluje a zároveň snižuje požadavky na zařízení IoT.

/* Connect the MQTT Client to the host */
static int client_connect(void* pCtx)
{
    MQTTPacket_connectData mqtt_options = MQTTPacket_connectData_initializer;
    struct _g_client_context* ctx = (struct _g_client_context*)pCtx;
    size_t buf_bytes_remaining = CLIENT_MQTT_RX_BUF_SIZE;
 
    mqtt_options.keepAliveInterval = MQTT_KEEP_ALIVE_INTERVAL_S;
    mqtt_options.cleansession = 1;
    /* Client ID String */
    mqtt_options.clientID.cstring = (char*)&ctx->mqtt_rx_buf[0];
    if(config_get_client_id(mqtt_options.clientID.cstring, buf_bytes_remaining))
    {
        return MQTTCLIENT_FAILURE;
    }
    /* Username String */
    mqtt_options.username.cstring = mqtt_options.clientID.cstring + strlen(mqtt_options.clientID.cstring) + 1;
    buf_bytes_remaining -= (mqtt_options.username.cstring - mqtt_options.clientID.cstring);
    if(config_get_client_username(mqtt_options.username.cstring, buf_bytes_remaining))
    {
        return MQTTCLIENT_FAILURE;
    }
    /* Password String */
    mqtt_options.password.cstring = mqtt_options.username.cstring + strlen(mqtt_options.username.cstring) + 1;
    buf_bytes_remaining -= (mqtt_options.password.cstring - mqtt_options.username.cstring);
    if(config_get_client_password(mqtt_options.password.cstring, buf_bytes_remaining))
    {
        return MQTTCLIENT_FAILURE;
    }
    return MQTTConnect(&ctx->mqtt_client, &mqtt_options);
}
 

Výpis č. 2: Tato funkce zobrazená v repozitáři softwaru Microchip demonstruje použití objektu JWT jako hesla, které je použito pro autentizaci zařízení IoT na server MQTT během počáteční fáze připojení. (Zdroj kódu: technologie Microchip)

Rozhodující faktory

Schopnosti ATECC608A a celý dodavatelský řetězec jsou klíčovými faktory pro tuto bezpečnostní metodu. Ačkoli by jakýkoli MCU mohl nakonec generovat kryptograficky šifrovaný podpis z hlavičky a „payloadu“  JWT, jakákoli metoda přístupu prováděná výhradně softwarem by byla stále zranitelná bez bezpečného hardwarového uložení klíčů. Navíc, zátěž procesoru a zpoždění vykonávání instrukcí je nepřípustné pro mnoho zařízení s náročnými požadavky na odezvu. Vývojáři bez rozsáhlých zkušeností s bezpečnostními algoritmy a protokoly vyšší úrovně stěží naprogramují požadovanou funkčnost do softwaru. Microchip řeší tyto obavy ve své knihovně CryptoAuthLib (obrázek 2).

Obrázek 2: CryptoAuthLib používá vrstvu hardwarové abstrakce (HAL) pro oddělení funkcí rozhraní API a jádra základního hardwaru. Vývojáři se mohou zaměřit na software aplikace. (Zdroj obrázku: technologie Microchip)

Microchip CryptoAuthLib zjednodušuje implementaci bezpečnostních funkcí IoT, jako je protokol autentizace JWT společnosti Google, čímž snižuje bezpečnostní operace na sadu volání poskytovaných prostřednictvím API rozhraní CryptoAuthLib. Základní funkce Microchip CryptoAuthLib plně využívají integrovaných obvodů Crypto Microchip, jako je ATECC608A. Například volání atca_jwt_finalize () ve výpisu 1 používá dostupné krypto-součástky, jako je ATECC608A k vytvoření JWT jako hesla ve výpisu 2. V tomto případě, ATECC608A zrychluje šifrování podpisu JWT a čte soukromý klíč z integrovaného zabezpečeného úložiště, aby dokončil proces vytváření podpisu popsaný výše.

I při použití sofistikovaných softwarových a zabezpečovacích součástek mohou IoT zařízení zůstat zranitelné díky metodám, které jsou nutné ke správě klíčů a certifikátů. V minulosti bylo potřeba vytvářet soukromé klíče externě a uložit je do zabezpečených pamětí během výroby, distribuce nebo dokonce při instalaci. Využitím schopností ATECC608A, Microchip a Google z velké části vyloučily tuto obecnou slabinu v bezpečnosti.

Microchip využívá schopnosti ATECC608A pro generování dvojice klíčů bez privátních klíčů, které nikdy neopustí dané zařízení (obrázek 3). Společnost Microchip poté podepíše veřejně klíče generované zařízením s přechodným certifikátem, který byl poskytnut zákazníkem a uložen na zabezpečeném serveru v zabezpečeném zařízení Microchipu.

Microchip bezpečně přenese veřejné klíče na účet zákazníka ve správci zařízení Google Cloud IoT, který může ukládat až tři veřejné klíče pro každé zařízení. Mimo jiné také podporují pravidla rotaci klíčů. Po instalaci může zařízení IoT používat bezpečnostní funkce ATECC608A k vytvoření JWT, který je použit ve výše popsaném procesu vzájemné autentizace.

Obrázek 3: Technologie Microchip a služby Google Cloud IoT zjednodušují poskytování klíčů a certifikátů a poskytují chráněný mechanismus navržený tak, aby zesílil bezpečnost aplikací IoT. (Zdroj obrázku: Google)

Tato spolupráce mezi společnostmi Microchip a Google umožňuje vývojářům zbavit se procesu správy klíčů. Pro vlastní požadavky mohou vývojáři přesto implementovat vlastní proces správy klíčů pomocí funkce CryptoAuthLib API atcab_genkey (), která způsobuje, že ATECC608A generuje pár klíčů, uloží soukromý klíč do zabezpečeného úložiště a vrátí přidružený veřejný klíč.

Schopnosti ATECC608A si mohou vývojáři rychle odzkoušet na vývojové desce  SAM D21 Xplained Pro, který je postaven na 32bitovém čipu ATSAMD21J18A Arm Cortex-M0 + MCU. Sada SAM D21 Xplained Pro poskytuje kompletní hardwarovou platformu podporovanou Microchip Advanced Software Framework (ASF) plný ovladačů a kódových modulů.

Pro lepší poznání CryptoAuthentication včetně ATECC608A mohou vývojáři jednoduše připojit přídavnou desku CryptoAuth XPRO-B do jednoho z rozšiřujícího konektoru desky Xplained Pro. Microchip poskytuje ukázkový software pro seznámení se s bezpečnostními funkcemi CryptoAuthLib s ATECC608A. Dále vývojáři mohou do druhého rozšiřujícího konektoru připojit desku  ATWINC1500-XPRO Wi-Fi a spustit ukázkový software Microchip, který demonstruje vzájemný autentizační tok popsaný v tomto článku, včetně autentizace serveru TLS a autentizace zařízení JWT.

Závěr

Přestože bezpečnost aplikací IoT přináší více požadavků na výkon, kritický bod často spočívá v implementaci vzájemné autentizace pro zařízení IoT a cloudového uložiště. Konvenční protokoly mohou překročit kapacitu paměti a rychlost zpracování v IoT zařízeních. Pomocí knihovny CryptoAuthLib Microchip Technology a CryptoAuthentication integrovaného v obvodu ATecC608A mohou vývojáři implementovat efektivnější přístup založený na JSON Web Token pro bezpečné připojování zařízení IoT ke službám Google Cloud IoT.

 

Článek vyšel v originále "An Easier Solution for Securely Connecting IoT Devices to the Cloud"  na webu DigiKey.com, autorem je Stephen Evanczuk

Hodnocení článku: