Sisällysluettelo:
- Tarvikkeet
- Vaihe 1: 1. Asenna Atecc608a
- Vaihe 2: 2. Piirin suunnittelu (isäntä ja orja)
- Vaihe 3: 3. koodi (orja ja isäntä)
- Vaihe 4: 4. Mene pidemmälle
- Vaihe 5: Johtopäätös
Video: Langaton salattu tiedonsiirto Arduino: 5 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:00
Hei kaikki, Tässä toisessa artikkelissa kerron sinulle, kuinka voit käyttää Atecc608a -sirua langattoman viestinnän suojaamiseen. Käytän tätä varten NRF24L01+ langattomassa osassa ja Arduino UNO: ssa.
MicroChip on suunnitellut mikrosirun ATECC608A ja saanut useita suojaustyökaluja. Tämä siru voi esimerkiksi tallentaa ECC -avaimet, AES -avaimet (AES 128) ja SHA2 -hajautus.
Artikkeli: NRF24L01 + Arduino UNO + ATECC608A
Kahden IoT -objektin välisen viestinnän aikana voi esiintyä useita hyökkäyksiä: Man Of the mild, Copy of information ja paljon muuta. Ideani on siis hyvin yksinkertainen:
- Salatun datan hyödyntäminen kahden tai useamman IoT -objektin välillä.
- Edulliset tarvikkeet
- Voi työskennellä Arduino UNO: n kanssa
Minun tapauksessani käytän
- Atecc608a AES -avaimen tallentamiseen ja tietojen salaamiseen/salauksen purkamiseen.
- Arduino Uno mikrokontrollerina
- NRF24L01 lähettää tietoni
Sinun on noudatettava näitä ohjeita tässä projektissa:
- Aseta siru ATECC608A
- Tee piiri (pääsolmu ja orjasolmu)
- Koodiosa
- Mennä pidemmälle !
Ensimmäisiin vaiheisiin "Asenna siru ATECC608A" kirjoitin toisen artikkelin, joka selittää jokaisen vaiheen järjestyksessä. Linkki on täällä:
Aloita nyt!
Tarvikkeet
Tätä projektia varten tarvitset:
- 2 Arduino UNO tai Arduino NANO tai Arduino Mega
- Joku lanka
- 2 Atecc608a (jokainen maksaa alle 0,60 $)
- 2 NRF24L01+
- 2 kondensaattoria (10 μF)
- Leipälaudat
Linkki artikkeliini, jossa kerrotaan, kuinka ATECC608A -siru asetetaan -> Atecc608a: n käyttöönotto
Vaihe 1: 1. Asenna Atecc608a
En kerro yksityiskohtia ATECC608A: n asentamisessa noudatettavista vaiheista, koska kirjoitin täydellisen artikkelin, joka selittää kaikki vaiheet sen tekemiseksi. Voit ottaa sen käyttöön noudattamalla tämän artikkelin "Vaihetta 4" nimeltä "2. Sirun määritys (Atecc608a)"
Linkki on: Kuinka asentaa ATECC608A
Sinun on myös asetettava sama kokoonpano Atecc608a: lle, isäntäpuolelle ja orjapuolelle, muuten et voi purkaa tietojasi
Varoitus:
Tämän sirun asentamiseksi sinun on noudatettava yllä olevan artikkelin kaikkia vaiheita järjestyksessä. Jos yksi vaihe puuttuu tai siru ei ole lukossa, et voi tehdä tätä projektia
Loput:
Toimi näin:
- Luo määritysmalli
- Kirjoita tämä malli sirulle
- Lukitse Config Zone
- Kirjoita AES -avaimesi (128 bittiä) paikkaan
- Lukitse tietoalue
Vaihe 2: 2. Piirin suunnittelu (isäntä ja orja)
Tässä projektissa sinulla on isäntäsolmu ja orjasolmu.
Pääsolmu tulostaa orjasolmun lähettämät tiedot selkeästi. Se pyytää tietoja orjasolmulta joka X kerta.
Orjasolmu kuuntelee "verkkoa" ja kun se vastaanottaa "pyyntötiedot", se luo sen, salaa sen ja lähettää sen pääsolmulle.
Molemmilla puolilla isäntä- ja orjapiiri ovat samat:
- Yksi arduino Nano
- Yksi ATECC608A
- Yksi NRF24L01
Liitin piirin tähän vaiheeseen (ks. Kuva yllä).
Arduino UNO: lle ATECC608A: lle tämä on 8 -nastainen soic. Lisäsin yllä olevan "ylhäältä":
- ARDUINO 3.3V -> PIN 8 (Atecc608a)
- ARDUINO GND -> PIN 4 (Atecc608a)
- ARDUINO A4 (SDL) -> PIN 5 (Atecc608a)
- ARDUINO A5 (SCL) -> PIN 6 (Atecc608a)
NRF24L01 Arduinolle:
- 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) -> vain orjasolmulle, ei käytetä isäntätilassa
Miksi käyttää NRF24L01: n IRQ -tappia?
IRQ -nasta on erittäin hyödyllinen, tämä nasta antaa mahdollisuuden sanoa (LOW), kun NRF24L01 vastaanottaa paketin, joten voimme liittää tähän keskeytykseen herättääksesi orjasolmun.
Vaihe 3: 3. koodi (orja ja isäntä)
Orjasolmu
Käytän orjasolmun virransäästöä, koska sen ei tarvitse kuunnella koko ajan.
Näin se toimii: orjasolmu kuuntele ja odota, että se vastaanottaa "Wake UP -paketin". Pääsolmu lähettää tämän paketin pyytääkseen tietoja orjalta.
Minun tapauksessani käytän taulukkoa kahdesta int:
// Herätyspaketti
const int wake_packet [2] = {20, 02};
Jos solmuni vastaanottaa paketin,
- se herää, lue tämä paketti, jos paketti on "Herää",
- se tuottaa dataa,
- salata tiedot,
- lähettää tiedot päälaitteelle, odottaa ACK -pakettia,
- nukkua.
AES -salauksessa käytän avainta numerossa 9.
Tämä on Slave -solmuni koodi
#Sisällytä "Arduino.h" #Sisällytä "avr/sleep.h" #Sisällytä "avr/wdt.h"
#include "SPI.h"
#Sisällytä "nRF24L01.h" #Sisällytä "RF24.h"
#sisältää "Wire.h"
// ATECC608A -kirjasto
#include "ATECCX08A_Arduino/cryptoauthlib.h" #include "AES BASIC/aes_basic.h"
#define ID_NODE 255
#define AES_KEY (uint8_t) 9
ATCAIfaceCfg cfg;
ATCA_STATUS -tila;
RF24 -radio (9, 10);
const uint64_t masteraddresse = 0x1111111111;
const uint64_t slaveaddresse = 0x1111111100;
/**
* / lyhyt Toiminto suoritetaan, kun keskeytys on asetettu (IRQ LOW) * * */ void wakeUpIRQ () {while (radio.available ()) {int data [32]; radio.read (& data, 32); if (data [0] == 20 && data [1] == 02) {float temp = 17,6; kelluva hum = 16,4;
uint8_t -tiedot [16];
uint8_t cypherdata [16];
// Luo merkkijono kaiken arvon määrittämiseksi
// Jokainen arvo erotetaan "|" - merkillä ja "$" tarkoittaa datan loppua // VAROITUS: Pitää olla alle 11 pituinen merkkijono tmp_str_data = Jono (ID_NODE) + "|" + Merkkijono (lämpötila, 1) + "|" + Jono (hum, 1) + "$"; // koko 11 Serial.println ("tmp_str_data:" + tmp_str_data);
tmp_str_data.getBytes (data, sizeof (data));
// Salaa tiedot
ATCA_STATUS status = aes_basic_encrypt (& cfg, data, sizeof (data), cypherdata, AES_KEY); jos (tila == ATCA_SUCCESS) {pitkä rand = satunnainen ((pitkä) 10000, (pitkä) 99999);
// Luo UUID kolmen ensimmäisen numeron = ID -solmun perusteella
Jono uuid = Jono (ID_NODE) + Jono (rand); // Koko 8
uint8_t tmp_uuid [8];
uint8_t data_to_dend [32];
uuid.getBytes (tmp_uuid, sizeof (tmp_uuid) + 1);
muisti (data_to_send, tmp_uuid, sizeof (tmp_uuid));
muisti (data_to_send + sizeof (tmp_uuid), cypherdata, sizeof (cypherdata)); // Lopeta radion kuuntelu.stopListening ();
bool rslt;
// Lähetä tiedot rslt = radio.write (& data_to_send, sizeof (data_to_send)); // Aloita radion kuuntelu.startListening (); if (rslt) {// Lopetus- ja lepotila Serial.println (F ("Valmis")); }}}}}
mitätön asennus ()
{Serial.begin (9600);
// Aloita kirjaston suunnittelija
cfg.iface_type = ATCA_I2C_IFACE; // Tiedonsiirtotyyppi -> I2C -tila cfg.devtype = ATECC608A; // Sirun tyyppi cfg.atcai2c.slave_address = 0XC0; // I2C -osoite (oletusarvo) cfg.atcai2c.bus = 1; cfg.atcai2c.baud = 100000; cfg.wake_delay = 1500; // Herätyksen viive (1500 ms) cfg.rx_retries = 20;
radio.begin ();
radio.setDataRate (RF24_250KBPS); radio.maskIRQ (1, 1, 0); radio.enableAckPayload (); radio.setRetries (5, 5);
radio.openWritingPipe (masteraddresse);
radio.openReadingPipe (1, slaveaddresse); // Liitä keskeytys nastaan 3 // Muokkaa 1 O: lla, jos haluat keskeytyksen nastalle 2 // FALLING MODE = Nasta LOW attachInterrupt (1, wakeUpIRQ, FALLING); }
tyhjä silmukka ()
{ // Ei tarvetta }
Pääsolmu
Pääsolmu herää 8 sekunnin välein pyytääkseen tietoja orjasolmulta
Näin se toimii: Pääsolmu lähettää "WakeUP" -paketin orjalle ja odotuksen jälkeen orjan vastauksen tiedoineen.
Minun tapauksessani käytän kahden joukon int:
// Herätyspaketti
const int wake_packet [2] = {20, 02};
Jos orjasolmu lähettää ACK -paketin sen jälkeen, kun isäntä on lähettänyt WakeUp -paketin:
- Pääasennus kuuntelutilassa ja odota viestintää
- Jos viestintä
- Pura 8 ensimmäinen tavu, ryöstä 8 tavun kolme ensimmäistä tavua, jos tämä on ID -solmu
- Pura 16 tavun salaus
- Pura tiedot
- Tulosta tiedot sarjassa
- Nukkumismoodi
AES -salauksessa käytän avainta numerossa 9.
Tämä on koodini isäntäsolmulle
#Sisällytä "Arduino.h"
#include "avr/sleep.h" #include "avr/wdt.h" #include "SPI.h" #include "nRF24L01.h" #include "RF24.h" #include "Wire.h" // ATECC608A -kirjasto #include "ATECCX08A_Arduino/cryptoauthlib.h" #include "AES BASIC/aes_basic.h" #define ID_NODE 255 #define AES_KEY (uint8_t) 9 ATCAIfaceCfg cfg; ATCA_STATUS -tila; RF24 -radio (9, 10); const uint64_t masteraddresse = 0x1111111111; const uint64_t slaveaddresse = 0x1111111100; // Herätyspaketti const int wake_packet [2] = {20, 02}; // vahtikoira keskeyttää ISR (WDT_vect) {wdt_disable (); // disable watchdog} void sleepmode () {// poista ADC ADCSRA = 0; // tyhjennä erilaiset "nollaus" -liput MCUSR = 0; // salli muutokset, poista nollaus käytöstä WDTCSR = bit (WDCE) | bitti (WDE); // aseta keskeytystila ja väli WDTCSR = bit (WDIE) | bitti (WDP3) | bitti (WDP0); // aseta WDIE ja 8 sekunnin viive wdt_reset (); // nollaa vahtikoira set_sleep_mode (SLEEP_MODE_PWR_DOWN); noInterrupts (); // ajoitettu sekvenssi seuraa sleep_enable (); // poista brown -out -toiminto käytöstä ohjelmistossa MCUCR = bit (BODS) | bitti (BODSE); MCUCR = bitti (BODS); keskeyttää (); // takaa seuraavan käskyn suorittamisen sleep_cpu (); // peruuta uni varotoimena sleep_disable (); } void setup () {Serial.begin (9600); // Aloita kirjaston konstruktori cfg.iface_type = ATCA_I2C_IFACE; // Tiedonsiirtotyyppi -> I2C -tila cfg.devtype = ATECC608A; // Sirun tyyppi cfg.atcai2c.slave_address = 0XC0; // I2C -osoite (oletusarvo) cfg.atcai2c.bus = 1; cfg.atcai2c.baud = 100000; cfg.wake_delay = 1500; // Herätyksen viive (1500 ms) cfg.rx_retries = 20; radio.begin (); radio.setDataRate (RF24_250KBPS); radio.maskIRQ (1, 1, 0); radio.enableAckPayload (); radio.setRetries (5, 5); radio.openWritingPipe (slaveaddresse); radio.openReadingPipe (1, masteraddresse); } void loop () {bool rslt; // Lähetä tiedot rslt = radio.write (& wake_packet, sizeof (wake_packet)); if (rslt) {// Aloita radion kuuntelu.startListening (); while (radio.available ()) {uint8_t vastaus [32]; radio.read (& vastaus, sizeof (vastaus)); uint8_t node_id [3]; uint8_t salaus [16]; muisti (solmun_tunnus, vastaus, 3); muisti (salaus, vastaus + 3, 16); if ((int) node_id == ID_NODE) {uint8_t output [16]; ATCA_STATUS status = aes_basic_decrypt (& cfg, salaus, 16, lähtö, AES_KEY); if (status == ATCA_SUCCESS) {Serial.println ("Salatut tiedot:"); for (size_t i = 0; i <16; i ++) {Serial.print ((char) output ); }}}}} else {Serial.println ("Ei saa Wakup -paketista"); } // Lepotila 8 sekuntia lepotila (); }
Jos sinulla on kysyttävää, olen täällä vastaamassa
Vaihe 4: 4. Mene pidemmälle
Tämä esimerkki on yksinkertainen, joten voit parantaa tätä projektia
Parannuksia:
- AES 128 on perus, ja voit käyttää toista AES -algoritmia AES CBC -laitteena turvallisemmaksi.
- Vaihda langaton moduuli (NRF24L01 on rajoitettu 23 tavun hyötykuormalla)
- …
Jos näet parannettavaa, selitä se keskustelualueella
Vaihe 5: Johtopäätös
Toivottavasti tästä artikkelista on sinulle hyötyä. Anteeksi, jos tein virheen tekstissäni, mutta englanti ei ole pääkieleni ja puhun paremmin kuin kirjoitan.
Kiitos, että luit kaiken.
Nauti siitä.
Suositeltava:
LoRa 3–8 km: n langaton tiedonsiirto edullisilla E32 -laitteilla (sx1278/sx1276) Arduino-, Esp8266- tai Esp32 -laitteille: 15 vaihetta
LoRa 3Km - 8Km Langaton tiedonsiirto edullisilla E32 (sx1278/sx1276) -laitteilla Arduinolle, Esp8266: lle tai Esp32: Luon kirjaston EBYTE E32: n hallintaan perustuen LoRa -laitteen Semtech -sarjaan, erittäin tehokas, yksinkertainen ja halpa laite. 3 km: n versio täällä, 8 km: n versio täällä He voivat työskennellä 3000–8000 metrin etäisyydellä, ja niissä on paljon ominaisuuksia
Pitkä kantama, 1,8 km, Arduino-Arduino Langaton tiedonsiirto HC-12: n kanssa: 6 vaihetta (kuvilla)
Pitkä kantama, 1,8 km, Arduino-Arduino Langaton tiedonsiirto HC-12: n avulla: Tässä ohjeessa opit kommunikoimaan Arduinojen välillä pitkän matkan, jopa 1,8 km: n päässä ulkona. HC-12 on langaton sarjaportti viestintämoduuli, joka on erittäin hyödyllinen, erittäin tehokas ja helppokäyttöinen. Ensin otat
Langaton tiedonsiirto NRF24L01 -lähetinvastaanotinmoduulilla Arduino -pohjaisiin projekteihin: 5 vaihetta (kuvilla)
Langaton tiedonsiirto NRF24L01-lähetinvastaanotinmoduulin avulla Arduino-pohjaisiin projekteihin: Tämä on toinen opettavainen opetusohjelmani roboteista ja mikro-ohjaimista. On todella hämmästyttävää nähdä robotin elossa ja toimivan odotetusti, ja usko minua, että on hauskempaa, jos ohjaat robottiasi tai muita asioita langattomasti nopealla ja
Salattu tiedostojen siirto: 7 vaihetta
Salattu tiedostojen liike: Vuosi sitten olin osa projektia. Meidän oli siirrettävä arkaluonteisia tietoja eri puolille maata. Käyn läpi syitä, voit hypätä vaiheeseen 1. Tausta: Tiimini kutsuttiin lyhyellä varoitusajalla palauttamaan tietokone
Langaton tiedonsiirto käyttämällä halpoja 433 MHz: n RF -moduuleja ja Pic -mikro -ohjaimia. Osa 2: 4 vaihetta (kuvilla)
Langaton tiedonsiirto käyttämällä halpoja 433 MHz: n RF -moduuleja ja Pic -mikro -ohjaimia. Osa 2: Tämän ohjeen ensimmäisessä osassa esittelin kuinka ohjelmoida PIC12F1822 käyttämällä MPLAB IDE- ja XC8 -kääntäjää yksinkertaisen merkkijonon lähettämiseksi langattomasti käyttämällä halpoja TX/RX 433MHz -moduuleja. kaapelimainos