Jump to content
vladiii

Autentificare pe baza de "amprenta"

Recommended Posts

Posted

*Pe baza de imagine, insa "amprenta" sunt mai bine.

Acesta e un cod PHP care permite autentificare pe un site web (admin panel & other shitz) folosind o imagine. Daca pixelii imaginii uploadate in acel moment corespund cu cei din baza de date, atunci se face autentificarea, altfel nu.

Folderul trebuie sa aiba chmod777 (deoarece imaginea se uploadeaza, i se preiau culorile pixelilor, apoi se sterge).

Nu este ceva extraordinar si iesit din comun, dar ma plictiseam aseara. Care ar fi avantajele ? In primul rand nu se poate ghici parola, deoarece la o imagine de 150x150 obtinem 22500 culori (8 caractere parca). Dezavantaje ? Nu stiu cat de fiabil este si partea care nu imi place mie este ca trebuie mereu uploadata imaginea.

conexiune.php


<?php
$hostname="localhost";
$username="username";
$password="password";
$database="db";

$conexiune=mysql_connect($hostname, $username, $password)
or die ("eroare !");

$bazadate=mysql_select_db($database, $conexiune)
or die ("eroare !");
?>

Acum trebuie uploadata imaginea pe server, eu mi-am ales-o pe urmatoarea:

hvphck.jpg

Apoi cream tabela in BD:


<?php
include ("conexiune.php");

$delete="DROP TABLE IF EXISTS tabela";
mysql_query($delete, $conexiune);

$table="CREATE TABLE tabela (
id int(3) NOT NULL AUTO_INCREMENT,
culoare int(200) NOT NULL ,
PRIMARY KEY (id)) TYPE=MyISAM";
if(mysql_query($table)){
echo "Tabelul a fost creat
";
}
else{
echo "Tabelul nu a fost creat
";
}

?>

Urmeaza culoare.php, fisier care poate fi sters dupa ce este rulat o singura data (acesta preia culoarea pixelilor si o baga in bd):


<?php
include ("conexiune.php");
$im = imagecreatefromjpeg("imagine.jpg");
for($i=0; $i<150; $i++)
{
for($j=0; $j<150; $j++)
{
//Extragem culoarea si o introducem in BD
$rgb = imagecolorat($im, $i, $j);
$sql = "INSERT INTO tabela (culoare) VALUES ('".$rgb."')";
if(mysql_query($sql)) { echo "added"; }
else { mysql_error(); }
}
}

mysql_close($conexiune);
?>

Si partea finala... index.php:


<FORM ENCTYPE="multipart/form-data" ACTION="" METHOD=POST>
Imagine: <INPUT NAME="file_up" TYPE="file">
<INPUT TYPE="submit" name="submit" VALUE="Upload">
</FORM>

<?php
include ("conexiune.php");

if($_POST['submit'])
{
$file_upload="true";
$file_up_size=$_FILES['file_up'][size];
if ($_FILES[file_up][size]>17000)
{
die("dimensiune prea mare");
$file_upload="false";
}
//Lasam doar jpg/jpeg
if (!($_FILES[file_up][type] =="image/jpeg"))
{
die ("nu e jpg/jpeg");
$file_upload="false";
}
$file_name=$_FILES[file_up][name];
//Generam un nume pt. imagine
$x[0]=rand(0, 10);
$x[1]=rand(0, 10);
$x[2]=rand(0, 10);
$x[3]=rand(0, 10);
$x[4]=rand(0, 10);
$add="$x[0]$x[1]$x[2]$x[3]$x[4]$file_name";
if($file_upload=="true")
{
if (file_exists($add))
{
die ("Fisierul ales exista deja pe server.");
}
else
{
if(move_uploaded_file ($_FILES[file_up][tmp_name], $add))
{
$link=$add;
$hand=imagecreatefromjpeg($add);
//Preluam dimensiunile
$x=imagesx($hand);
$y=imagesy($hand);
if ($x!= 150 || $y!=150)
{
unlink($link);
die ("dimensiunile nu corespund");
}
//Daca dimensiunile sunt cele bune...
else
{
$count=0;
for ($i=0; $i<150; $i++)
{
for ($j=0; $j<150; $j++)
{
$pixel[$count]=imagecolorat($hand, $i, $j);
$count++;
}
}
unlink($link);
$count=0;
$asd="true";
//Extragem din DB
$sql="SELECT * FROM tabela";
$sql=mysql_query($sql);
while($row=mysql_fetch_row($sql))
{
if ($pixel[$count]!=$row[1])
{
$asd="false";
}
$count++;
}
if ($asd=="false") { echo "parola gresita !"; }
else if($asd=="true") { echo "asta e parola!"; }
else { die("eroare !"); }
}
} } } }
mysql_close($conexiune);
?>

