PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Passwort-Funktion


BruceCompanys
25.02.2007, 15:07:13
Hi,

ich will mal eure Meinung über meine Passwort hören, sie hat 4 Sicherheitsstufen und soll max 32 machen.

<?php
###########################
#Author: Simon Brass
#
#Title: Password-Maker 0.1
#
#OpenSource!
#Mach was du willst damit!
###########################



$length = 8; //maximale Länge 32!
$save = 3; //Es gibt 4 Sicherheitsstufen

function make_password($length, $save=3){
if($length > 32){
$length = 32;
}
srand((double)microtime() * 500000000);
$letters = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
$other_signs = array("%", "$", "§", "&", "?", "-", "_");
$signs = array();

switch($save){
case 0: #Erste Stufe
for($i=0; $i < $length; $i++){
$key = rand(0, 25);
$signs[] = $letters[$key];
}
break;
case 1: #Zweite Stufe
for($i=0; $i < $length; $i++){
$upper = rand(0, 2);
$upper = (bool)$upper;
$key = rand(0, 25);
if(!$upper){
$signs[]= strtoupper($letters[$key]);
} else {
$signs[] = $letters[$key];
}
}
break;
case 2: #Dritte Stufe
for($i=0; $i < $length; $i++){
$kind = rand(0, 3); //Zahlen werden immer im Verhältnis 1 zu 3 benutzt!
$kind = (bool)$kind;
if(!$kind){
$signs[] = rand(0, 9);
} else {
$upper = rand(0, 2);
$upper = (bool)$upper;
$key = rand(0, 25);
if(!$upper){
$signs[]= strtoupper($letters[$key]);
} else {
$signs[] = $letters[$key];
}
}
}
break;
case 3: //Vierte Stufe
for($i=0; $i < $length; $i++){
$kind = rand(0, 2); //Zahlen und Sonderzeichen werden immer im Verhältnis 1 zu 2 benutzt!
$kind = (bool)$kind;
if(!$kind){
$other = rand(0, 3);
$other = (bool)$other;
if(!$other){
$key = rand(0, 6);
$signs[] = $other_signs[$key];
} else {
$signs[] = rand(0, 9);
}
} else {
$upper = rand(0, 2);
$upper = (bool)$upper;
$key = rand(0, 25);
if(!$upper){
$signs[]= strtoupper($letters[$key]);
} else {
$signs[] = $letters[$key];
}
}
}
break;
}
return implode('', $signs);
}

echo make_password($length, $save);

Ich hoffe euch gefällst!

mfg

|Coding
25.02.2007, 15:39:41
Wer braucht ein 32 Zeichen langes Passwort?

Schon bei 8 Zeichen (a-z, A-Z, 0-9) macht eine Versuch das Passwort zu knacken keinen Sinn mehr.

Bei einem 8 Zeichen langen Passwort bestehend aus a-z, A-Z und 0-9 gibt es 218.340.105.584.896 mögliche Kombinationen.

Wer denkt da noch an einen Angriff auf's Passwort?

BruceCompanys
25.02.2007, 15:48:27
Kranke Menschen wie ich...

mfg

feuervogel
25.02.2007, 16:53:54
ich zeig dir mal meine funktion:

<?php

function makePassword( $length ) {
return substr( md5( microtime() . uniqid() ) , 0 , $length );
}

echo makePassword( 8 );

?>


die ist wenigstens genau so sicher, deutlich schneller und nicht so aufgebläht...

feuervogel
25.02.2007, 17:04:28
was mich vor allem wundert, ist, dass es verschiedene sicherheitsstufen gibt. wieso sollte man bei gleich bleibender länge eine "unsichere" stufe wählen? dem besucher wird das passwort zugesandt, er änderts und denkt nie wieder dran. entweder es hat in der zwischenzeit jemand mitgesnifft und war schneller, oder eben nicht. 8 zufällig gewählte zeichen sind (siehe |Coding) in absehbarer zeit nicht zu knacken...man muss eben nur dafür sorgen, dass die zeichen halbwegs zufällig gewählt sind (siehe meine funktion)...

|Coding
25.02.2007, 17:40:02
Hättest Du die Funktion uniqid() auch als Funktion aufgerufen und nicht als "Konstante" verwendet, hättest Du ein Krönchen bekommen.

