Obsah:

Zabezpečení pomocí Arduina: Atecc608a: 7 kroků
Zabezpečení pomocí Arduina: Atecc608a: 7 kroků

Video: Zabezpečení pomocí Arduina: Atecc608a: 7 kroků

Video: Zabezpečení pomocí Arduina: Atecc608a: 7 kroků
Video: Securing passwords with MicroPython 2024, Červenec
Anonim
Zabezpečení pomocí Arduina: Atecc608a
Zabezpečení pomocí Arduina: Atecc608a
Zabezpečení pomocí Arduina: Atecc608a
Zabezpečení pomocí Arduina: Atecc608a

Téma

Ahoj všichni !

Toto je můj první článek s pokyny, takže doufám, že bude pro vás všechny zajímavý.

V tomto článku vám vysvětlím, jak používat mikročip s názvem „ATECC608A“, který poskytuje více nástrojů zabezpečení.

Tento čip byl navržen společností MicroChip a je to poslední verze „čipu CryptoAuthentication“. Před touto verzí existovaly „ATSHA204A“a „ATECC508A“.

Proč jsem se rozhodl použít poslední verzi a ne předchozí verzi?

Tato verze je nejpokročilejším čipem a má funkce, které stará verze nemá (například: modul AES, modul ochrany IO …).

Proč tento projekt?

Pracuji v oblasti CyberSecurity a jako každý jsem miloval programování a elektroniku. Během studia se zúčastním konference se specialistou na zabezpečení IoT, který nám ukázal, že Industrial ve svém objektu IoT nepoužívá zabezpečení. Ukázal jsem nám visací zámek, který lze pomocí smartphonu otevřít pomocí Bluetooth. Na visacím zámku byla napsána věta „Tento visací zámek je nejbezpečnější než visací zámek s klíčem!“. Tato věta ho rozesmála a upravil větu „Tento visací zámek je nejhorší, jaký byl kdy vytvořen!“.

Ukázal nám na svém vlastním počítači a Bluetooth sniffer, že každý příkaz odeslaný smartphonem je pokaždé stejný a je velmi jednoduché zkopírovat tento příkaz a odeslat jej pomocí smartphonu. Vysvětlil nám, že „zabezpečení“pro „průmyslové“není hlavním problémem. Ukázal nám čipy (méně než 0,60 $), které by mohly těmto objektům přidat vrstvu zabezpečení.

Po této ukázce jsem se pokusil najít nějaký open source projekt, který by do objektu IoT přidal vrstvu zabezpečení, ale nikdy jsem ji nenašel.

Rozhodl jsem se tedy pracovat na projektu, který pro komunikaci mezi dvěma objekty IoT využívá vrstvu zabezpečení.

Jaký je můj nápad?

Během komunikace mezi dvěma objekty IoT může existovat více útoků: muž mírných, kopie informací a další.. Moje představa je tedy velmi jednoduchá:

  1. Využití šifrovaných dat mezi dvěma nebo více objekty IoT.
  2. Nízké náklady na dodávky
  3. Může pracovat s Arduino UNO

Nyní vám vysvětlím, jak jsem tento abstraktní obrázek implementoval pomocí čipu Arduino a Atecc608a. V tomto článku vám vysvětlím, jak používat Arduino UNO s ATECC608A.

O komunikaci dvou objektů napíšu článek příště.

Zásoby

K tomuto projektu potřebujete několik věcí:

  1. Arduino UNO nebo MEGA (čip musí být Atmega 328 nebo ATMEGA 2560)
  2. Čip Atecc608A (každý stojí méně než 0,80 $, snadno jej najdete na webu dodavatele)
  3. 8kolíkový adaptér SOIC
  4. Některé dráty a odpory

Datový list předchozí verze tohoto čipu (Atecc508a) je k dispozici zde -> Datový list Atecc508a

Krok 1: Krok za krokem

Krok za krokem
Krok za krokem

V tomto článku vám ukážu, jak upravit konfiguraci tohoto čipu a jak šifrovat data pomocí AES CBC Algorithme.

Budeme postupovat podle těchto kroků:

  1. Návrh obvodu
  2. Konfigurace tohoto čipu
  3. Využití modulu AES CBC
  4. Proč potřebujete tento čip používat?

