So, es war schon lange mal Zeit, dass jemand so einen Thread erstellt, da es ein extrem beliebter Fehler zu sein scheint, eine Verschlüsselung und einen Hash zu verwechseln. Ich habe das absichtlich hier im OffTopic gepostet, da ich hier auf Keinerlei Code oder sonstiges eingehen werde, dieser Artikel wird sich ausschließlich im theoretischen Bereich abspielen. Ich muss auch dazu sagen, dass ich absolut kein Fachmann im Bereich Kryptographie bin und ich meine Erklärungen deswegen allgemein halten werden.
Was ist eine Verschlüsselung?
Eine Verschlüsselung ist ein Algorithmus, der aus einer (meist beliebigen) Eingabe unter Verwendung eines sogenannten Keys (das ist meist ein Passwort, kann aber auch etwas anderes sein) eine Ausgabe bildet, die unter Angabe dieses Keys auch wieder in die ursprüngliche Eingabe zurückgeführt werden kann. Das wichtige an der Verschlüsselung ist also, dass die Verschlüsselten Daten auch wieder entschlüsselt werden können, aber eben nur, wenn der Key bekannt ist.
Eine Verschlüsselung muss übrigens auch die Bedingung erfüllen, dass sowohl der Verschlüsselungs- alsauch der Entschlüsselungsalgorithmus bekannt sein können und die Verschlüsselten Daten trotzdem nicht ohne den Key entschlüsselt werden können, also dass der Algorithmus ohne den Key wertlos ist.
Bei einer Verschlüsselung muss außerdem jede Eingabe eine andere Ausgabe besitzen, da sonst die Entschlüsselung nicht mehr gewährleistet wäre. Der Algorithmus muss also genauso viele Ausgaben wie Eingaben besitzen, das gilt auch bei einer unendlich großen Eingabemenge.
Die 5 besten Verschlüsselungsalgorithmen derzeit sind wohl
Alle diese Algorithmen haben eine unendlich große Eingabemenge, und müssen daher auch eine unendlich große Ausgabemenge besitzen. Um dies zu erreichen gibt es soweit ich weiß nur einen Weg: die Ausgabe darf keine konstante Länge besitzen, da bei einer endlichen Anzahl Ausgabezeichen auch nur eine endlich Anzahl Ausgaben vorhanden ist. Die 5 oben produzieren wohl eine Ausgabe von der selben Länge wie die Eingabe, was die einfachste Möglichkeit ist.
Auch zu bemerken ist, dass eine Verschlüsselung nach dem heutigen Wissenstand ohne den passenden Key nicht entschlüsselbar ist und auch nie entschlüsselbar sein wird. Dies kann sich nur ändern, wenn die komplette Mathematik einen Umbruch erfahren würde, der es ermöglicht bestimmte heute unlösbare Probleme zu lösen, was aber nicht anzunehmen ist.
Anmerkung: ich habe hier nur symmetrische Verschlüsselungen beschrieben. Neben diesen gibt es auch noch asymmetrische, die für die Ver- und Entschlüsselung jeweils unterschiedliche Keys verwenden, der Rest bleibt dort jedoch gleich. Asymmetrische Verschlüsselungen werden häufig bei Übertragungen verwendet (z.B. eMails), während symmetrische z.B. bei Archiven wie ZIP oder RAR zu finden sind.
Was ist ein Hash?
Ein Hashalgorithmus ist im Vergleich zu der Verschlüsselung dafür gemacht, dass man die Ausgabe nicht wieder in die Eingabe zurückführen kann. Hier wird auch kein Key benötigt und die Anzahl der Ausgaben ist endlich, da die Ausgabelänge konstant ist. Die Eingabe kann währenddessen aber von beliebiger Länge sein und die Eingabemenge ist unendlich groß. Dies hat unweigerlich zur Folge, dass man jeder Ausgabe unendlich viele Eingaben zuordnen kann, denn
Aufgrund dessen ist wohl der Irrglaube entstanden, dass man einen Hash "entschlüsseln" könne. Auf eine gewisse Art stimmt das sogar, denn es ist tatsächlich möglich für einen Hash eine Eingabe zu finden, die diesen Hash erzeugt, jedoch ist dies 1. nicht als entschlüsseln zu bezeichnen, da man lediglich eine aus unendlich Möglichkeiten gefunden hat (man spricht dann von einer Kollision), das Ergebnis also nicht eindeutig ist, und 2. da es nicht beabsichtigt ist, man kann so etwas quasi nur durch Raten herausfinden (es gibt auch analytische Funktionen, die es einem etwas vereinfachen, aber so tief möchte und kann ich gar nicht in die Materie eintauchen).
Die bekanntesten Hash-Verfahren sind:
MD5 ist inzwischen schon sehr alt und hat eine so kurze Ausgabelänge, dass es mithilfe der von mir oben genannten analytischen Methoden mit vergleichsweise geringem Aufwand möglich ist, Kollisionen zu finden. SHA1 ist für den Moment noch sicher, es wurden aber auch hierfür schon Kollisionen gefunden.
Je länger die Schlüssellänge, desto schwieriger wird es, Kollisionen zu finden, jedoch ist es theoretisch nie unmöglich, sodass mit zunehmender Leistung der Computer immer neue Hashverfahren mit größeren Schlüssellängen benötigt werden, um Sicherheit zu gewährleisten. Jedoch muss ich dazusagen, dass man momentan und vermutlich auch noch die nächsten 20 Jahre mit SHA224 absolut sicher wäre, bei SHA512 wage ich gar keine Vermutung, da der Rechenaufwand mit der Schlüssellänge exponentiell steigt.
Was ist eine Verschlüsselung?
Eine Verschlüsselung ist ein Algorithmus, der aus einer (meist beliebigen) Eingabe unter Verwendung eines sogenannten Keys (das ist meist ein Passwort, kann aber auch etwas anderes sein) eine Ausgabe bildet, die unter Angabe dieses Keys auch wieder in die ursprüngliche Eingabe zurückgeführt werden kann. Das wichtige an der Verschlüsselung ist also, dass die Verschlüsselten Daten auch wieder entschlüsselt werden können, aber eben nur, wenn der Key bekannt ist.
Eine Verschlüsselung muss übrigens auch die Bedingung erfüllen, dass sowohl der Verschlüsselungs- alsauch der Entschlüsselungsalgorithmus bekannt sein können und die Verschlüsselten Daten trotzdem nicht ohne den Key entschlüsselt werden können, also dass der Algorithmus ohne den Key wertlos ist.
Bei einer Verschlüsselung muss außerdem jede Eingabe eine andere Ausgabe besitzen, da sonst die Entschlüsselung nicht mehr gewährleistet wäre. Der Algorithmus muss also genauso viele Ausgaben wie Eingaben besitzen, das gilt auch bei einer unendlich großen Eingabemenge.
Die 5 besten Verschlüsselungsalgorithmen derzeit sind wohl
- MARS
- RC6
- Rijndael
- Serpent
- Twofish
Alle diese Algorithmen haben eine unendlich große Eingabemenge, und müssen daher auch eine unendlich große Ausgabemenge besitzen. Um dies zu erreichen gibt es soweit ich weiß nur einen Weg: die Ausgabe darf keine konstante Länge besitzen, da bei einer endlichen Anzahl Ausgabezeichen auch nur eine endlich Anzahl Ausgaben vorhanden ist. Die 5 oben produzieren wohl eine Ausgabe von der selben Länge wie die Eingabe, was die einfachste Möglichkeit ist.
Auch zu bemerken ist, dass eine Verschlüsselung nach dem heutigen Wissenstand ohne den passenden Key nicht entschlüsselbar ist und auch nie entschlüsselbar sein wird. Dies kann sich nur ändern, wenn die komplette Mathematik einen Umbruch erfahren würde, der es ermöglicht bestimmte heute unlösbare Probleme zu lösen, was aber nicht anzunehmen ist.
Anmerkung: ich habe hier nur symmetrische Verschlüsselungen beschrieben. Neben diesen gibt es auch noch asymmetrische, die für die Ver- und Entschlüsselung jeweils unterschiedliche Keys verwenden, der Rest bleibt dort jedoch gleich. Asymmetrische Verschlüsselungen werden häufig bei Übertragungen verwendet (z.B. eMails), während symmetrische z.B. bei Archiven wie ZIP oder RAR zu finden sind.
Was ist ein Hash?
Ein Hashalgorithmus ist im Vergleich zu der Verschlüsselung dafür gemacht, dass man die Ausgabe nicht wieder in die Eingabe zurückführen kann. Hier wird auch kein Key benötigt und die Anzahl der Ausgaben ist endlich, da die Ausgabelänge konstant ist. Die Eingabe kann währenddessen aber von beliebiger Länge sein und die Eingabemenge ist unendlich groß. Dies hat unweigerlich zur Folge, dass man jeder Ausgabe unendlich viele Eingaben zuordnen kann, denn
Eingabemenge / Ausgabemenge = Unendlich / Irgendwas = Unendlich
.Aufgrund dessen ist wohl der Irrglaube entstanden, dass man einen Hash "entschlüsseln" könne. Auf eine gewisse Art stimmt das sogar, denn es ist tatsächlich möglich für einen Hash eine Eingabe zu finden, die diesen Hash erzeugt, jedoch ist dies 1. nicht als entschlüsseln zu bezeichnen, da man lediglich eine aus unendlich Möglichkeiten gefunden hat (man spricht dann von einer Kollision), das Ergebnis also nicht eindeutig ist, und 2. da es nicht beabsichtigt ist, man kann so etwas quasi nur durch Raten herausfinden (es gibt auch analytische Funktionen, die es einem etwas vereinfachen, aber so tief möchte und kann ich gar nicht in die Materie eintauchen).
Die bekanntesten Hash-Verfahren sind:
- MD5
- SHA1
- die SHA2-Familie (SHA-224, SHA-256, SHA-384, SHA-512)
MD5 ist inzwischen schon sehr alt und hat eine so kurze Ausgabelänge, dass es mithilfe der von mir oben genannten analytischen Methoden mit vergleichsweise geringem Aufwand möglich ist, Kollisionen zu finden. SHA1 ist für den Moment noch sicher, es wurden aber auch hierfür schon Kollisionen gefunden.
Je länger die Schlüssellänge, desto schwieriger wird es, Kollisionen zu finden, jedoch ist es theoretisch nie unmöglich, sodass mit zunehmender Leistung der Computer immer neue Hashverfahren mit größeren Schlüssellängen benötigt werden, um Sicherheit zu gewährleisten. Jedoch muss ich dazusagen, dass man momentan und vermutlich auch noch die nächsten 20 Jahre mit SHA224 absolut sicher wäre, bei SHA512 wage ich gar keine Vermutung, da der Rechenaufwand mit der Schlüssellänge exponentiell steigt.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Artentus“ ()