Obsah:

Zabezpečenie pomocou Arduino: Atecc608a: 7 krokov
Zabezpečenie pomocou Arduino: Atecc608a: 7 krokov

Video: Zabezpečenie pomocou Arduino: Atecc608a: 7 krokov

Video: Zabezpečenie pomocou Arduino: Atecc608a: 7 krokov
Video: CS50 2014 – 7-я неделя 2024, Júl
Anonim
Zabezpečenie pomocou Arduina: Atecc608a
Zabezpečenie pomocou Arduina: Atecc608a
Zabezpečenie pomocou Arduina: Atecc608a
Zabezpečenie pomocou Arduina: Atecc608a

Téma

Ahojte všetci !

Toto je môj prvý článok s pokynmi, takže dúfam, že bude pre vás všetkých zaujímavý.

V tomto článku vám vysvetlím, ako používať mikročip s názvom „ATECC608A“, ktorý poskytuje viacero nástrojov zabezpečenia.

Tento čip bol vyvinutý spoločnosťou MicroChip a je to posledná verzia „čipu CryptoAuthentication“. Pred touto verziou existovali „ATSHA204A“a „ATECC508A“.

Prečo som sa rozhodol použiť poslednú verziu a nie predchádzajúcu?

Táto verzia je najpokročilejším čipom a má funkcie, ktoré stará verzia nemá (napríklad modul AES, modul ochrany IO …).

Prečo tento projekt?

Pracujem v oblasti CyberSecurity a ako každý som miloval programovanie a elektroniku. Počas štúdia sa zúčastňujem konferencie so špecialistom na bezpečnosť IoT, ktorý nám ukázal, že Industrial vo svojom objekte IoT nepoužíva zabezpečenie. Ukázal som nám visiaci zámok, ktorý je možné pomocou smartphonu otvoriť pomocou Bluetooth. Na visiacom zámku bola veta s textom „Tento zámok je najbezpečnejší ako visiaci zámok s kľúčom!“. Táto veta mu vyčarila úsmev na tvári a upravil vetu „Tento zámok je najhorším zámkom, aký bol kedy vytvorený!“.

Na vlastnom počítači a snímači Bluetooth nám ukázal, že každý príkaz odoslaný smartfónom je zakaždým rovnaký a je veľmi jednoduché skopírovať tento príkaz a odoslať ho pomocou smartfónu. Vysvetlil nám, že „bezpečnosť“pre „priemysel“nie je hlavným problémom. Ukázal nám čipy (menej ako 0,60 $), ktoré by mohli týmto objektom pridať vrstvu zabezpečenia.

Po tejto ukážke som sa pokúsil nájsť nejaký open source projekt, ktorý by k objektu IoT pridal vrstvu zabezpečenia, ale nikdy som ho nenašiel.

Rozhodol som sa teda pracovať na projekte, ktorý na komunikáciu medzi dvoma objektmi IoT používa bezpečnostnú vrstvu.

Aký je môj nápad?

Počas komunikácie medzi dvoma objektmi IoT môže existovať viacero útokov: muž mierneho typu, kópia informácií a ďalšie.. Moja predstava je teda veľmi jednoduchá:

  1. Využitie šifrovaných údajov medzi dvoma alebo viacerými objektmi IoT.
  2. Nízke náklady na zásoby
  3. Môže pracovať s Arduino UNO

Teraz vám vysvetlím, ako som implementoval tento abstraktný obrázok s čipom Arduino a Atecc608a. V tomto článku vám vysvetlím, ako používať Arduino UNO s ATECC608A.

O komunikácii dvoch objektov napíšem článok nabudúce.

Zásoby

Na tento projekt potrebujete niekoľko vecí:

  1. Arduino UNO alebo MEGA (čip musí byť Atmega 328 alebo ATMEGA 2560)
  2. Čip Atecc608A (každý stojí menej ako 0,80 $, je ľahké ho nájsť na webovej stránke dodávateľa)
  3. 8-kolíkový adaptér SOIC
  4. Niektoré vodiče a odpory

