joi, 26 aprilie 2012

Autentificare cu utilizator si parola folosind Arduino Leonardo

English abstract: unsecured authentication method, using email and password, in just two pushes of a button, with the Olimex AVR-T32U4 (Arduino Leonardo like) board

Dupa mii de autentificari cu acelasi cont (utilizator si parola), de mai multe ori pe zi, pe diverse dispozitive, 7 zile din 7, am inceput sa ma cam plictisesc ;)

Cum tot aveam la indemana noua placa AVR-T32U4 de la Olimex, compatibila cu Arduino Leonardo, m-am hotarat sa o utilizez pentru autentificare cu contul meu de Facebook... cu doar doua apasari de buton...

Pentru asta este suficienta placa si un cablu USB de conectare. Breadboardul pe care il vedeti in poza de mai jos e pus doar pentru ca imi place cum arata :D




/*
  Autentificare cu user si parola.
  Total nesigur... oricine are acces, fara nici o verificare ;)
  
  @2012 by http://ro-duino.blogspot.com/
  This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
  
  Bazat pe exemplul de la Olimex
  http://olimex.com/dev/avr-t32u4.html
*/

#define BUTTONINIT  DDRE  &= ~(1<<2)
#define BUTTONSTATE ((PINE & B00000100) != 0)

int previousButtonState = HIGH;   // for checking the state of a pushButton
int counter = 0;                  // button push counter

void setup() {
  BUTTONINIT;
}

void loop() {
  int buttonState = BUTTONSTATE;
  
  if ((buttonState != previousButtonState) && (buttonState == HIGH)) {
    switch (counter) {
    case 0:
      Keyboard.print("iardsoft@yahoo.com\t"); // TAB-ul de dupa email ne trece la campul de parola
      counter = 1;
      break;
    case 1:
      Keyboard.println("Aici-Pun-Parola"); // ENTER-ul de la println realizeaza autentificarea
      counter = 0;
      break;
    }    
  }
  
  previousButtonState = buttonState; 
}


Functionarea este extrem de simpla. Deschidem in browser pagina pe care dorim sa ne autentificam si verificam sa fie cursorul in campul unde trebuie introdusa adresa de email:



Apasam butonul marcat "BUT" de pe placa. Adresa de email este acum completata si am trecut pe campul urmator, cel de parola.



Apasam din nou butonul "BUT" si gata, ne-am autentificat ;)

AVERTISMENT: solutia nu este sigura absolut de loc! Oricine are acces la placa are acces si la cont! Posibile imbunatatiri: adaugarea unei tastaturi numerice si utilizarea unui cod PIN; criptarea datelor; stergerea informatiilor de autentificare dupa 3 incercari nereusite de introducere a PNI-ului, ecran LCD, mai multe conturi etc.

Edit: daca cele doua campuri (utilizator si parola) sunt in ordine, adica daca ne putem deplasa intre utilizator si parola cu tasta TAB, codul merge modificat pentru a se realiza autentificarea cu o singura apasare de buton.

void loop() {
  int buttonState = BUTTONSTATE;
  
  if ((buttonState != previousButtonState) && (buttonState == HIGH)) {
      Keyboard.print("iardsoft@yahoo.com\t"); // TAB-ul de dupa email ne trece la campul de parola
      Keyboard.println("Aici-Pun-Parola"); // ENTER-ul de la println realizeaza autentificarea
  }
  
  previousButtonState = buttonState; 
}


2 comentarii:

  1. O idee pentru viitor:
    Trimiterea unei informatii, de exemplu daca un intrerupator este deschis sau inchis, prin mail folosind o placa arduino via serial.

    Am vazut candva un astfel de proiect si mi s-a parut foarte interesant, in ideea de securitate atunci cand nu esti acasa.

    RăspundețiȘtergere
  2. Este o idee interesanta. Eu prefer sa folosesc un adaptor Ethernet bazat pe ENC28J60, astfel incat sa evit sa las un computer deschis tot timpul.
    Acum aproape doi ani, la prima editie a Intalnirilor Tehnorama am prezentat un montaj compus dintr-o placa Arduino, un shield Ethernet si un senzor de gaz, care trimitea email-uri atunci cand era depasita o anumita valoare. In plus, se lega la serverul meu si actualiza constant datele intr-o baza de MySQL. Inca mai am interfata web aici http://iardsoft.com/rogs/ desi acum arata doar ultima valoare inregistrata :)

    RăspundețiȘtergere