U každého kroku vám vše podrobně vysvětlím. Také jsem přidal svůj kód do svého Githubu s komentáři pro každou funkci. Pokud máte nějaké dotazy ohledně mého kódu nebo tohoto projektu, rád vám na ně odpovím.

Můj Github: Můj Github

Krok 2: Varování o Atecc608a

Varování o Atecc608a
Varování o Atecc608a

Čip Atecc608a není „snadný“čip.

Za prvé, dokumentace tohoto čipu je pod NDA, takže jej na internetu nenajdete kompletní. Ale není problém, datový list předchozí verze je k dispozici na Internetovém datovém listu Complete ATECC508A.

Za druhé, když používáte tento čip, musíte uzamknout jeho konfiguraci a není možné měnit konfiguraci čipu, pokud je zamčený. Dávejte si tedy pozor, kdy zamknete konfigurační zónu a datovou zónu.

Za třetí, knihovna napsaná v jazyce C je velmi velká a úplná, takže si musíte přečíst dokumentaci funkcí, které budete dříve používat.

Za čtvrté, knihovna napsala, že tento čip nefunguje pro Arduino UNO, ale přidal funkce, které potřebuje pro práci s Arduino UNO.

Čip ATECC608A

S tímto čipem můžete komunikovat prostřednictvím I2C. Adresu tohoto čipu lze upravit v konfiguraci.

Tento čip obsahuje 16 různých slotů, které mohou obsahovat různé typy dat:

  1. Klíč ECC (soukromý nebo veřejný)
  2. Klíč AES
  3. Další údaje (například Sha hash nebo jen slova)

V našem případě uložíme klíč AES do jednoho 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 tohoto obvodu je velmi jednoduché!

Musíte použít napájení 3,3 V, protože doporučení je mezi 2,0 V a 5,5 V, ale raději jsem použil 3,3 V.

U tohoto čipu obvykle máte na rohu čipu tečku, tato tečka je Pin 1 této desky. Přidal jsem pohled shora na Atecc608a s PIN číslem, protože je to 8vodičový SOIC, takže čip je velmi 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žít napájení 3,3 V, protože doporučení je mezi 2,0 V a 5,5 V, ale raději jsem použil 3,3 V.

Přidal jsem pohled shora na Atecc608a, protože je to 8vodičový SOIC, takže čip je velmi malý. Pokud dáváte přednost, aby dodavatelé postavili nějakou desku s čipovou pájkou, mohlo by to pro vás být jednodušší.

Varování: V mém případě musím přidat odpor mezi SDA Arduina a čipu (také pro SDL). Pro každý jsem přidal odpor 4,7Kohm.

Krok 4: 2. Konfigurace čipu (Atecc608a)

Před použitím funkce šifrování nebo dešifrování musíte čip nakonfigurovat. V tomto kroku podrobně popíšu všechny kroky, které musíte provést pro konfiguraci tohoto čipu.

Varování: Tento krok je velmi importní a pokud zóny zamknete před koncem, nemůžete je upravit.

Jak již bylo vysvětleno dříve, tento čip dostal dvě zóny:

  1. Konfigurační zóna
  2. Datová zóna

Konfigurační zóna má velikost 128 bajtů, ale prvních 16 bajtů nelze upravit.

Chcete -li tento čip nakonfigurovat, postupujte podle dvou kroků. Je velmi důležité dodržovat všechny kroky v pořadí, jinak vaše konfigurace nebude fungovat a váš čip bude uzamčen a nepoužitelný. Tyto kroky jsou:

  1. Vytvořte konfigurační šablonu
  2. Tuto šablonu napište na čip
  3. Uzamkněte konfigurační zónu
  4. Napište svůj klíč AES (128 bitů) do slotu
  5. Uzamkněte datovou zónu

Informace

Níže podrobně popisuji každý krok konfigurace s mým kódem, ale bez obav jsem do svého Githubu přidal úplný příklad konfigurace. Vložil jsem komentáře ke každé funkci a pro každý krok je k dispozici soubor *.ino.

  • Můj Github: Můj Github
  • Cesta příkladné konfigurace: configuration_example.ino