Dátový list predchádzajúcej verzie tohto čipu (Atecc508a) je dostupný tu -> Technický list Atecc508a

Krok 1: Krok za krokom

Krok za krokom
Krok za krokom

V tomto článku vám ukážem, ako zmeniť konfiguráciu tohto čipu a ako šifrovať údaje pomocou algoritmu AES CBC.

Budeme postupovať podľa týchto krokov:

  1. Návrh obvodu
  2. Konfigurácia tohto čipu
  3. Využitie modulu AES CBC
  4. Prečo potrebujete tento čip používať?

Pri každom kroku vám všetko podrobne vysvetlím. Tiež som pridal svoj kód do svojho Githubu s komentármi pre každú funkciu. Ak máte nejaké otázky týkajúce sa môjho kódu alebo tohto projektu, rád vám na ne odpoviem.

Môj Github: Môj Github

Krok 2: Upozornenie na Atecc608a

Varovanie o Atecc608a
Varovanie o Atecc608a

Čip Atecc608a nie je „ľahký“čip.

Dokumentácia tohto čipu je najskôr pod NDA, takže ho nenájdete kompletný na internete. Ale pre to nie je problém, katalógový list predchádzajúcej verzie je k dispozícii na internetovom dátovom liste Complete ATECC508A.

Za druhé, keď používate tento čip, musíte zablokovať jeho konfiguráciu a nie je možné zmeniť konfiguráciu čipu, ak je uzamknutý. Dávajte si preto pozor, keď uzamknete konfiguračnú zónu a dátovú zónu.

Po tretie, knižnica napísaná v jazyku C je veľmi veľká a úplná, takže si musíte prečítať dokumentáciu k funkciám, ktoré budete používať predtým.

Po štvrté, knižnica napísala, že tento čip nepracuje pre Arduino UNO, ale dodala, že potrebuje funkcie, aby fungoval s Arduino UNO.

Čip ATECC608A

S týmto čipom môžete komunikovať prostredníctvom I2C. Adresu tohto čipu je možné v konfigurácii upraviť.

Tento čip obsahuje 16 rôznych slotov, ktoré môžu obsahovať rôzne typy údajov:

  1. Kľúč ECC (súkromný alebo verejný)
  2. Kľúč AES
  3. Ďalšie údaje (ako napríklad hash alebo iba slová)

V našom prípade uložíme AES kľúč do jedného slotu.

Krok 3: 1. Návrh obvodu

1. Desing of the Circuit
1. Desing of the Circuit
1. Desing of the Circuit
1. Desing of the Circuit

1. Návrh obvodu

Schéma tohto obvodu je veľmi jednoduchá!

Musíte použiť napätie 3,3 V, pretože odporúčanie je medzi 2,0 V a 5,5 V, ale ja som radšej používal 3,3 V.

Pre tento čip máte zvyčajne bodku v rohu čipu, táto bodka je kolíkom 1 tejto dosky. Pridal som pohľad zhora na Atecc608a s číslom PIN, pretože je to 8vodičový SOIC, takže čip je veľmi malý.

  1. ARDUINO 3.3V -> PIN 8 (Atecc608a)
  2. ARDUINO GND -> PIN 4 (Atecc608a)
  3. ARDUINO A4 (SDL) -> PIN 5 (Atecc608a)
  4. ARDUINO A5 (SCL) -> PIN 6 (Atecc608a)

Musíte použiť napätie 3,3 V, pretože odporúčanie je medzi 2,0 V a 5,5 V, ale ja som radšej používal 3,3 V.

Pridal som pohľad zhora na Atecc608a, pretože je to 8vodičový SOIC, takže čip je veľmi malý. Ak dávate prednosť, a tak dodávatelia postavia dosku s čipovou spájkou, môže to byť pre vás jednoduchšie.

