This shows you the differences between two versions of the page.
pm:prj2023:iotelea:safeme [2023/05/16 16:26] oana.cocoara |
pm:prj2023:iotelea:safeme [2023/05/29 21:24] (current) oana.cocoara [Descriere generală] |
||
---|---|---|---|
Line 14: | Line 14: | ||
<note tip> | <note tip> | ||
- | Un sistem care cripteaza/decripteaza datele de pe un stick de memorie USB. | + | Un sistem care cripteaza/decripteaza mesajele care vin pe interfata seriala. Algoritmul de criptare este un One Time Pad unde expansiunea cheii se face prin repetarea ei. Accesul la chei se face prin intermediul unor utilizatori presetati, ale caror drepturi sunt accesate folosind PIN-ul prorpiu de 4 cifre. |
- | Proiectul isi propune criptatea sau decriptatea datelor de pe un stick USB. | + | |
- | + | ||
- | Pe ecran apare un prompt care la inceput cre un pin, daca acesta este corect va putea fi folosit la derivarea cheii private. Mai apoi va afisat cele doua optiuni de criptare decriptare si logout, la final se va afisa statusul operatiei in acest moment stickul se poate extrage, iar un text de finalizare se va afisa pana la apasarea oricarui buton. | + | |
- | + | ||
- | * Pentru criptarea lor se vor citi datele de pe stick, acestea se vor cripta si scrie inapoi. | + | |
- | * Pentru decriptatea lor se vor citi datele de pe stick, programul le va decripta cu cheia lui privata. | + | |
- | * La logout se sterge cheia din memorie. | + | |
</note> | </note> | ||
Line 46: | Line 39: | ||
<note tip> | <note tip> | ||
- | Descrierea codului aplicaţiei (firmware): | + | **Mod de functionare:** |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * Meniu initial de login: tot ce se poate face e sa se aleaga un user pentru logare: se cere PIN-ul de 4 cifre, care se introduce de la tastatura. La login efectuat cu succes, globala active_user se schimba la indexul userului respectiv. Va fi folosita la alegerea cheii de criptare si la verificarea posibilitatii decriptarii unui cyphertext. |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | **Meniul de utilizare efectiva de catre un user: optiuni pentru criptare, decriptare si logout.** |
- | * (etapa 3) surse şi funcţii implementate | + | |
+ | * Criptare: asteapta input de la interfata seriala. Acesta se cripteaza (aproape) OTP (expansiunea cheii este doar repetarea ei) folosind cheia cu indexul active_user si rezultatul este intors la seriala (primul caracter identifica cheia folosita). | ||
+ | |||
+ | * Decriptare: se verifica daca userul curent poate decripta cyphertextul dat (in functie de primul caracter, despre care am mai zis): userii normali pot folosi doar propria cheie, admin le poate folosi pe toate. | ||
+ | |||
+ | * Logout: se seteaza active_user la -1 si se revine in meniul initial. | ||
</note> | </note> | ||
Line 57: | Line 55: | ||
<note tip> | <note tip> | ||
Care au fost rezultatele obţinute în urma realizării proiectului vostru. | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | ||
+ | |||
+ | * Schema proiectului(lispeste shieldul in aceasta schema): | ||
+ | |||
+ | {{:pm:prj2023:iotelea:pm3.jpg?600|}} | ||
+ | |||
+ | </note> | ||
+ | |||
+ | <note tip> | ||
+ | |||
+ | * Implementare hardware a proiectului si rezultatul testarii componentelor: | ||
+ | |||
+ | {{:pm:prj2023:iotelea:whatsapp_image_2023-05-16_at_16.11.11.jpeg?600|}} | ||
+ | |||
+ | {{:pm:prj2023:iotelea:whatsapp_image_2023-05-16_at_16.11.09_1_.jpeg?600|}} | ||
+ | |||
+ | {{:pm:prj2023:iotelea:whatsapp_image_2023-05-16_at_16.11.09_3_.jpeg?600|}} | ||
+ | |||
+ | {{:pm:prj2023:iotelea:whatsapp_image_2023-05-16_at_16.11.09_4_.jpeg?600|}} | ||
+ | |||
+ | {{:pm:prj2023:iotelea:whatsapp_image_2023-05-16_at_16.11.09_2_.jpeg?600|}} | ||
+ | |||
+ | {{:pm:prj2023:iotelea:whatsapp_image_2023-05-16_at_16.11.10_1_.jpeg?600|}} | ||
+ | |||
+ | {{:pm:prj2023:iotelea:whatsapp_image_2023-05-16_at_16.11.10.jpeg?600|}} | ||
+ | |||
+ | {{:pm:prj2023:iotelea:whatsapp_image_2023-05-16_at_16.11.11.jpeg?600|}} | ||
+ | |||
+ | {{:pm:prj2023:iotelea:whatsapp_image_2023-05-16_at_16.11.11_2_.jpeg?600|}} | ||
+ | |||
+ | {{:pm:prj2023:iotelea:whatsapp_image_2023-05-16_at_16.11.11_1_.jpeg?600|}} | ||
+ | |||
+ | * Exemplu de functionalitate: logare cu unul dintre utilizatori, dupa care am ales optiunea de criptare, am adaugat textul pe care doream sa il criptez. La final am ales sa sa decriptez textul criptat - am ales optiunea de decriptare din meniul utilizatorului. | ||
+ | |||
+ | {{:pm:prj2023:iotelea:safe_me_ex1.png?600|}} | ||
+ | |||
+ | {{:pm:prj2023:iotelea:safe_me_decrypt.png?600|}} | ||
+ | |||
+ | |||
</note> | </note> | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | ===== Download ===== | + | <note tip> |
+ | * Nu a mers shieldul pt ca cel mai probabil nu e suportat de biblioteci(eu am luat o placa generica si posibil sa existe diferente). Am inlocuit cu scriere si citire de la interfata seriala. Criptarea se face folosind One Time Pad cu chei de 8 octeti. | ||
- | <note warning> | + | * Primul caracter din cyphertext ajuta la identificarea cheii folosite. Indexarea cheilor incepe de la 0, ceea ce ar duce la a printa nimic criptat cu cheia 0. Solutie: adaug 67 la indexul cheii folosite. |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | |
+ | * Problema (oarecum in acelasi registru cu cea anterioara): Folosind chei cu caractere uzuale, se poate ivi cazul in care am X xor X, ceea ce da 0, iar printarea va vedea asta ca un end of string. Asadar, am folosit caractere mai putin folosite in chei. | ||
+ | |||
+ | * Alte probleme simple: read nu este o functie blocanta si a trebuit sa fac un loop blocant cu Serial.available(). | ||
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | ||
</note> | </note> | ||
+ | ===== Download ===== | ||
+ | {{:pm:prj2023:iotelea:safe_me.zip|}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 75: | Line 116: | ||
* Descrierea proiectului 2023/05/07 | * Descrierea proiectului 2023/05/07 | ||
* Conectarea si testarea componentelor 2023/05/16 | * Conectarea si testarea componentelor 2023/05/16 | ||
+ | * Nu a mers USB HostShield-ul si readaptarea proiectului 2023/05/27 | ||
+ | * Finalizarea partii software a aplicatiei 2023/05/28 | ||
+ | * Realizarea documentatiei finale si incarcarea lor pe site 2023/05/29 | ||
+ | * Prezentarea proiectului 2023/05/30 | ||
</note> | </note> | ||
Line 87: | Line 132: | ||
<note> | <note> | ||
Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | ||
+ | * Aici se poate gasi codul folosit pentru testrarea componentelor - https://github.com/alexandra70/PM_SafeMe/tree/main/task0 | ||
+ | * In realizarea codului de mai sus am folosit informatii care apar in uramtoarele surse: | ||
+ | * https://github.com/fmalpartida/New-LiquidCrystal/tree/master/thirdparty%20libraries/SoftI2CMaster | ||
+ | * https://forum.arduino.cc/t/ide-2-0-3-complation-error-no-connection-established/1066586/2 | ||
+ | * https://github.com/johnrickman/LiquidCrystal_I2C/tree/master/examples | ||
+ | * https://www.circuitgeeks.com/arduino-i2c-lcd-tutorial/ | ||
+ | * https://arduino.stackexchange.com/questions/56517/formatting-strings-in-arduino-for-output | ||
+ | * https://lastminuteengineers.com/arduino-keypad-tutorial/ | ||
+ | * https://robojax.com/learn/arduino/?vid=robojax-keypad-4x3 | ||
+ | |||
+ | * Codul aplicatiei - https://github.com/alexandra70/PM_SafeMe/tree/main/final | ||
+ | * In realizarea codului de mai sus am folosit informatii care apar in uramtoarele surse: | ||
+ | * https://forum.arduino.cc/t/read-char-over-serial-solved/153697/6 | ||
+ | * https://forum.arduino.cc/t/reading-from-serial-to-array-char-string/42712 | ||
+ | * https://www.engineersgarage.com/moving-text-on-16x2-lcd-with-arduino/ | ||
+ | * https://circuits4you.com/2018/03/08/arduino-convert-string-to-character-array/ | ||
+ | * https://www.delftstack.com/howto/arduino/arduino-wait-for-input/ | ||
+ | |||
+ | * In incercarea de a face sa functioneze USB HostShied am folosit urmatoarele surse: | ||
+ | * https://forum.arduino.cc/t/write-and-read-memory-stick-with-arduino-host-shield/398451 | ||
+ | * https://github.com/greiman/UsbFat | ||
+ | * https://github.com/greiman/UsbFat/issues/2 | ||
</note> | </note> | ||
+ | |||
+ | |||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||