První krok: Vytvořte konfigurační šablonu

Jak bylo vysvětleno dříve, konfigurační zóna má velikost 128 bitů, ale prvních 16 bitů nelze změnit. Tato zóna se skládá z více částí, ale pro tento projekt potřebujete znát pouze 3 části této konfigurační zóny:

  1. The Bytes 16 -> Toto je I2C adresa čipu
  2. Bajty 20 až 51 -> Zde můžete upravit typ slotu pro 16 slotů tohoto čipu
  3. The Bytes 96 to 127 -> Zde můžete nastavit Typ klíče nebo dat použitých v každém slotu.

(Pokud potřebujete podrobnější vysvětlení celé této zóny, přečtěte si dokumentaci (strana 13, část 2.2))

Zde jsem podrobně uvedl všechny bajty/části 112 bajtů konfigurace čipu. Toto je příklad, každý zakoupený čip může mít jinou konfiguraci:

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 pro konfiguraci klíče 1 0x33, 0x00, // Slot pro konfiguraci klíče 2 0x33, 0x00, // Slot pro konfiguraci klíče 3 0x1C, 0x00, // Slot pro konfiguraci klíče 4 0x1C, 0x00, // Slot pro konfiguraci klíče 5 0x 1C, 0x00, // slot pro konfiguraci klíče 6 0x1C, 0x00, // slot pro konfiguraci klíče 7 0x3C, 0x00, // slot pro konfiguraci klíče 8 0x1A, 0x00, // slot pro konfiguraci klíče 9 0x3A, 0x00, // slot pro konfiguraci klíče 10 0x1A, 0x00, // Slot pro konfiguraci klíče 11 0x3A, 0x00, // Slot pro konfiguraci klíče 12 0x3A, 0x00, // Slot pro konfiguraci klíče 13 0x3C, 0x00, // Slot pro konfiguraci klíče 14 0x3C, 0x00, // Slot pro konfiguraci klíče 15 0x1C, 0x00 // Slot pro konfiguraci klíče 16

Jak vidíte, vložil jsem do tohoto kódu několik komentářů, abych lépe porozuměl této konfiguraci.

Ve vašem případě potřebujete pochopit pouze tři věci:

  1. The Bytes 16 -> Toto je I2C adresa čipu
  2. Bajty 20 až 51 -> Zde můžete upravit typ slotu pro 16 slotů tohoto čipu
  3. The Byte 96 to 127 -> Zde můžete nastavit Typ klíče nebo dat použitých v každém slotu.

Nebudu vysvětlovat typ konfigurace a proč jsem použil tuto a ne jinou, protože je složité vysvětlit vše. Pokud potřebujete více informací, přejděte k dokumentaci, strana 16, část 2.2.1 pro „SlotConfig“a strana 19, část 2.2.5, „KeyConfig“

V tomto případě použijete slot 9 k uložení klíče AES.

K tomu musíme dát (pokud potřebujete, můžete zkopírovat výše uvedený příklad, v něm byla provedena úprava):

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

Proč jsem nastavil tuto konfiguraci: Pro každý slot tohoto čipu můžete nastavit parametry, které čipu řeknou, jaký typ dat bude uložen. Máte několik parametrů:

  • Slot lze zapisovat nebo číst (akce vymazání nebo šifrování)
  • Typ uložených dat (klíč ECC, veřejný klíč, SHA Hash, klíč AES …)
  • Slot lze uzamknout
  • Generování klíče je povoleno

S bajtem 36 a 37 nastaveným na "0x0F8F":

  • Data lze zapisovat do pole Vymazat
  • Obsah tohoto slotu je tajný a nelze jej číst
  • Slot nelze použít pro příkaz CheckMac Copy

S bajtem 112 a 113 nastaveným na "0x001A":

Do slotu lze uložit až čtyři 128bitové symetrické klíče AES (KeyType = 0x6)

Druhý krok: Napište tuto konfiguraci

Tento krok je velmi důležitý, protože nastavíme čip s naší konfigurací a pokud tato konfigurace není dobrá, použijete tento čip.

