Passwort mit der Brute-force Methode knacken

Beispiel zum Hacken eines Passworts

Um ein Passwort zu "knacken", gibt es mehrere Möglichkeiten. Eine davon ist die sogenannte Brute-force Methode. Mit dieser Methode wird jede mögliche Kombination von Buchstaben, Zahlen und Zeichen ausprobiert. Der Vorteil der Methode ist, dass damit ein jedes Passwort herausgefunden werden kann. Der Nachteil, es dauert bei längeren Passwörtern z.B. 8 Zeichen oder mehr eine Ewigkeit, bis der Rechner die richtige Kombination gefunden hat.

Eine Brute-Force Attacke ist also ein Versuch eines Computerprogrammes ein Passwort einer Datei etc. zu knacken, indem alle möglichen Kombinationen von Buchstaben, Zahlen und Zeichen ausprobiert werden. Aus diesem Grund ist die Länge eines Passwortes und die Rechnergeschwindigkeit für den Erfolg oder Misserfolg einer solchen Attacke entscheidend.

 

Ein Beispiel:

Ein Passwort mit 7 Stellen (nur Kleinbuchstaben) besteht rechnerisch aus 267 (rund 8 Milliarden) Kombinationen. Ein Rechner, der z.B. in der Lage ist 1 Milliarde Schlüssel pro Sekunde zu generieren, kann dieses Passwort in spätestens 8 Sekunden knacken.

Erhöht man nun die Passwortstärke um ein einziges Zeichen und setzt man als Passwort Zahlen, Groß- und Kleinbuchstaben ein, so ergeben sich nun 628 Kombinationen. Das sind rund 218 Billionen Kombinationen. Dafür benötigt der Rechner mit 1 Milliarde Schlüssel pro Sekunde bereits 218000 Sekunden! Das sind rund 60 Stunden.

Wie man sieht, sollte man ein möglichst langes Passwort wählen welches zumindest aus Groß- und Kleinbuchstaben sowie Zahlen besteht. Für ein Passwort mit 10 Stellen würde dieser bereits sehr schnelle Rechner ca. 233000 Stunden also umgerechnet 26 Jahre benötigen!

 

Das folgende Programmbeispiel führt eine Brute-Force Attacke auf ein einzugebendes Passwort durch:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication_bruteforce
{
    class Program
    {
        static char[] zeichen =  {'0','1','2','3','4','5','6','7','8','9','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','A','B','C','D','E','F','G','H','I','J','C','L','M','N','O','P',
                                  'Q','R','S','T','U','V','X','Y','Z'};

        static string Passwort;
        static long versuche = 0;

        static void Main(string[] args)
        {
            Console.WriteLine("Enter your Password");
            Passwort = (Console.ReadLine());

            for (int i = 0; i <= 10; i++)   // Zählschleife für die Anzahl der max. Passwortlänge
            {
                CallBruteForce(i, 0, "");
            }
        }

        static void CallBruteForce(int i, int position, string BaseString)
        {
            for (int Count = 0; Count < zeichen.Length; Count++)
            {
                versuche ++;

                if (position <= i)
                {
                    CallBruteForce(i, position + 1, BaseString + zeichen[Count]);
                }

                if (BaseString + zeichen[Count] == Passwort)
                {
                    Console.WriteLine("Das Passwort ist: " + BaseString + zeichen[Count]);

                    Console.WriteLine("Versuche: " + versuche);
                    Console.ReadLine();
                    Environment.Exit(0);  //Beendet den Prozess und übergibt dem zugrunde liegenden Betriebssystem den angegebenen Exitcode
                }
            }
        }
    }
}