News - Features - Downloads - Forum - Team - Support - Switch View: Screen
Login - Registrierung - Passwort vergessen

Antworten: 0
Seite [1]
reVerB


Geekboy




Beiträge: 1237
# Thema - 25.08.2015 um 12:06 Uhr
Halli Hallo,

nach unfassbarer Ewigkeit bin ich auch mal wieder hier und habe da mal eine kleine Frage. Ich habe da für mein kleines RIA-Framework eine Funktion zum hashen eines Passwortes geschrieben und würde gerne mal eine Meinung dazu hören. Denn schließlich würde ich auch gerne mein Clansphere damit ausstatten. Ich halte das Teil schon für effektiv gegen Bruteforce, kollision und auch Rainbowtable-Angriffe. Aber da könnte ich mich auch täuschen. Ist etwas gegen den Algo einzuwenden?
 
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
1. / 2. / ... 
 function rubiksSaltedHash($password,$regstamp) {
        
$hashed_stamp substr(preg_replace("![^0-9]!","",hash("sha256",$regstamp)),0,12);
        
$hashes = array("md5","sha1","sha256","sha384","ripemd128","ripemd160","ripemd256","ripemd320","snefru","gost");
        
$salt_len = (int) $hashed_stamp[11] > ? (int) $hashed_stamp[11] : 9;
        
$pw_prehash $hashes[(int) $hashed_stamp[10]];
        
$signarray[0] = array("a","c","e","g","h","j","l","n","p","r");
        
$signarray[1] = array("b","d","f","i","k","m","o","q","s","t");
        
$signarray[2] = array("1","3","5","7","9","#","*","-",".",",");
        
$signarray[3] = array("2","3","6","8","0",":","_","=","/","!");
        
$conv_timestamp str_split(substr((string) $hashed_stamp,0,$salt_len));
        
$salt "";
        foreach(
$conv_timestamp as $num) {
            
$salt .= $signarray[0][(int) $num];
            
$salt .= $signarray[1][(int) $num];
            
$salt .= $signarray[2][(int) $num];
            
$salt .= $signarray[3][(int) $num];
            
$signarray[0] = array_reverse($signarray[0]);
            
$signarray[1] = array_reverse($signarray[1]);
            
$signarray[2] = array_reverse($signarray[2]);
            
$signarray[3] = array_reverse($signarray[3]);
            
$signarray array_reverse($signarray);
        }
        
$spl_salt str_split($salt);
        
$pass array_reverse(str_split(hash($hashes[(int) $hashed_stamp[10]],$password)));
        
$new_password "";
        if(
count($pass) > count($spl_salt)) {
            foreach(
$pass as $num => $char) {
                
$new_password .= $char;
                if(isset(
$spl_salt[$num])) {
                    
$new_password .= $spl_salt[$num];
                }
            }
        } else {
            foreach(
$spl_salt as $num => $char) {
                
$new_password .= $char;
                if(isset(
$pass[$num])) {
                    
$new_password .= $pass[$num];
                }
            }
        }
        return 
hash("sha512",$new_password);
    }


Eine Demo dazu gibt es hier: http://amdpush.bplaced.net/tools/rubiks.php

Würde mich über Rückmeldung freuen.

EDIT: Ich habe den Code noch einmal kurz überarbeitet, da ich eine Sicherheitslücke entdeckt hatte. Passwort-Prehash sowie der erzeugte Salt ergaben zusammen eine fixe Länge, wodurch sich Bruteforce nur auf Zeichenkombinationen mit 82 Zeichen hätten knzentrieren können. Jetzt ist die Saltlänge unterschiedlich und der Prehash wechselt, weswegen auch die Länge des Prehash wechseln kann.

Screenshot mit PHP Desktop im Anhang
Dateianhänge:
jpg rubiks_screen.JPG (227.17 KiB - 50 mal heruntergeladen )


Zuletzt editiert von reVerB am 25.08.2015 um 13:09 Uhr (3x Editiert)
Inaktiv
Antworten: 0
Seite [1]


Sie müssen sich registrieren, um zu antworten.


ClanSphere Project - Mailus - Imprint - Disclaimer - Scriptinfo