Ale bez obav, pokud není konfigurace uzamčena, můžete svou konfiguraci upravit.

Zde je tento kód použit k zápisu konfigurace na čip:

/** / brief Napište na čip novou konfiguraci.

* / param [in] cfg Konfigurace logického rozhraní. Některé předdefinované * konfigurace lze nalézt v atca_cfgs.h * / param [in] config Array uint8_t konfigurace (délka 112) * / param [in] len Velikost konfiguračního pole * / return ATCA_SUCCESS při úspěchu, jinak chybový kód. */ ATCA_STATUS zápis_konfigurace (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) {// Zápis konfiguračního pole na čip // Padding 16 byte (16 prvních bytů nelze zapsat) status = atcab_write_bytes_zone (ATCA_ZONE_CONFIG, 0, 16, (uint8_t *) config, len); návratový stav; } stav vrácení; }

Tato funkce zapíše vaši konfiguraci do čipu.

Třetí krok: Uzamkněte konfigurační zónu

Varování: Buďte opatrní s tímto krokem, pokud tuto zónu zamknete a vaše konfigurace není dobrá, čip je nepoužitelný a tuto zónu nemůžete upravit

Pro tuto akci použijeme tuto funkci:

/** / brief Zkontrolujte, zda je DATA_ZONE nebo CONFIG_ZONE zamčené

* / param [in] cfg Konfigurace logického rozhraní. Některé předdefinované * konfigurace lze nalézt v atca_cfgs.h * / param [v] zóně LOCK_ZONE_DATA nebo LOCK_ZONE_CONFIG * / return ATCA_SUCCESS při úspěchu, jinak kód chyby. */ ATCA_STATUS check_lock_zone (ATCAIfaceCfg *cfg, uint8_t zóna) {ATCA_STATUS status; bool lock = false; if (zone! = (uint8_t) LOCK_ZONE_CONFIG && zone! = (uint8_t) LOCK_ZONE_DATA) return ATCA_BAD_PARAM; status = atcab_init (cfg); if (status == ATCA_SUCCESS) {if (ATCA_SUCCESS! = (status = atcab_is_locked (zóna, & zámek))) {return ATCA_FUNC_FAIL; } if (! lock) {return ATCA_NOT_LOCKED; } vrátit ATCA_SUCCESS; } vrátit ATCA_BAD_PARAM; } check_lock_zone (& cfg, LOCK_ZONE_CONFIG);

Čtvrtý krok: Napište vám klíč AES do slotu

V této části nastavíte osobní klíč AES ve slotu, který jste definovali v konfiguraci čipu.

Pro tento příklad použiji slot číslo 9 čipu.

Potřebujete vědět: Zvláštností tohoto čipu je, že můžete do slotu zapisovat data pouze o 4 bajtech nebo 32 bajtech. Pro AES potřebujeme 128 bitový klíč, tedy 16 bytů dat. Rozhodl jsem se tedy zapsat na klíč 16 bajtů, každý v tomto slotu, aby měl 32 bajtů dat.

Nyní vám ukážu použitý kód:

/** / brief Napište klíč AES do daného slotu. * / param [in] cfg Konfigurace logického rozhraní. Některé předdefinované * konfigurace lze nalézt v atca_cfgs.h * / param [in] číslo klíčového slotu klíče * / param [in] datakey klíčové pole uint8_t * / param [in] len Velikost klíčového pole * / return ATCA_SUCCESS při úspěchu, jinak 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; if (len! = 32) return ATCA_BAD_PARAM; ATCA_STATUS status = atcab_init (cfg); if (status == ATCA_SUCCESS) {status = atcab_write_zone (ATCA_ZONE_DATA, (uint16_t) klíč, 0, 0, datakey, 32); if (status! = ATCA_SUCCESS) návratový stav; } stav vrácení; }

Pro tento příklad použiji dva klíče AES po 16 bajtech:

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

Pokud je tato akce dobrá, nyní musíte projít posledním krokem „zamknout datovou zónu“

Poslední krok: zamkněte datovou zónu

Varování: Buďte opatrní s tímto krokem, pokud tuto Zónu zamknete a vaše data nejsou nastavena, čip je nepoužitelný a tuto zónu nemůžete upravit

Pro tuto akci použijeme tuto funkci:

/** / brief Zkontrolujte, zda je DATA_ZONE nebo CONFIG_ZONE zamčené

* / param [in] cfg Konfigurace logického rozhraní. Některé předdefinované * konfigurace lze nalézt v atca_cfgs.h * / param [v] zóně LOCK_ZONE_DATA nebo LOCK_ZONE_CONFIG * / return ATCA_SUCCESS při úspěchu, jinak kód chyby. */ ATCA_STATUS check_lock_zone (ATCAIfaceCfg *cfg, uint8_t zóna) {ATCA_STATUS status; bool lock = false; if (zone! = (uint8_t) LOCK_ZONE_CONFIG && zone! = (uint8_t) LOCK_ZONE_DATA) return ATCA_BAD_PARAM; status = atcab_init (cfg); if (status == ATCA_SUCCESS) {if (ATCA_SUCCESS! = (status = atcab_is_locked (zóna, & zámek))) {return ATCA_FUNC_FAIL; } if (! lock) {return ATCA_NOT_LOCKED; } vrátit ATCA_SUCCESS; } vrátit ATCA_BAD_PARAM; } check_lock_zone (& cfg, LOCK_ZONE_DATA);

Pokud je tato akce dobrá, je váš čip připraven k použití

Krok 5: 3. Využití modulu AES CBC

3. Využití modulu AES CBC
3. Využití modulu AES CBC

Vysvětlím, jak šifrovat a dešifrovat data pomocí algoritmu AES CBC a čipu Atecc608a.

Pamatujte: Před použitím této funkce musíte nastavit čip. K tomu postupujte podle kroku 2 tohoto článku

Tento čip dostal více typů modulů AES (128 bitů AES), je možné pouze 128 bitů AES:

  1. AES normální
  2. AES CBC
  3. AES GCM (s hashem GFM) (více vysvětlení viz wikipedie)

Aby bylo používání jednodušší, vytvořil jsem dvě funkce:

  1. aes_cbc_encrypt
  2. aes_cbc_decrypt

Tyto dvě funkce jsou k dispozici na mém Githubu.

Vysvětlení

Rozhodl jsem se použít AES CBC Algorithm, protože je bezpečnější než základní AES 128 bitů. Tento algoritmus používá k zašifrování vašich dat počáteční vektor.

Informace

Níže podrobně popisuji každý krok metody šifrování a dešifrování. Ale napsal jsem kód pro Arduino, který používá obě tyto funkce. Tento kód můžete vidět v mém Githubu:

  • Github: Můj Github
  • Příklad kódu "Šifrovat/dešifrovat": AES_crypto_example.ino

První krok: Zašifrujte svá data

V této části vám ukážu, jak šifrovat vaše data.

Nejprve budete potřebovat tuto funkci:

/** / brief Šifrování dat pomocí algoritmu AES CBC* / param [in] cfg Konfigurace logického rozhraní. Některé předdefinované * konfigurace lze nalézt v atca_cfgs.h * / param [in] data Words to encypt (musí být děleno 16, maximální délka 240) * / param [in] len Words to encypt (musí být děleno 16, max. délka 240) * / param [out] iv Počáteční vektor použitý v AES CBC (vraťte vektor v tomto var) * / param [out] šifrový text vrátí sem klíč Cypher text * / param [in] klíč Číslo slotu key * / return ATCA_SUCCESS on success, else an error code. */ ATCA_STATUS aes_cbc_encrypt (ATCAIfaceCfg *cfg, uint8_t *data, int len, uint8_t *iv, uint8_t *ciphertext, uint8_t klíč) {atca_aes_cbc_ctx_t ctx; if (len> LIMIT_DATA_SIZE_CBC && len % 16! = 0) {Serial.print (F ("ERROR: ATCA_BAD_PARAM")); vrátit 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); vrátit se; } 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ácení; } stav vrácení; }