Varovanie: V mojom prípade musím pridať odpor medzi SDA Arduina a čipu (aj pre SDL). Ku každému som pridal odpor 4,7Kohm.

Krok 4: 2. Konfigurácia čipu (Atecc608a)

Pred použitím funkcie šifrovania alebo dešifrovania musíte nakonfigurovať čip. V tomto kroku podrobne popíšem všetky kroky, ktoré musíte vykonať pre konfiguráciu tohto čipu.

Varovanie: Tento krok je veľmi importný a ak zóny uzamknete pred koncom, nemôžete ich zmeniť.

Ako bolo vysvetlené vyššie, tento čip dostal dve zóny:

  1. Konfiguračná zóna
  2. Dátová zóna

Konfiguračná zóna má veľkosť 128 bajtov, ale prvých 16 bajtov nie je možné zmeniť.

Na konfiguráciu tohto čipu potrebujete dva, postupujte podľa týchto krokov. Je veľmi dôležité, aby ste dodržali všetky kroky v uvedenom poradí, inak vaša konfigurácia nebude fungovať a váš čip bude uzamknutý a nepoužiteľný. Tieto kroky sú:

  1. Vytvorte konfiguračnú šablónu
  2. Napíšte túto šablónu na čip
  3. Uzamknite konfiguračnú zónu
  4. Napíšte svoj AES kľúč (128 bitov) do slotu
  5. Uzamknite dátovú zónu

Informácie

Ďalej uvádzam podrobne každý krok konfigurácie pomocou môjho kódu, ale bez obáv som do svojho Githubu pridal úplný príklad konfigurácie. Ku každej funkcii pridám komentár a pri každom kroku je pre vás k dispozícii súbor *.ino.

  • Môj Github: Môj Github
  • Cesta k príkladu konfigurácie: configuration_example.ino

Prvý krok: Vytvorte konfiguračnú šablónu

Ako už bolo vysvetlené, konfiguračná zóna má veľkosť 128 bitov, ale prvých 16 bitov nemožno zmeniť. Táto zóna sa skladá z viacerých častí, ale pre tento projekt potrebujete poznať iba 3 časti tejto konfiguračnej zóny:

  1. The Bytes 16 -> Toto je I2C adresa čipu
  2. Bajty 20 až 51 -> Tu môžete upraviť typ slotu pre 16 slotov tohto čipu
  3. Bajty 96 až 127 -> Tu môžete nastaviť typ kľúča alebo údajov použitých v každom slote.

(Ak potrebujete podrobnejšie vysvetlenie celej tejto zóny, prečítajte si dokumentáciu (strana 13, časť 2.2))

Tu podrobne uvádzam každý bajt/časť 112 bajtov konfigurácie čipu. Toto je príklad, každý kúpený čip môže mať inú konfiguráciu:

0xC0, // adresa I2C

0x00, 0x00, 0x00, 0x83, 0x20, // Slot Config Slot 1 0x85, 0x20, // Slot Config Slot 2 0x8F, 0x20, // Slot Config Slot 3 0xC4, 0x8F, // Slot Config Slot 4 0x8F, 0x8F, // Slot Config Slot 5 0x8F, 0x8F, // Slot Config Slot 6 0x9F, 0x8F, // Slot Config Slot 7 0x0F, 0x0F, // Slot Config Slot 8 0x8F, 0x0F, // Slot Config Slot 9 0x8F, 0x0F, // Slot Config Slot 10 0x8F, 0x0F, // Slot Config Slot 11 0x8F, 0x0F, // Slot Config Slot 12 0x8F, 0x0F, // Slot Config Slot 13 0x00, 0x00, // Slot Config Slot 14 0x00, 0x00, // Slot Config Slot 15 0xAF, 0x8F, // Slot Config Slot 16 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00 0x00, 0x00, 0x33, 0x00, // Slot pre konfiguráciu kľúča 1 0x33, 0x00, // Slot pre konfiguráciu kľúča 2 0x33, 0x00, // Slot pre konfiguráciu kľúča 3 0x1C, 0x00, // Slot pre konfiguráciu kľúča 4 0x1C, 0x00, // Slot na konfiguráciu kľúča 5 0x 1C, 0x00, // Slot pre konfiguráciu kľúča 6 0x1C, 0x00, // Slot pre konfiguráciu kľúča 7 0x3C, 0x00, // Slot pre konfiguráciu kľúča 8 0x1A, 0x00, // Slot pre konfiguráciu kľúča 9 0x3A, 0x00, // Slot pre konfiguráciu kľúča 10 0x1A, 0x00, // Slot pre konfiguráciu kľúča 11 0x3A, 0x00, // Slot pre konfiguráciu kľúča 12 0x3A, 0x00, // Slot pre konfiguráciu kľúča 13 0x3C, 0x00, // Slot pre konfiguráciu kľúča 14 0x3C, 0x00, // Slot pre konfiguráciu kľúča 15 0x1C, 0x00 // Slot na konfiguráciu kľúča 16

