Korištenje ESP8266 u kriptografiji
Temu rezervirali: Dorian Krajinović i Goran Čehulić
Sadržaj |
Uvod
Pametni satovi, pametne narukvice, pametni hladnjaci, pametne perilice rublja – gotovo smo sigurni da ste u zadnje vrijeme čuli bar za neki od ovih pojmova. Svi navedeni uređaji, ali i mnogi ostali dio su jedne nove grane tehnologije pod nazivom Internet of Things (IoT) koja je rapidnom brzinom počela zauzimati sve veći i veći udio tržišta.
Ukratko IoT označava povezivanje raznih vrsta svakodnevnih uređaja/stvari putem interneta ili povezivanja sa nekim drugim uređajima. Kako IoT materijalizira sve oko sebe, svakim danom sve je lakše i jeftinije bežično povezati proizvoljne uređaje na Internet i obavljati uz pomoć njih određene vrste zadataka, ali također i imati mogućnost kontrole, praćenja rada pa čak i interakcije. Jedna od najuzbudljivijih, a i ujedno najjeftinijih tehnologija za IoT povezanost je NodeMCU ESP8266 wireless mikrokontroler kojeg ćemo u nastavku detaljnije objasniti.
Općenito o NodeMCU ESP8266
Ukratko rečeno, NodeMCU ESP8266 je vrsta single-board mikrokontrolera koji je open-source IoT platforma koja dolazi sa unaprijed pohranjenim pogonskim programom (eng. firmware). Za početak objasnimo što je to single-board mikrokontroler. Single-board mikrokontroler označava vrstu mikrokontrolera koja je ugrađena na tiskanoj pločici (eng. printed circuit board) pružajući tako sve potrebne sklopove poput mikroprocesora, ulazno/izlaznih jedinica, generatora takta, RAM memorije te flash memorije koji zajedno omogućuju uspješno interakciju i kontrolu nad mnogih sustavima. [7]
NodeMCU ESP8266 predstavlja cjenovno vrlo prihvatljiv mikrokontroler kojeg odlikuje mogućnost povezivanja putem bežične WiFi mreže zahvaljujući posjedovanju modula za bežičnu komunikaciju 802.11 koji se nalazi na čipu ESP8266 kojeg ćemo u nastavku malo detaljnije opisati i objasniti. Dolazi sa Lua skriptnim jezikom koji je dio pogonskoga programa, ali također postoji i mogućnost korištenja drugih skriptnih jezika poput MicroPython-a. [7]
Slika 1. NodeMCU ESP8266 mikrokontroler
ESP8266 zapravo predstavlja 32-bitni Tensilica Xtensa LX106 procesor koji radi na 80 MHz sa punim WiFi stogom.
Osnovne karakteristike NodeMCU mikrokontrolera [7] :
- Razvoj: ESP8266 Opensource zajednica
- Vrsta: single-board mikrokontroler
- Operacijski sustav: XTOS
- Memorija: 128 kB
- Prostor za pohranu: 4 MB
- Napajanje: USB
Na slici iznad možemo vidjeti kako je zapravo NodeMCU ESP8266 vrlo praktičan i malen mikrokontroler.
Dorian Krajinović
ESP8266 modul
ESP8266 je WiFi čip nižeg cjenovnog razreda sa potpunim TCP/IP stogom i mikrokontrolerskom jedinicom (MCU) proizveden od strane kineskog proizvođača Espressif Systems.
Ova vrsta modula ima dovoljno snažnu sposobnost obrade i procesiranja podataka tako da se može integrirati sa raznim senzorima i drugim specifičnim aplikacijskim putem svojih generičkih pinova (GPIO).
Vanjska površina modula je 16 mm * 24 mm * 3 mm.
Slika 3. ESP8266 čip
U nastavku ćemo opisati većinu komponenti prethodno navedenog čipa.
Slika 4: Funkcijski blok dijagram ESP8266EX. Preuzeto sa [8]
Na ovom funkcijskom dijagramu prikazanom na slici iznad možete vidjeti detaljnije elemente od kojih se čip sastoji. Svakako bi valjalo istaknuti dio koji se odnosi na komunikaciju putem WiFi-a, odnosno omogućuju da čip prima i šalje podatke pomoću analognog signala.
Goran Čehulić
CPU
ESP8266EX sastoji se od 32-bitnog Tensilica Xtensa LX106 procesora koji radi na 80 MHz sa punim WiFi stogom. Također može postignuti maksimalnu vrijednost od 160 Mhz. Kako ova vrsta čipa sadrži WiFi, bitno je naglasiti kako WiFi troši oko 20% procesorske snage, a ostatak je iskoristiv za aktivnosti poput programiranja i razvoja. [8]
Procesor se sastoji od sljedećih sučelja [8]:
- programibilni RAM/ROM koji mogu biti povezani s memorijskim kontrolerom
- Data RAM sučelje koji se može povezati s memorijskim kontrolerom
- Napredna sabirnica visokih performansi (eng. AHB)
Dorian Krajinović
Memorija
ESP8266EX Wi-Fi SoC integrira memoriju kontrolera te SRAM i ROM memoriju. MCU može memoriji pristupati kroz iBus i dBus sabirnice te AHB sučelje. Svim memorijskim jedinicama moguće je pristupati na zahtjev.
Upravljačka jedinica dodjeljuje procesor prema vremenima kada je pristigao zahtjev.
Veličina ram memorije manja je od 50kB. Kada modul radi u „Station mode“ načinu rada i povezuje se na usmjernik tada prostor za program na hrpi (eng. Heap) i prostor za podatke iznose zajedno oko 50kB. [8]
Goran Čehulić
WiFi
Ono što ESP8266 razlikuje od ostalih modula je prije svega zbog posjedovanje WiFi tehnologije. ESP8266 WiFi modul je samostani SoC (system on a chip) s integriranim stogom protokola TCP/IP koji mogu dati bilo kojem mikrokontroleru pristup WiFi mreži.
Osim osnovnog seta usluga operacija „Podržani poslovni sustavi“ (eng. Business support systems), podržava i P2P grupne operacije sukladne s najnovijim WiFi i P2P protokolima. Funkcije protokola niskih razina automatski su obrađene od strane ESP8266. [8]
Karakteristike [8]:
- 802.11 b/g/n
- Wi-Fi Direct (P2P)
- SoftAP (softverska pristupna točka)
- Integrirani TCP/IP protokol stog
- +19.5dBm izlazna snaga u 802.11b modu
- raspon frekvencije: 2.4 G ~ 2.5 G
Dorian Krajinović
Upravljanje napajanjem
NodeMCU ESP8266 radi na napon od 5V-10V. ESP8266EX sadrži napredne tehnologije za upravljanje napajanjem. Razlog tome je štednja energije kako bi mogao biti korišten u mobilnim uređajima i IoT aplikacijama.
Postoje 5 načina rada, a to su [8]:
- isključen,
- duboko spavanje,
- spavanje,
- buđenje,
- uključen.
U nastavku je prikazan model upravljanja napajanjem.
Slika 5: Shema sustava napajanja, Preuzeto sa [8]
Ponašanje pojedinih bitnih dijelova ESP8266EX u svakom od stanja [8]:
- ISKLJUČEN: Nožice procesorskih jedinica nisu pod naponom, registri su prazni, a generator vremena ne radi
- DUBOKO SPAVANJE: Generator vremena je uključen, ostalo nije
- SPAVANJE: Generator vremena radi, omogućeni su događaji za buđenje (tajmer, poslužitelj, vanjski prekidi...)
- BUĐENJE: Ovo je prijelazna faza između spavanja i stanja uključen. Oscilator počinje s radom i stvara se PLL signal.
- UKLJUČEN: Svi elementi su uključeni.
Goran Čehulić
Razvojno okruženje
Arduino IDE ( The Arduino Integrated Development Environment ) predstavlja razvojno okruženje za rad i komunikaciju nad Arduino pločicama ili ostalim vrstama mikrokontrolera koji podržavaju navedeno razvojno okruženje. Integrirano razvojno okruženje zasnovano je na Processingu. [11]
Program je dostupan za preuzimanje na sljedećem linku: Arduino IDE
Sastoji se od tekst editora za pisanje koda, prostora za poruke, tekstualne konzole, alatne trake s gumbima za česte funkcije i niza izbornika. Pločicu je potrebno povezati uz pomoć usb kabla na računalo kako bi se mogla uspostaviti komunikacija između računala i mikrokontrolera te za prijenos programa na isti.
Slika 6: Arduino IDE
Programi pisani uz pomoć Arduino IDE nazivaju se skice (eng. sketches). Skice se pišu u tekst editor te se spremaju kao datoteka s ekstenzijom .ino (na slici označeno broje 1).
Prostor za poruke vraća povratne informacije dok sprema ili prosljeđuje skicu na Arduino pločicu te prikazuje pogreške u kodu, naravno ako do istih uopće dođe (na slici označeno broje 2).
Alatna traka s gumbima nudi nekoliko mogućnosti (na slici označeno brojem 3).
- Verify – Prevodi izvorni kod (kompajlira) i provjerava da li ima grešaka.
- Upload – Prevodi izvorni kod te ga „uploada“ na Arduino pločicu.
- New – kreiranje nove skice
- Open – nudi mogućnost otvaranja neke od prethodnih skica
- Save – spremanje nove skice
Serial Monitor – otvaranje Serial Monitora (na slici označeno brojem 5).
Niz izbornika - na slici označeno brojem 4 [11]
Minimalna Arduino skica (eng. sketch) u Arduino IDE (razvojnom okruženju) sastoji se od samo dvije funkcije [12]:
- setup() – ova funkcija poziva se jednom kada se skica pokreće, a koristi se za inicijalizaciju varijabli, ulazne i izlazne pin modove i za ostale biblioteke koje su potrebne kako bi program ispravno radio.
- loop() – nakon što je setup funkcija pozvana, petlja (eng. loop) se više puta izvršava dozvoljavajući programu da se mijenja i odgovara na zahtjeve. Ova petlja se koristi za aktivno upravljanje Arduino (ili ostalih mikrokontroler) pločica. Funkcija se u petlji izvršava sve dok se isključi pločica.
Dorian Krajinović
Built-in primjeri
Arduino IDE dolazi sa unaprijed ugrađenim (eng. Built-In) programima kako bi programer se mogao bolje upoznati sa sintaksom i nekim od mogućnosti Arduino pločice.
Slika 7: Arduino IDE built-in primjeri
Goran Čehulić
Upload programskog koda
Prije samog „uplodanja“ skice na Arduino pločicu potrebno je podesiti nekoliko stvari. Prije svega potrebno je u u izborniku (Tools --> Board) odabrati Arduino (ili neku drugu podržanu) pločicu koju koristimo. U našem slučaju je to NodeMCU ESP8266. [11]
Nakon toga bitno je da odaberemo ispravni port (Tools --> Port). U našem slučaju to je port COM3.
Kada kliknemo na izbornik Tools možemo vidjeti osnovne informacije o Arduino pločici i njezinom načinu rada.
Slika 8: Arduino IDE Tools meni
Dorian Krajinović
Kriptiranje na Arduinu
Na web stranici ArduinoLibs dostupnoj na linku navedenom u dijelu "Vanjske poveznice" možete pronaći velik broj biblioteka koje se mogu koristiti između ostalog i na ESP8266.
U nastavku možete vidjeti koje algoritme kriptiranja možete koristiti unutar Crypto biblioteke dostupne na toj web stranici [9]:
• Block ciphers: AES128, AES192, AES256, Speck • Block cipher modes: CTR, CFB, CBC, OFB, EAX, GCM, XTS • Stream ciphers: ChaCha • Authenticated encryption with associated data (AEAD): ChaChaPoly, EAX, GCM • Hash algorithms: SHA256, SHA512, SHA3_256, SHA3_512, BLAKE2s, BLAKE2b (regular and HMAC modes) • Extendable output functions (XOF's): SHAKE128, SHAKE256 • Message authenticators: Poly1305, GHASH, OMAC • Public key algorithms: Curve25519, Ed25519, P521 • Post-quantum algorithms: NewHope • Random number generation: RNG, TransistorNoiseSource, RingOscillatorNoiseSource
Samu biblioteku možete pronaći na GitHub linku također navedenom u dijelu "Vanjske poveznice".
Performanse kriptiranja pomoću navedene Crypto biblioteke možete vidjeti u nastavku. Algoritmi su izvršavani na Arduino Uno na 16MHz.
Slika 9: Performanse kriptiranja na Arduino UNO, preuzeto sa [9]
Dorian Krajinović
RSA kriptiranje
RSA algoritam jedan je od najpoznatijih asimetričnih algoritama za kriptiranje. Kriptiranje je znanstvena disciplina koja se bavi logičkom promjenom podataka, kako bi oni bili upotrebljivi samo onome kome su namjenjeni. Autori ovog algoritma su Ron Rivest, Adi Shamir i Len Adleman.
Asimetrični algoritmi rade koristeći jednostavne funkcije. Te funkcije lako je računati, no njezine inverze teško ili gotovo nemoguće u nekom razumnom vremenu. To računanje inverza kod RSA algoritma bazira se na problemu nepoznavanja faktorizacije velikih brojeva. [10]
RSA algoritam zahtjeva određivanje određenih parametara. Najčešće se označuju sa n, p, q, d, e. Vrijednosti parametara n i e u javne, dok su vreijednosti p, q i d tajne. Par (n, e) predstavlja javni ključ dok par (n, d) predstavlja tajni ključ. Kriptiranje i dekriptiranje su inverzne operacije. Prema tome mora vrijediti: (x^d)^e = x (mod n). O izboru parametara ovisi jačina kriptiranja. Postoji nekoliko uputa kako izabrati pojedini parametar:
1. Izabiremo tajno dva velika prosta broja p i q. Ti brojevi bi trebali biti od barem po sto znamenaka i q bi trebao imati nekoliko znamenaka više. 2. Nakon toga možemo računati n i φ(n)= (p - 1)(q - 1) 3. Potom izaberemo e. Taj broj e mora biti manji od φ(n) i relativno prost s njim. 4. Nakon toga možemo izračunati tajni ključ d. Njega računamo koristeći Euklidov algoritam prema formuli: de= 1 (mod φ(n)) [10]
Programski primjer implementiran za NodeMCU ESP8266 možete pronaći na dolje navedenom GitHub repozitoriju.
Performanse našeg primjera RSA kriptiranja testirali smo na NodeMCU ESP8266 i na računalu sa Intelovim dvojezgrenim procesorom 2 x 2.40 GHz.
Mjerili smo ukupno vrijeme potrebno za izvršavanje cijelog programa. Program uzma zadani string "Dorian i Goran kriptografija" šifrira ga prema zadanim parametrima, ispisuje šifrirani string i potom taj šifrat uzima i dekriptira ga.
Potrebno vrijeme na NodeMCU ESP8266 iznosilo je 67 ms, dok je ono na računalu iznosilo 22 ms.
Goran Čehulić
Zaključak
Kao što je već bilo napomenuto na početku ovog rada, razvoj IoT grane tehnologije tek je u svojim počecima. Kroz nekoliko godina očekuje se da će upravo to grana postati jedna od najbrže rastućih vezanih uz IT sektor, pa će tako i razvoj mikokontrolerskih pločica poput korištenog NodeMCU ESP8266 zasigurno još više se unaprijediti. NodeMCU ESP8266 predstavlja praktičan i jeftin mikrokontroler kojeg je dovoljno samo putem USB povezati s računalom kako bismo mogli obavljati manje složene programske zadatke kao i sa većim i skupljim računalima.
GitHub link
[1] Repozitorij sa riješenim primjerom RSA kriptiranja
Vanjske poveznice
[2] ESP8266 core for Arduino
[3] Repozitorij s bibliotekama za arduino s implementiranim primjerima
[4] Dokumentacija navedenih biblioteka
[5] Arduino IDE razvojno okruženje
[6] NodeMcu, upute mogućnosti i primjeri
Literatura
[7] NodeMCU
[8] ESP8266EX Datasheet
[9] ArduinoLibs Cryptographic Library
[10] RSA kriptosustav, DSTG 2016
[11] Arduino Software (IDE)
[12] Arduino