Tato funkce se snadno používá, musíte nastavit dvě věci:

  1. Prázdný IV (počáteční vektor) 16 bytů
  2. Data k šifrování (maximální velikost 240 bajtů)

Zde příklad „jak používat tuto funkci“.

Chci zašifrovat slovo „AAAAAAAAAAAAAAA“, přičemž můj klíč je napsán ve slotu čí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 prostý text [16] = "AAAAAAAAAAAAAAA"; // Původní text uint8_t iv [IV_LENGTH_CBC]; // Počáteční vektor uint8_t cypherdata [velikostof (prostý text)]; // Stav šifrování dat = aes_cbc_encrypt (& cfg, holý text, velikostof (prostý text), iv, cypherdata, 9);

Pokud je akce dobrá, budete mít zašifrovaná data v proměnné „cypherdata“a Počáteční vektor v proměnné „IV“.

Ponechte tyto dvě proměnné k dešifrování textu!

Druhý krok: dešifrujte data

K dešifrování dat budete potřebovat dvě věci:

  1. Počáteční vektor
  2. Data Cypher (šifrovaná data)

K dešifrování vašich dat budete potřebovat tuto funkci:

/** / brief Dešifrování dat pomocí algoritmu AES CBC* / param [in] cfg Konfigurace logického rozhraní. Některé předdefinované * konfigurace lze nalézt v atca_cfgs.h * / param [in] ciphertext Slova k dešifrování (musí být děleno 16, maximální délka 240) * / param [in] délka slov k dešifrování (musí být děleno 16, max. délka 240) * / param [in] iv Počáteční vektor pro použití v ABC CBC * / param [out] prostý text vrátí zde dešifrovaný text * / param [in] klíč Číslo slotu klíče * / return ATCA_SUCCESS při úspěchu, jinak 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átit 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 ("ERROR Decrypt: atcab_aes_cbc_init, Code Error 0x")); Serial.println (stav, HEX); vrátit se; } 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 ("ERROR Decrypt: atcab_aes_cbc_encrypt_block, Code Error 0x")); Serial.println (stav, HEX); } stav vrácení; } stav vrácení; }

Chci dešifrovat svá předchozí data (viz níže, první krok). Za tímto účelem udělám toto:

uint8_t holý text [16] = "AAAAAAAAAAAAAAA"; uint8_t iv [IV_LENGTH_CBC]; uint8_t cypherdata [velikostof (prostý text)]; uint8_t dešifrovat data [sizeof (prostý 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 {// Viz soubor atca_status.h pro kód Chyba Serial.print (F ("Nelze dešifrovat | Chyba kódu 0x")); Serial.println (stav, HEX); vrátit se; }

Pokud je akce dobrá, budete mít dešifrovaná data v proměnné „decryptdata“.

Nyní víte, jak používat šifrování a dešifrování s čipem Atecc608a

Krok 6: 5. Proč potřebujete tento čip používat?

Šifrovaná data jsou velmi užitečná, protože své informace můžete skrýt a odeslat pomocí Wireless nebo je jen uložit.

Zde několik příkladů využití:

  1. Uložená data na externí EEPROM: Můžete zabezpečit data na externí EEPROM a pokud někdo tuto EEPROM stále má, bude pro dešifrování potřebovat Klíč a IV
  2. Odeslat bezdrátová data: Tato zašifrovaná data můžete odeslat pomocí Wireless (nrf24L01, RFM95W…) a pokud někdo vaše data zachytí, budou tato data v bezpečí
  3. Uložené heslo

S tímto čipem můžete dělat více věcí. Může být použit ve více projektech. Pokud máte čas, řekněte mi, v jakém projektu budete tento čip používat?

Jedna poslední rada, pokud stavíte nějaký bezdrátový projekt nebo ukládáte nějaká nezpracovaná data, buďte opatrní, zabezpečení je velmi důležité a pokud víte, jak jednoduché je „noob“zachytit nebo ukrást vaše data. Nyní s internetem může mít každý skripty, které lze spustit na svém počítači, aby vás „hackl“!

Krok 7: Závěr

Doufám, že vám tento článek bude užitečný. Omlouvám se, pokud jsem ve svém textu udělal chybu, ale angličtina není můj hlavní jazyk a mluvím lépe, než píšu.

Děkuji za přečtení všeho.

Užij si to.

Doporučuje: