Korištenje ESP8266 u kriptografiji

Izvor: SIS Wiki
Skoči na: orijentacija, traži

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]

Rsz 20170111 134652.jpg

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] :

Slika 2. Prikaz veličine mikorkontrolera

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.

Cip.jpg

Slika 3. ESP8266 čip


U nastavku ćemo opisati većinu komponenti prethodno navedenog čipa.

Screenshot 21.png

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]:


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]:


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]:

U nastavku je prikazan model upravljanja napajanjem.

Schema.png

Slika 5: Shema sustava napajanja, Preuzeto sa [8]

Ponašanje pojedinih bitnih dijelova ESP8266EX u svakom od stanja [8]:

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.


Ide 1.png

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).

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]:

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.

Ide 3.png

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.


Ide 2.png

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.

Arduinounoperformace.png

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

Osobni alati
Imenski prostori
Inačice
Radnje
Orijentacija
Traka s alatima