![Traadita krüpteeritud side Arduino: 5 sammu Traadita krüpteeritud side Arduino: 5 sammu](https://i.howwhatproduce.com/images/006/image-17809-j.webp)
Sisukord:
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-23 14:40
![Traadita krüpteeritud side Arduino Traadita krüpteeritud side Arduino](https://i.howwhatproduce.com/images/006/image-17809-1-j.webp)
Tere kõigile, Selles teises artiklis selgitan teile, kuidas kasutada kiipi Atecc608a traadita side tagamiseks. Selleks kasutan traadita osa jaoks NRF24L01+ ja Arduino UNO.
Mikrokiip ATECC608A on kujundanud MicroChip ja sellel on mitu turvatööriista. Näiteks võib see kiip salvestada ECC -võtmeid, AES -võtmeid (AES 128 jaoks) ja SHA2 -räsivõtmeid.
Artikkel: NRF24L01 + Arduino UNO + ATECC608A
Kahe IoT -objekti vahelise suhtluse ajal võib esineda mitmeid rünnakuid: Man Of the mild, teabe koopia ja palju muud. Seega on minu idee väga lihtne:
- Krüptitud andmete kasutamine kahe või enama IoT -objekti vahel.
- Madala hinnaga tarned
- Saab töötada Arduino UNO -ga
Minu puhul kasutan
- Atecc608a minu AES -võtme salvestamiseks ja minu andmete krüptimiseks/dekrüpteerimiseks.
- Arduino Uno kui mikrokontroller
- NRF24L01 minu andmete saatmiseks
Selle projekti jaoks peate järgima neid samme:
- Seadistage kiip ATECC608A
- Tehke vooluring (põhisõlm ja orjasõlm)
- Koodi osa
- Mine edasi !
Esimeste sammude "Kiibi ATECC608A seadistamine" jaoks kirjutasin teise artikli, mis selgitab iga sammu järjekorras. Link on siin:
Nüüd alustage!
Tarvikud
Selle projekti jaoks vajate:
- 2 Arduino UNO või Arduino NANO või Arduino Mega
- Mingi traat
- 2 Atecc608a (igaüks maksab vähem kui 0,60 dollarit)
- 2 NRF24L01+
- 2 kondensaatorit (10 μF)
- Paneelid
Link minu artiklile, mis selgitab kiibi ATECC608A seadistamist -> Kuidas seadistada Atecc608a
Samm 1: 1. Seadistage Atecc608a
![1. Seadistage Atecc608a 1. Seadistage Atecc608a](https://i.howwhatproduce.com/images/006/image-17809-2-j.webp)
![1. Seadistage Atecc608a 1. Seadistage Atecc608a](https://i.howwhatproduce.com/images/006/image-17809-3-j.webp)
Ma ei räägi üksikasjalikult igast sammust, mida ATECC608A seadistamisel järgida, sest kirjutasin täieliku artikli, mis selgitab kõiki selle tegemise samme. Selle seadistamiseks peate järgima selle artikli 4. sammu nimega "2. Kiibi konfiguratsioon (Atecc608a)"
Link on järgmine: kuidas seadistada ATECC608A
Samuti peate seadistama sama konfiguratsiooni Atecc608a, ülem- ja alampool, vastasel juhul ei saa te oma andmeid dekrüpteerida
Hoiatus:
Selle kiibi seadistamiseks peate järgima ülaltoodud artikli kõiki samme. Kui üks samm on puudu või kiip pole lukus, ei saaks te seda projekti teha
Ülejäänud:
Selleks järgige järgmist sammu:
- Looge konfiguratsioonimall
- Kirjutage see mall kiibile
- Lukustage konfiguratsioonitsoon
- Kirjutage oma AES -võti (128 bitti) pessa
- Andmetsooni lukustamine
2. etapp: 2. Vooluahela projekteerimine (Master ja Slave)
![2. Ringkonnakohtu disain (kapten ja alam) 2. Ringkonnakohtu disain (kapten ja alam)](https://i.howwhatproduce.com/images/006/image-17809-4-j.webp)
![2. Ringkonnakohtu disain (kapten ja ori) 2. Ringkonnakohtu disain (kapten ja ori)](https://i.howwhatproduce.com/images/006/image-17809-5-j.webp)
Selles projektis on teil peasõlm ja orjasõlm.
Põhisõlm prindib orjasõlme saadetud andmed selgeks. See küsib orjasõlmelt andmeid iga X kord.
Alasõlm kuulab "võrku" ja kui ta saab "päringu andmed", genereerib selle, krüpteerib ja saadab põhisõlme.
Mõlema poole jaoks on ahela juht ja alam sama:
- Üks arduino Nano
- Üks ATECC608A
- Üks NRF24L01
Selle sammu külge ühendasin ahela (vt ülaltoodud pilti).
Arduino UNO ATECC608A jaoks on see 8 -kontaktiline. Lisasin ülal "pealtvaate":
- ARDUINO 3.3V -> PIN 8 (Atecc608a)
- ARDUINO GND -> PIN 4 (Atecc608a)
- ARDUINO A4 (SDL) -> PIN 5 (Atecc608a)
- ARDUINO A5 (SCL) -> PIN 6 (Atecc608a)
NRF24L01 jaoks Arduino jaoks:
- ARDUINO 3.3V -> VCC (nrf24l01)
- ARDUINO GND -> GND (nrf24l01)
- ARDUINO 9 -> CE (nrf24l01)
- ARDUINO 10 -> CSN (nrf24l01)
- ARDUINO 11 -> MOSI (nrf24L01)
- ARDUINO 12 -> MISO (nrf24l01)
- ARDUINO 13 -> SCK (nrf24l01)
- ARDUINO 3 -> IRQ (nrf24l01) -> ainult orjasõlme jaoks, ei kasutata põhirežiimis
Miks kasutada NRF24L01 IRQ tihvti?
IRQ -tihvt on väga kasulik, see nööpnõel võimaldab öelda (LOW), kui NRF24L01 võtab vastu paketi, nii et me saame sellele tihvtile lisada katkestuse, et äratada alam -sõlm.
3. samm: 3. kood (ori ja kapten)
![3. koodeks (ori ja kapten) 3. koodeks (ori ja kapten)](https://i.howwhatproduce.com/images/006/image-17809-6-j.webp)
Orjasõlm
Ma kasutan orjasõlme jaoks energiasäästu, kuna see ei pea kogu aeg kuulama.
Kuidas see toimib: orjasõlm kuulab ja ootab "Wake UP paketti". Selle paketi saadab peasõlm orjalt andmeid küsima.
Minu puhul kasutan massiivi kahest int:
// Äratuspakett
const int wake_packet [2] = {20, 02};
Kui minu sõlm saab paketi,
- kui see ärkab, lugege seda paketti, kui pakett on "Wake UP",
- see genereerib andmeid,
- andmed krüptida,
- saatke andmed kaptenile, oodake ACK -paketti,
- magama.
AES -krüptimiseks kasutan võtit pesa numbris 9.
See on minu Slave sõlme kood
#sisalda "Arduino.h" #sisalda "avr/sleep.h" #sisalda "avr/wdt.h"
#include "SPI.h"
#include "nRF24L01.h" #include "RF24.h"
#include "Wire.h"
// ATECC608A raamatukogu
#include "ATECCX08A_Arduino/cryptoauthlib.h" #include "AES BASIC/aes_basic.h"
#define ID_NODE 255
#define AES_KEY (uint8_t) 9
ATCAIfaceCfg cfg;
Olek ATCA_STATUS;
Raadio RF24 (9, 10);
const uint64_t masteraddresse = 0x1111111111;
const uint64_t slaveaddresse = 0x1111111100;
/**
* / lühifunktsioon täidetakse, kui katkestus on seatud (IRQ LOW) * * */ void wakeUpIRQ () {while (radio.available ()) {int data [32]; radio.read (& andmed, 32); if (andmed [0] == 20 && andmed [1] == 02) {float temp = 17,6; ujukihin = 16,4;
uint8_t andmed [16];
uint8_t cypherdata [16];
// Ehitage string, et määrata kogu minu väärtus
// Iga väärtus on eraldatud "|" ja "$" tähendab andmete lõppu // HOIATUS: peab olema väiksem kui 11 pikkune string tmp_str_data = String (ID_NODE) + "|" + String (temp, 1) + "|" + String (ümin, 1) + "$"; // suurus 11 Serial.println ("tmp_str_data:" + tmp_str_data);
tmp_str_data.getBytes (andmed, suurus (andmed));
// Andmete krüptimine
ATCA_STATUS olek = aes_basic_encrypt (& cfg, data, sizeof (data), cypherdata, AES_KEY); kui (olek == ATCA_SUCCESS) {pikk rand = juhuslik ((pikk) 10000, (pikk) 99999);
// genereerige UUID kolme esimese numbri = ID sõlme põhjal
String uuid = String (ID_NODE) + string (rand); // Suurus 8
uint8_t tmp_uuid [8];
uint8_t andmed_saatmiseks [32];
uuid.getBytes (tmp_uuid, sizeof (tmp_uuid) + 1);
memcpy (andmed_saatmiseks, tmp_uuid, sizeof (tmp_uuid));
memcpy (data_to_send + sizeof (tmp_uuid), cypherdata, sizeof (cypherdata)); // Lõpeta raadio kuulamine.stopListening ();
bool rslt;
// Andmete saatmine rslt = radio.write (& data_to_send, sizeof (data_to_send)); // Alusta raadio kuulamist.startListening (); if (rslt) {// Lõpp- ja unerežiim Serial.println (F ("Valmis")); }}}}}
tühine seadistus ()
{Serial.begin (9600);
// Initsiatiiv raamatukogu jaoks
cfg.iface_type = ATCA_I2C_IFACE; // Side tüüp -> I2C režiim cfg.devtype = ATECC608A; // Kiibi tüüp cfg.atcai2c.slave_address = 0XC0; // I2C -adressaat (vaikeväärtus) cfg.atcai2c.bus = 1; cfg.atcai2c.baud = 100000; cfg.wake_delay = 1500; // Äratuse viivitus (1500 ms) cfg.rx_retries = 20;
radio.begin ();
radio.setDataRate (RF24_250KBPS); raadio.maskIRQ (1, 1, 0); radio.enableAckPayload (); radio.setRetries (5, 5);
radio.openWritingPipe (masteraddresse);
radio.openReadingPipe (1, slaveaddresse); // Kinnita katkestus tihvtile 3 // Muuda 1 O -ga, kui soovid katkestust tihvtile 2 // FALLING MODE = Pin at LOW attachInterrupt (1, wakeUpIRQ, FALLING); }
tühine tsükkel ()
{ // Pole tarvis }
Põhisõlm
Põhisõlm ärkab iga 8 sekundi järel, et küsida andmeid orjasõlmelt
Kuidas see toimib: peasõlm saadab orjale paketi "WakeUP" ja pärast ootamist alamvastus andmetega.
Minu puhul kasutan massiivi kahest int:
// Äratuspakett
const int wake_packet [2] = {20, 02};
Kui orjasõlm saadab ACK -paketi pärast seda, kui kapten on saatnud WakeUp -paketi:
- Meister seadistage kuulamisrežiimis ja oodake suhtlust
- Kui suhtlemine
- Väljavõte 8 esimest baiti, rüüstata 8 baiti kolm esimest baiti, kui see on ID -sõlm
- Väljavõte 16 baiti cypher
- Andmete dekrüpteerimine
- Printige andmed seeriaviisiliselt
- Puhkerežiim
AES -krüptimiseks kasutan võtit pesa numbris 9.
See on minu põhisõlme kood
#sisaldab "Arduino.h"
#include "avr/sleep.h" #include "avr/wdt.h" #include "SPI.h" #include "nRF24L01.h" #include "RF24.h" #include "Wire.h" // ATECC608A raamatukogu #include "ATECCX08A_Arduino/cryptoauthlib.h" #include "AES BASIC/aes_basic.h" #define ID_NODE 255 #define AES_KEY (uint8_t) 9 ATCAIfaceCfg cfg; Olek ATCA_STATUS; Raadio RF24 (9, 10); const uint64_t masteraddresse = 0x1111111111; const uint64_t slaveaddresse = 0x1111111100; // Wake UP pakett const int wake_packet [2] = {20, 02}; // valvekoera katkestus ISR (WDT_vect) {wdt_disable (); // disable watchdog} void sleepmode () {// keela ADC ADCSRA = 0; // tühjendage erinevad "lähtestamise" lipud MCUSR = 0; // lubada muudatusi, keelata lähtestamine WDTCSR = bit (WDCE) | bit (WDE); // määrake katkestusrežiim ja intervall WDTCSR = bit (WDIE) | bit (WDP3) | bit (WDP0); // määrake WDIE ja viivitage 8 sekundit wdt_reset (); // lähtestage valvekoer set_sleep_mode (SLEEP_MODE_PWR_DOWN); noKatkestused (); // ajastatud jada järgneb sleep_enable (); // lülita pruuni väljalülitamise funktsioon tarkvaras välja MCUCR = bit (BODS) | bit (BODSE); MCUCR = bit (BODS); katkestab (); // garanteerib järgmise käsu täitmise sleep_cpu (); // tühistada uni ettevaatusabinõuna sleep_disable (); } void setup () {Serial.begin (9600); // Teeki konstrueerija algatamine cfg.iface_type = ATCA_I2C_IFACE; // Side tüüp -> I2C režiim cfg.devtype = ATECC608A; // Kiibi tüüp cfg.atcai2c.slave_address = 0XC0; // I2C -adressaat (vaikeväärtus) cfg.atcai2c.bus = 1; cfg.atcai2c.baud = 100000; cfg.wake_delay = 1500; // Äratuse viivitus (1500 ms) cfg.rx_retries = 20; radio.begin (); radio.setDataRate (RF24_250KBPS); raadio.maskIRQ (1, 1, 0); radio.enableAckPayload (); radio.setRetries (5, 5); radio.openWritingPipe (slaveaddresse); radio.openReadingPipe (1, masteraddresse); } void loop () {bool rslt; // Andmete saatmine rslt = radio.write (& wake_packet, sizeof (wake_packet)); if (rslt) {// Alusta raadio kuulamist.startListening (); while (raadio. saadaval ()) {uint8_t vastus [32]; radio.read (& vastus, sizeof (vastus)); uint8_t node_id [3]; uint8_t cypher [16]; memcpy (sõlme ID, vastus, 3); memcpy (šifr, vastus + 3, 16); if ((int) node_id == ID_NODE) {uint8_t väljund [16]; ATCA_STATUS olek = aes_basic_decrypt (& cfg, cypher, 16, output, AES_KEY); if (olek == ATCA_SUCCESS) {Serial.println ("Dekrüpteeritud andmed:"); for (size_t i = 0; i <16; i ++) {Serial.print ((char) output ); }}}}} else {Serial.println ("Äratuspaketi eest ei saa saada"); } // Unerežiim 8 sekundit unerežiim (); }
Kui teil on küsimusi, olen siin, et vastata
4. samm: 4. Minge kaugemale
See näide on lihtne, nii et saate seda projekti täiustada
Parandused:
- AES 128 on põhiline ja turvalisuse huvides saate AES CBC -na kasutada mõnda muud AES -i algoritmi.
- Muutke traadita ühenduse moodulit (NRF24L01 on piiratud 23 -bitise kandevõimega)
- …
Kui näete parandamist, selgitage seda arutelualal
5. samm: järeldus
Loodan, et see artikkel on teile kasulik. Vabandust, kui tegin oma tekstis vea, kuid inglise keel pole minu peamine keel ja räägin paremini kui kirjutan.
Täname, et lugesite kõike.
Naudi seda.
Soovitan:
SmartHome'i traadita side: MQTT äärmuslikud põhitõed: 3 sammu
![SmartHome'i traadita side: MQTT äärmuslikud põhitõed: 3 sammu SmartHome'i traadita side: MQTT äärmuslikud põhitõed: 3 sammu](https://i.howwhatproduce.com/images/002/image-5383-j.webp)
SmartHome'i traadita side: MQTT ekstreemsed põhitõed: MQTT põhitõed: ** Ma hakkan tegema koduautomaatika sarja, ma lähen läbi samme, mida ma tegin, et õppida kõike, mida olen tulevikus teinud. See juhend on lähtepunkt, kuidas seadistada MQTT minu tulevastes juhistes kasutamiseks. Kuidas
LoRa 3–8 km traadita side ja odav E32 (sx1278/sx1276) seade Arduino, Esp8266 või Esp32 jaoks: 15 sammu
![LoRa 3–8 km traadita side ja odav E32 (sx1278/sx1276) seade Arduino, Esp8266 või Esp32 jaoks: 15 sammu LoRa 3–8 km traadita side ja odav E32 (sx1278/sx1276) seade Arduino, Esp8266 või Esp32 jaoks: 15 sammu](https://i.howwhatproduce.com/images/001/image-540-15-j.webp)
LoRa 3Km kuni 8Km traadita side madala hinnaga E32 (sx1278/sx1276) seadmega Arduino, Esp8266 või Esp32 jaoks: loon raamatukogu EBYTE E32 haldamiseks, tuginedes LoRa seadme Semtech seeriale, väga võimas, lihtne ja odav seade. 3 km versioon siin, 8 km versioon siin Nad saavad töötada 3000–8000 m kaugusel ja neil on palju funktsioone
Pikamaa, 1,8 km, Arduino kuni Arduino traadita side HC-12-ga: 6 sammu (piltidega)
![Pikamaa, 1,8 km, Arduino kuni Arduino traadita side HC-12-ga: 6 sammu (piltidega) Pikamaa, 1,8 km, Arduino kuni Arduino traadita side HC-12-ga: 6 sammu (piltidega)](https://i.howwhatproduce.com/images/002/image-4099-27-j.webp)
Pikamaa, 1,8 km, Arduino-Arduino traadita side HC-12-ga: Selles juhendis saate teada, kuidas suhelda Arduinode vahel pikal, kuni 1,8 km kaugusel vabas õhus. HC-12 on traadita jadaport kommunikatsioonimoodul, mis on väga kasulik, äärmiselt võimas ja hõlpsasti kasutatav. Kõigepealt leiad
Traadita side NRF24L01 transiiverimooduli abil Arduino -põhiste projektide jaoks: 5 sammu (piltidega)
![Traadita side NRF24L01 transiiverimooduli abil Arduino -põhiste projektide jaoks: 5 sammu (piltidega) Traadita side NRF24L01 transiiverimooduli abil Arduino -põhiste projektide jaoks: 5 sammu (piltidega)](https://i.howwhatproduce.com/images/003/image-6694-21-j.webp)
Traadita side NRF24L01 transiiverimooduli abil Arduino-põhiste projektide jaoks: see on minu teine juhendatav õpetus robotite ja mikrokontrollerite kohta. On tõesti hämmastav näha teie robotit elusana ja ootuspäraselt töötamas ning uskuge mind, et on lõbusam, kui juhite oma robotit või muid asju juhtmevabalt kiire ja
Kuidas õigesti mõõta traadita side moodulite energiatarvet madala energiatarbimise ajastul?: 6 sammu
![Kuidas õigesti mõõta traadita side moodulite energiatarvet madala energiatarbimise ajastul?: 6 sammu Kuidas õigesti mõõta traadita side moodulite energiatarvet madala energiatarbimise ajastul?: 6 sammu](https://i.howwhatproduce.com/images/003/image-8287-10-j.webp)
Kuidas õigesti mõõta traadita side moodulite energiatarvet madala energiatarbimise ajastul?: Madal energiatarve on asjade internetis äärmiselt oluline mõiste. Enamik IoT -sõlme peab saama toite patareidest. Ainult juhtmeta mooduli energiatarvet õigesti mõõtes saame täpselt hinnata, kui palju akut