Asta e tot. Daca descoperiti buguri postati-le aici. De mentionat ca nu merge pe IE, insa functioneaza pe Mozilla, Opera, Safari. Bafta !

Posted

scuze ca sunt pe fuga si m-am uitat ff putin, sper sa nu intreb aiurea:

Nu merge mai simplu cu analiza pozei prin comparare cod binar? fara pixel/pixel?

Posted

Nu MD5. Ma refeream la faptu ca poza e verificata pixel cu pixel. Se poate verifica byte cu byte ca fisier. Si atunci o semnatura poate fi si un wav. Hmm gandindu-ma mai departe... se poate aproxima un wav pt o parola vocala...

la o imagine de 150x150 obtinem 22500 culori

150*150*3*256=17280000 (jpg/png 24bit)

Posted

^ Ma refeream ca pentru o imagine de 150x150 obtin 22500 pixeli, fiecare cu o anumita culoare.

As fi putut compara si bit cu bit, insa mi s-a parut mai marfa pixel cu pixel. Plus de asta e mai educativ.

Posted

am discutat cu vladii pe privat.

astept sa-si spuna el parerea aici.

va recomand sa va interesati putin de cum se foloseste criptarea PGP

cheie publica/cheie privata. si chiar sa incercati sa folositi PGP la criptarea mailurile. eu o sa trec cat se poate de mult pe asa ceva.

Posted

Probabil la asta te referi http://robyte.tripod.com/pgp.htm

Eu am folosit si soft pentru criptarea datelor de pe hard de la

http://www.pgp.com/solutions/index.html .

Mi-a luat cam 2 ore si ceva criptarea unui hard de 120 .

Si apoi era simplu inainte sa booteze de pe hard iti cerea sa introduci key phrase sau cum se numea ,deci cuvantul care ti l-ai ales ca parola .

Daca introduceai un Live Cd sau ceva si incercai sa accesezi vreo partitie zicea ca ii corupt sau neaccesibil etc .

Faza buna era ca decriptarea se petrecea in timp ce foloseai , adica nu trebuia sa astepti alte 2 ore decriptarea .

Deci daca aveai informatii ceva pe hard si venea politaiu sa-ti ia hardu , era de ajuns un restart al pc-ului si hardu era in siguranta :)

Posted

treaba e beton nu am ce zice......bv...

dar hai sa elaboram putin....

sa zicem ca avem un scanner pe care scanam amprenta mainii unui user sau a degetelor, a ochilor a fetei..s.a.m.d

facem un program in vb6(sa nu ne complicam cu alte limbaje ca sa fie facut rapid), preia imaginile de la scanner si le trimite catre modulele php ale tale pentru comparatie.Astfel raspunsul dat de baza de date si modulele facute de tine ori permit accesul catre WWW ori se intorc la programul vb6 care actioneaza o instructiune logica catre o usa de acces, catre deschiderea usei locuintei, masinii..etc posibilitati nelimitate

Ca risc exista posibilitati de interpretare sql cu factor de risc dar care se pot elimina usor...atceva mai poate fi facut un decodor de pixeli, pixelul avand o harta exacta RGB dar e destul de complicat asa ca esti pe drumul cel bun.

Nu mai zic ca un soft de genul poate trece lejer de 10000 $

Posted
treaba e beton nu am ce zice......bv...

dar hai sa elaboram putin....

sa zicem ca avem un scanner pe care scanam amprenta mainii unui user sau a degetelor, a ochilor a fetei..s.a.m.d

facem un program in vb6(sa nu ne complicam cu alte limbaje ca sa fie facut rapid), preia imaginile de la scanner si le trimite catre modulele php ale tale pentru comparatie.Astfel raspunsul dat de baza de date si modulele facute de tine ori permit accesul catre WWW ori se intorc la programul vb6 care actioneaza o instructiune logica catre o usa de acces, catre deschiderea usei locuintei, masinii..etc posibilitati nelimitate

Ca risc exista posibilitati de interpretare sql cu factor de risc dar care se pot elimina usor...atceva mai poate fi facut un decodor de pixeli, pixelul avand o harta exacta RGB dar e destul de complicat asa ca esti pe drumul cel bun.

Nu mai zic ca un soft de genul poate trece lejer de 10000 $

Take it easy :).

In primul rand, de cate ori ti se intampla sa iti scanezi amprenta astfel incal fiecare pixel sa coincida, adica sa o suprapui perfect peste amprenta initiala ca sa poti compara ?

Sau ce se intampla daca rezolutia ii diferita (presupunand ca vrei sa accesezi site-ul si de altundeva, nu doar de pe calculatorul tau)?

Un soft care sa foloseasca recunoasterea formelor ca sa redimensioneaze si roteasca amprenta scanata astfel incat sa se suprapuna perfect peste cea salvata ar fi intradevar ceva foarte interesant si care ar face banii.

Softul asta nu poate ramane decat autentificare pe baza de imagine (care poate fi, desigur, si o amprenta) dar care trebuie sa fie mereu aceeasi ;).

@vladiii: Sper sa nu intelegi gresit ce am vrut sa spun, stii foarte bine ca iti respect munca ;).

Posted

Exista 2 metode viabile pentru a face asa ceva: pattern matching sau minutia (care este momentan standardul).

Ambele algoritme insa necesita foarte foarte multa matematica si algoritmica: feature extraction, edge detection etc.

In primul rand, de cate ori ti se intampla sa iti scanezi amprenta astfel incal fiecare pixel sa coincida, adica sa o suprapui perfect peste amprenta initiala ca sa poti compara ?
Sau ce se intampla daca rezolutia ii diferita (presupunand ca vrei sa accesezi site-ul si de altundeva, nu doar de pe calculatorul tau)?
Un soft care sa foloseasca recunoasterea formelor ca sa redimensioneaze si roteasca amprenta scanata astfel incat sa se suprapuna perfect peste cea salvata ar fi intradevar ceva foarte interesant si care ar face banii.

Nu te poti baza pe asa ceva, trebuie sa gasesti in poza originala un centru de interes (daca folosesti pattern matching).

Minutia insa nu merge pe ideea de a lua in considerare toata curba, ci doar anumite coordonate din poza amprentei (spre exemplu: bifurcatiile).

PS: RSA (folosit de PGP) a fost spart prin Lenstra attack, din cate vad insa nu au fost facute publice detaliile despre atac. Mai nou exista Eliptic Curve pentru criptare pe baza de cheie publica.

Posted

mi s-a parut interesanta chestia, chiar foarte... si ma gandeam un pic mai departe la ce a zis lokipaki, daca faci aceeasi chestie, dar pentru un fisier wav/mp3... audio in general si setezi pentru fiecare byte o marja de eroare, nu s-ar putea face deja soft de voice recognition?

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...