feuervogel
25.02.2007, 17:46:17
Hättest Du die Funktion uniqid() auch als Funktion aufgerufen und nicht als "Konstante" verwendet, hättest Du ein Krönchen bekommen.

hups :-)

BruceCompanys
25.02.2007, 18:37:53
Bin der PHP-Papst?

woher soll ich denn sowas riechen Hallo?

Aber danke für den Hinweis feuervogel...

ps: die nase musste nicht so hochtrage :D, damit ich was versteh^^

cyan.ide
26.02.2007, 10:22:47
Wer braucht ein 32 Zeichen langes Passwort?

Schon bei 8 Zeichen (a-z, A-Z, 0-9) macht eine Versuch das Passwort zu knacken keinen Sinn mehr.

Bei einem 8 Zeichen langen Passwort bestehend aus a-z, A-Z und 0-9 gibt es 218.340.105.584.896 mögliche Kombinationen.

Wer denkt da noch an einen Angriff auf's Passwort?

Anwendungsfall Forum:
Wenn man in etwa weiss, wann sich das Opfer registriert hat, sind es keine "218.340.105.584.896 mögliche Kombinationen" mehr. In der vorgestellten Funktion wurde ja auf uniqid() verzichtet. D.H. je genauer man den Registrierzeitpunkt kennt, umso kleiner wird die Spanne moeglicher Passwoerter. Es reicht schon fast, wenn ich den Tag kenne, um nur einen Bruchteil der moeglichen Kombinationen testen zu muessen. Wenn es sich dabei dann noch um ein Forum handelt, und ich ausschliessen kann, dass der Registrierzeitpunkt hinter(bzw. nach) dem ersten Postzeitpunkt liegt, nicht weit davor(also frueher), und zwischen Registrierung und erstem Post je nach laenge dessen etwas Zeit vergeht, hab ich recht schnell einen Account mit einer Passwortlaenge von 32 Zeichen geknackt. (...kenntnisse vom Code vorrausgesetzt, aber ein stolzer Author kommt auch irgendwann mit einem ins Gespraech ^^).

Nur so zum Nachdenken, wie ich zu dem Schluss komme, dass 32 Zeichen lange Passwoerter alleine nicht gleich besonders Sicher sein muessen...

Uniqid macht hier an sich auch nicht besonders viel Boden wett, im uebrigen. Hier muss man schon etwas tiefer in der Materie stecken um zu wissen, warum. Tipp:

$geheimezahl = 2588983754;

function makePassword( $length )
{
global $geheimezahl;
return substr( md5( ( microtime() - $geheimezahl ) . uniqid() ) , 0 , $length );
}

echo makePassword( 8 );

_Ich_ halte die Funktion jetzt fuer sicher.
Bitte meckert jetzt nicht wegen dem global rum ;)

Ich hoffe, ich konnte etwas helfen,

Gruss

|Coding
26.02.2007, 10:43:56
Einen offensichtlich bekannten Timestamp zuverwenden ist in der Tat nicht gerade das Beste.

Ich halte es bei meinen Passwörtern immer so, das ich nicht nur a-z, A-Z und 0-9 verwende sondern auch Sonderzeichen und diese Passwörter sind meiner Meinung nach sicher genug um zusagen, dass da ein direkter Angriff auf's Passwort keinen Sinn mehr macht.

BruceCompanys
26.02.2007, 15:21:22
Ich habe es selbst ausprobiert...

hmm, ich werd mir nochmal etwas mehr gedanken machen und eure algorhythmus verwenden also...

mfg

@jcoding: hmm, 32 langes kleinbuchstaben passwort... hmm, mit bruteforce^^, kaboom

|Coding
26.02.2007, 16:11:23
@jcoding: hmm, 32 langes kleinbuchstaben passwort... hmm, mit bruteforce^^, kaboom

Ich weis jetzt nicht wirklich was Du mir damit sagen möchtest.

meikel
26.02.2007, 17:08:20
Ich weis jetzt nicht wirklich was Du mir damit sagen möchtest.
Sicher isser der Meinung, 26^32 ~ 1,9017224572684882414188278160204E+45 Kombinationen wären mit einem PC innerhalb der Garantiezeit knackbar.

|Coding
26.02.2007, 19:19:12
Ach so, ja das ist natürlich gut möglich :)