This is an old revision of the document!
2FA Vault
Introducere
Seiful 2FA reprezinta un mod inteligent de stocare a lucrurilor valoroase. Codul pin pentru deschiderea seifului nu este un cod fix, prestabilit, ci este generat si schimbat la cateva secunde de o aplicatie, similar logarii de tip “Two Factor Authentication”. Daca codul introdus este corect, utilizatorul va putea apropia mana de senzor si usa se va deschide singura.
Scopul acestui proiect este de a imbunatati modelul clasic de seif cu un pin de 4 cifre si de a oferi o securitate mult mai mare. Multi utilizatori seteaza coduri pin simple si usor de retinut, de exemplu “0000”, “1234” sau anul nasterii, care pot fi foarte usor ghicite de alte persoane. Prin folosirea acestei metode, codul va fi aproape imposibil de ghicit, iar utilizatorul nu va mai purta grija memorarii unui cod, intrucat il poate vedea pe telefon.
Am pornit de la ideea unui seif normal, observand tendinta oamenilor de a seta coduri pin cat mai simpliste, si m-am gandit sa aduc o imbunatatire in domeniul securitatii.
Descriere generală
Schema bloc:
Proiectul are la baza o placuta Arduino UNO R3 si foloseste urmatoarele componente:
Servomotor MG996: deschide/inchide usa seifului
Keypad: folosit la introducerea codului
Buzzer: scoate un sunet de succes/eroare daca codul introdus este corect sau nu
Senzor de distanta cu infrarosu: detecteaza apropierea mainii pentru a activa deschiderea usii
Ecran LCD 16×2: vizualizarea cifrelor introduse
RTC module DS3231: folosit pentru algoritmul de generare al codului pe placuta
4 baterii AA: alimenteaza intreg sistemul
Placuta va calcula pe baza algoritmului TOTP un cod temporar, fiind acelasi algoritm folosit de “Google Authenticator”. Avand aceeasi cheie secreta, ambele coduri generate vor fi identice, astfel ca nu este nevoie de o comunicatie intre telefon si placuta.
Hardware Design
Componente folosite:
Schema poate fi analizata mai in detaliu dand click aici.
Schema electrica: schema_electrica_claudiu.pdf
BOM:
Descrierea componentelor:
Keypad 4×3 (D2 - D8): se foloseste pentru a introduce codul
LCD 16×2 (A4, A5): afiseaza cifrele introduse
RTC module DS3231 (A4, A5): mentine ora si data actuala pentru algoritmul TOTP de generare a codului
Baterii si suport (VIN, GND): un set de baterii alimenteaza placuta Arduino, iar celalalt cele 2 servomotoare
Servomotor MG996 (D9): deschide/inchide usa seifului
Servomotor SG90 (D10): actioneaza incuietoarea seifului
Senzor distanta infrarosu (D1): detecteaza apropierea mainii pentru a activa mecanismul de deschidere
LED-uri (D12, D13): LED-ul rosu este aprins atunci cand seiful este incuiat, iar cel verde se aprinde cand seiful este descuiat
Buzzer pasiv (D11): face un sunet de succes/esec atunci cand este introdus un cod
Se foloseste ground comun intre alimentarea placutei si alimentarea celor doua motorase.
Software Design
Descrierea codului aplicaţiei (firmware):
mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR)
librării şi surse 3rd-party (e.g. Procyon AVRlib)
algoritmi şi structuri pe care plănuiţi să le implementaţi
(etapa 3) surse şi funcţii implementate
Mediu de dezvoltare: PlatformIO
Biblioteci:
Arduino.h - functionalitati de baza Arduino
Keypad.h - ajuta cu citirea de la tastatura si ajuta la claritate in cod (sub forma de matrice)
LiquidCrystal_I2C.h - ajuta la afisarea pe ecranul LCD
RTClib.h - pentru functionarea modulului RTC; retine ora si data exacta in cod
TOTP.h - genereaza codul temporar
Base32.h - decodeaza cheia secreta in baza 32
Element de noutate: Deblocarea seifului se face prin autentificarea in 2 pasi; codul pentru seif se schimba la fiecare 30 de secunde si poate fi gasit pe aplicatia Google Authenticator dupa scanarea unui cod QR
Functionalitati din laboratoare: GPIO, USART, PWM, I2C
Algoritm:
in functia setup() se initializeaza toti pinii si variabilele necesare
la fiecare iteratie din functia loop() se genereaza codul temporar folosind data si ora exacte, retinute intr-o variabila de tip RTC_DS3231
se primeste un simbol de la tastatura
daca simbolul este '*' se aplica logica de backspace - se sterge ultimul caracter din sirul introdus si este reafisat noul cod
daca simbolul este '#' se aplica logica de introducere cod astfel:
daca seiful este blocat se verifica daca codul introdus este corect sau nu; in caz afirmativ seiful trece in starea de “deblocat”
daca seiful este deblocat atunci seiful se va inchide si bloca automat si va trece in starea de “blocat”
daca simbolul este o cifra aceasta va fi atasata la sirul deja introdus, cu o singura conditie: se pot introduce maxim 6 cifre (aceasta este lungimea codului)
daca seiful este deblocat si senzorul de distanta detecteaza un obstacol usa se va deschide automat
Calibrari:
senzorul de distanta este setat sa detecteze la o distanta mica pentru a evita situatia ca senzorul sa detecteze ceva prea indepartat si sa deschida usa fara a dori acest lucru
modulul RTC trebuie calibrat cu data si ora exacte dupa ce acesta pierde alimentarea de la curent (exista functia ajutatoare setRTC pentru a facilita acest lucru)
a fost introdus un delay intre activarea motoraselor pentru a nu se suprapune actiunea acestora (ex: al doilea motor sa deschida usa inainte ca primul motor sa inlature incuietoarea)
Optimizari:
Rezultate Obţinute
Care au fost rezultatele obţinute în urma realizării proiectului vostru.
Concluzii
Download
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ă

.
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.
Jurnal
Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.
Bibliografie/Resurse
Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.
Export to PDF