Ako vidíte, do tohto kódu som vložil niekoľko komentárov, aby som lepšie porozumel tejto konfigurácii.

Vo vašom prípade musíte pochopiť iba tri veci:

  1. The Bytes 16 -> Toto je I2C adresa čipu
  2. Bajty 20 až 51 -> Tu môžete upraviť typ slotu pre 16 slotov tohto čipu
  3. The Byte 96 to 127 -> Tu môžete nastaviť typ kľúča alebo dát použitých v každom slote.

Nebudem vysvetľovať typ konfigurácie a prečo som použil túto a nie inú, pretože je zložité vysvetliť všetko. Ak potrebujete viac informácií, navštívte dokumentáciu, strana 16, odsek 2.2.1, „SlotConfig“, a stranu 19, odsek 2.2.5, „KeyConfig“

V tomto prípade použijete slot 9 na uloženie kľúča AES.

Na to musíme uviesť (ak potrebujete, môžete skopírovať vyššie uvedený príklad, v ktorom bola vykonaná úprava):

  1. Bajt 36 = 0x8F
  2. Bajt 37 = 0x0F
  3. Bajt 112 = 0x1A
  4. Bajt 113 = 0x00

Prečo som nastavil túto konfiguráciu: Pre každý slot tohto čipu môžete nastaviť parametre a povedať tak čipu, aký typ údajov sa bude ukladať. Máte viacero parametrov:

  • Slot je možné písať alebo čítať (vymazanie alebo šifrovanie)
  • Typ uložených údajov (kľúč ECC, verejný kľúč, SHA Hash, kľúč AES …)
  • Slot môže byť uzamykateľný
  • Generovanie kľúča je povolené

S bajtom 36 a 37 nastaveným na „0x0F8F“:

  • Údaje je možné zapísať do poľa Vymazať
  • Obsah tohto slotu je tajný a nemožno ho čítať
  • Slot nie je možné použiť pre príkaz CheckMac Copy

S bajtom 112 a 113 nastaveným na „0x001A“:

Slot môže uložiť až štyri 128-bitové symetrické kľúče AES (typ kľúča = 0x6)

Druhý krok: Napíšte túto konfiguráciu

Tento krok je veľmi dôležitý, pretože nastavíme čip s našou konfiguráciou a ak táto konfigurácia nebude dobrá, použijete tento čip.

Ale bez obáv, pokiaľ nie je konfigurácia uzamknutá, môžete svoju konfiguráciu zmeniť.

Tu je tento kód použitý na zápis konfigurácie na čip:

/** / brief Napíšte novú konfiguráciu na čip.

* / param [in] cfg Konfigurácia logického rozhrania. Niektoré preddefinované * konfigurácie nájdete v atca_cfgs.h * / param [in] config Pole uint8_t konfigurácie (dĺžka 112) * / param [in] len Veľkosť konfiguračného poľa * / vrátiť ATCA_SUCCESS po úspechu, inak kód chyby. */ ATCA_STATUS write_configuration (ATCAIfaceCfg *cfg, uint8_t *config, size_t len) {if (len! = 112) return ATCA_BAD_PARAM; Stav ATCA_STATUS; status = atcab_init (cfg); if (status == ATCA_SUCCESS) {// Napíšte konfiguračné pole na čip // Vyplnenie 16 bajtov (16 prvých bajtov nie je možné zapísať) status = atcab_write_bytes_zone (ATCA_ZONE_CONFIG, 0, 16, (uint8_t *) config, len); návratový stav; } stav vrátenia; }

Táto funkcia zapíše vašu konfiguráciu do čipu.

Tretí krok: Uzamknite konfiguračnú zónu

Varovanie: Buďte opatrní pri tomto kroku, ak túto zónu zamknete a vaša konfigurácia nie je dobrá, čip je nepoužiteľný a túto zónu nie je možné zmeniť

Na túto akciu použijeme túto funkciu:

/** / brief Skontrolujte, či je DATA_ZONE alebo CONFIG_ZONE zamknuté

* / param [in] cfg Konfigurácia logického rozhrania. Niektoré preddefinované * konfigurácie nájdete v atca_cfgs.h * / param [v] zóne LOCK_ZONE_DATA alebo LOCK_ZONE_CONFIG * / návrat ATCA_SUCCESS po úspechu, inak kód chyby. */ ATCA_STATUS check_lock_zone (ATCAIfaceCfg *cfg, uint8_t zóna) {ATCA_STATUS status; bool lock = false; ak (zóna! = (uint8_t) LOCK_ZONE_CONFIG && zóna! = (uint8_t) LOCK_ZONE_DATA) vrátiť ATCA_BAD_PARAM; status = atcab_init (cfg); if (status == ATCA_SUCCESS) {if (ATCA_SUCCESS! = (status = atcab_is_locked (zone, & lock))) {return ATCA_FUNC_FAIL; } if (! lock) {return ATCA_NOT_LOCKED; } vrátiť ATCA_SUCCESS; } vrátiť ATCA_BAD_PARAM; } check_lock_zone (& cfg, LOCK_ZONE_CONFIG);

Štvrtý krok: Napíšte vám kľúč AES do otvoru

V tejto časti si nastavíte osobný kľúč AES v slote, ktorý ste definovali v konfigurácii čipu.

V tomto prípade použijem slot 9 na čipe.

Potrebujete vedieť: Zvláštnosťou tohto čipu je, že do slotu môžete zapísať údaje iba o 4 bajtoch alebo o 32 bajtoch. Na AES potrebujeme 128 bitový kľúč, teda 16 bajtov dát. Preto som sa rozhodol zapísať do kľúča po 16 bytov v tomto slote, aby mal 32 bajtov údajov.

Teraz vám ukážem použitý kód:

/** / brief Napíšte kľúč AES do daného slotu. * / param [in] cfg Konfigurácia logického rozhrania. Niektoré preddefinované * konfigurácie nájdete v atca_cfgs.h * / param [in] číslo kľúčového slotu * / param [in] datakey pole kľúčov uint8_t * / param [in] len Veľkosť poľa kľúčov * / return ATCA_SUCCESS pri úspechu, inak chybový kód. */ ATCA_STATUS write_key_slot (ATCAIfaceCfg *cfg, uint8_t key, uint8_t *datakey, size_t len) {if (key 16) return ATCA_BAD_PARAM; ak (len! = 32) vráti ATCA_BAD_PARAM; ATCA_STATUS status = atcab_init (cfg); if (status == ATCA_SUCCESS) {status = atcab_write_zone (ATCA_ZONE_DATA, (uint16_t) key, 0, 0, datakey, 32); if (status! = ATCA_SUCCESS) návratový stav; } stav vrátenia; }

V tomto prípade použijem dva kľúče AES po 16 bajtoch:

// Príklad AES KEY (len 32) uint8_t example_of_key [32] = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; write_key_slot (& cfg, 9, example_of_key, sizeof (example_of_key));

Ak je táto akcia dobrá, musíte prejsť posledným krokom „uzamknutie dátovej zóny“

Posledný krok: uzamknite dátovú zónu

Varovanie: Buďte opatrní pri tomto kroku. Ak túto zónu uzamknete a vaše údaje nie sú nastavené, čip je nepoužiteľný a túto zónu nie je možné zmeniť

Na túto akciu použijeme túto funkciu:

/** / brief Skontrolujte, či je DATA_ZONE alebo CONFIG_ZONE zamknuté

* / param [in] cfg Konfigurácia logického rozhrania. Niektoré preddefinované * konfigurácie nájdete v atca_cfgs.h * / param [v] zóne LOCK_ZONE_DATA alebo LOCK_ZONE_CONFIG * / návrat ATCA_SUCCESS po úspechu, inak kód chyby. */ ATCA_STATUS check_lock_zone (ATCAIfaceCfg *cfg, uint8_t zóna) {ATCA_STATUS status; bool lock = false; ak (zóna! = (uint8_t) LOCK_ZONE_CONFIG && zóna! = (uint8_t) LOCK_ZONE_DATA) vrátiť ATCA_BAD_PARAM; status = atcab_init (cfg); if (status == ATCA_SUCCESS) {if (ATCA_SUCCESS! = (status = atcab_is_locked (zone, & lock))) {return ATCA_FUNC_FAIL; } if (! lock) {return ATCA_NOT_LOCKED; } vrátiť ATCA_SUCCESS; } vrátiť ATCA_BAD_PARAM; } check_lock_zone (& cfg, LOCK_ZONE_DATA);

Ak je táto akcia dobrá, váš čip je pripravený na použitie

Krok 5: 3. Využitie modulu AES CBC

3. Využitie modulu AES CBC
3. Využitie modulu AES CBC

Vysvetlím, ako šifrovať a dešifrovať údaje pomocou algoritmu AES CBC a čipu Atecc608a.

Pamätajte si: Pred použitím tejto funkcie musíte nastaviť čip. Za týmto účelom vykonajte krok 2 tohto článku

Tento čip dostal viac typov modulov AES (128 bitov AES), je možné iba 128 bitov AES:

  1. AES normálne
  2. AES CBC
  3. AES GCM (s hashom GFM) (ďalšie vysvetlenie nájdete na wikipédii)

Aby bolo používanie jednoduchšie, vytvoril som dve funkcie:

  1. aes_cbc_encrypt
  2. aes_cbc_decrypt

Tieto dve funkcie sú k dispozícii na mojom Githube.

Vysvetlenie

Rozhodol som sa použiť algoritmus ABC CBC, pretože je bezpečnejší ako základné 128 bitov AES. Tento algoritmus používa na šifrovanie vašich údajov počiatočný vektor.

Informácie

Nasleduje podrobný popis každého kroku metódy šifrovania a dešifrovania. Ale napísal som kód pre Arduino, ktoré používa obe tieto funkcie. Tento kód môžete vidieť v mojom Github:

  • Github: Môj Github
  • Príklad kódu „Šifrovať/dešifrovať“: AES_crypto_example.ino

Prvý krok: Zašifrujte svoje údaje

V tejto časti vám ukážem, ako šifrovať údaje.

Najprv budete potrebovať túto funkciu:

/** / brief Šifrovanie údajov pomocou algoritmu AES CBC* / param [in] cfg Konfigurácia logického rozhrania. Niektoré preddefinované * konfigurácie nájdete v atca_cfgs.h * / param [in] data Words to encypt (musí byť delené 16, maximálna dĺžka 240) * / param [in] len Words to encypt (musí byť delené 16, maximálna dĺžka 240) * / param [out] iv Počiatočný vektor použitý v AES CBC (vráti vektor v tomto var) * / param [out] šifrový text vráti sem kľúč Cypher text * / param [in] kľúč Číslo slotu kľúč * / vrátiť ATCA_SUCCESS po úspechu, inak kód chyby. */ ATCA_STATUS aes_cbc_encrypt (ATCAIfaceCfg *cfg, uint8_t *data, int len, uint8_t *iv, uint8_t *ciphertext, uint8_t key) {atca_aes_cbc_ctx_t ctx; if (len> LIMIT_DATA_SIZE_CBC && len % 16! = 0) {Serial.print (F ("CHYBA: ATCA_BAD_PARAM")); vrátiť ATCA_BAD_PARAM; } uint8_t tmp_iv [IV_LENGTH_CBC]; uint8_t tmp_data [len]; ATCA_STATUS status = atcab_init (cfg); if (status == ATCA_SUCCESS) {status = atcab_aes_cbc_init (& ctx, key, 0, tmp_iv); if (status! = ATCA_SUCCESS) {Serial.print (F ("ERROR Encrypt: atcab_aes_cbc_init, Code Error 0x")); Serial.println (stav, HEX); návrat; } memcpy (iv, tmp_iv, IV_LENGTH_CBC); memcpy (tmp_data, data, len); int max = len / 16; for (int j = 0; j <max; j ++) {status = atcab_aes_cbc_encrypt_block (& ctx, & tmp_data [j * 16], & ciphertext [j * 16]); } if (status! = ATCA_SUCCESS) {Serial.print (F ("ERROR Encrypt: atcab_aes_cbc_encrypt_block, Code Error 0x")); Serial.println (stav, HEX); } stav vrátenia; } stav vrátenia; }

Táto funkcia sa ľahko používa, musíte nastaviť dve veci:

  1. Prázdny IV (počiatočný vektor) 16 bajtov
  2. Údaje na šifrovanie (maximálna veľkosť 240 bajtov)

Tu je príklad „ako používať túto funkciu“.

Chcem zašifrovať slovo „AAAAAAAAAAAAAAA“pomocou kľúča napísaného do otvoru číslo „9“:

ATCA_STATUS status = atcab_init (& cfg); if (status! = ATCA_SUCCESS) {Serial.println (F ("atcab_init () failed: Code -> 0x")); Serial.println (stav, HEX); } uint8_t holý text [16] = "AAAAAAAAAAAAAAA"; // Pôvodný text uint8_t iv [IV_LENGTH_CBC]; // Počiatočný vektor uint8_t cypherdata [sizeof (čistý text)]; // Stav šifrovania údajov = aes_cbc_encrypt (& cfg, holý text, sizeof (čistý text), iv, cypherdata, 9);

Ak je akcia dobrá, zašifrované údaje budete mať v premennej „cypherdata“a počiatočný vektor v premennej „IV“.

Ponechajte tieto dve premenné na dešifrovanie textu!

Druhý krok: dešifrujte svoje údaje

Na dešifrovanie údajov budete potrebovať dve veci:

  1. Počiatočný vektor
  2. Údaje Cypher (šifrované údaje)

Na dešifrovanie údajov budete potrebovať túto funkciu:

/** / brief Dešifrovanie údajov pomocou algoritmu AES CBC* / param [in] cfg Konfigurácia logického rozhrania. Niektoré preddefinované * konfigurácie nájdete v atca_cfgs.h * / param [v] šifrovom texte Slová na dešifrovanie (musí byť delené 16, maximálna dĺžka 240) * / param [in] dĺžka slov na dešifrovanie (musí byť delené 16, max. dĺžka 240) * / param [in] iv Počiatočný vektor na použitie v ABC CBC * / param [out] obyčajný text sem vráti dešifrovaný text * / param [in] kľúč Číslo slotu kľúča * / vrátiť ATCA_SUCCESS pri úspechu, inak kód chyby. */ ATCA_STATUS aes_cbc_decrypt (ATCAIfaceCfg *cfg, uint8_t *ciphertext, int len, uint8_t *iv, uint8_t *plaintext, uint8_t key) {atca_aes_cbc_ctx_t ctx; if (len> LIMIT_DATA_SIZE_CBC || len % 16! = 0) {Serial.print (F ("ERROR Decrypt: ATCA_BAD_PARAM")); vrátiť ATCA_BAD_PARAM; } ATCA_STATUS status = atcab_init (cfg); if (status == ATCA_SUCCESS) {status = atcab_aes_cbc_init (& ctx, key, 0, iv); if (status! = ATCA_SUCCESS) {Serial.print (F ("Decrypt ERROR: atcab_aes_cbc_init, Code Error 0x")); Serial.println (stav, HEX); návrat; } int max = len / 16; for (int j = 0; j <max; j ++) {status = atcab_aes_cbc_decrypt_block (& ctx, & ciphertext [j * 16], & holý text [j * 16]); } if (status! = ATCA_SUCCESS) {Serial.print (F ("Decrypt ERROR: atcab_aes_cbc_encrypt_block, Code Error 0x")); Serial.println (stav, HEX); } stav vrátenia; } stav vrátenia; }

Chcem dešifrovať svoje predchádzajúce údaje (pozri nižšie, prvý krok). Za týmto účelom urobím toto:

uint8_t holý text [16] = "AAAAAAAAAAAAAAA"; uint8_t iv [IV_LENGTH_CBC]; uint8_t cypherdata [sizeof (holý text)]; uint8_t dešifrovanie údajov [veľkosť (obyčajný text)]; status = aes_cbc_decrypt (& cfg, cypherdata, sizeof (cypherdata), iv, decryptdata, 9); if (status == ATCA_SUCCESS) {Serial.print ("Dešifrovaný text je:"); for (size_t i = 0; i <sizeof (decryptdata); i ++) {Serial.print ((char) decryptdata ); } Serial.println (""); } else {// V súbore atca_status.h nájdete kód Chyba Serial.print (F ("Nemožné dešifrovať | Chyba kódu 0x")); Serial.println (stav, HEX); návrat; }

Ak je akcia dobrá, dešifrované údaje budete mať v premennej „decryptdata“.

Teraz viete, ako používať šifrovanie a dešifrovanie s čipom Atecc608a

Krok 6: 5. Prečo potrebujete tento čip používať?

Šifrované údaje sú veľmi užitočné, pretože svoje informácie môžete skryť a odoslať ich prostredníctvom siete Wireless alebo ich len uložiť.

Tu je niekoľko príkladov použitia:

  1. Uložené údaje na externú EEPROM: Údaje môžete zaistiť na externej EEPROM a ak niekto túto EEPROM stále má, bude potrebovať na dešifrovanie kľúč a IV
  2. Odosielať bezdrôtové údaje: Tieto zašifrované údaje môžete odosielať pomocou technológie Wireless (nrf24L01, RFM95W …) a ak niekto zachytí vaše údaje, budú tieto údaje v bezpečí.
  3. Uložené heslo

S týmto čipom môžete vykonávať viacero vecí. Môže byť použitý vo viacerých projektoch. Ak máte čas, povedzte mi, v akom projekte budete tento čip používať?

Posledná rada, ak budujete bezdrôtový projekt alebo ukladáte surové dáta, buďte opatrní, bezpečnosť je veľmi dôležitá a ak viete, ako ľahko „noob“zachytí alebo ukradne vaše údaje. Teraz s internetom môže mať každý spustené skripty na svojom počítači, aby vás „hackol“!

Krok 7: Záver

Dúfam, že tento článok bude pre vás užitočný. Ospravedlňujeme sa, ak som sa vo svojom texte zmýlil, ale angličtina nie je môj hlavný jazyk a hovorím lepšie, ako píšem.

Ďakujem, že ste si všetko prečítali.

Uži si to.

Odporúča: