RSA ist eigentlich zwei Algorithmen, einer für asymmetrische Verschlüsselung und einer für digitale Signaturen (der Signaturalgorithmus wird traditionell - aber fälschlicherweise - als "Verschlüsselung mit dem privaten Schlüssel" beschrieben, und das ist eine endlose Quelle der Verwirrung).
Asymmetrische Verschlüsselung verwendet Schlüssel. Schlüssel sind Parameter für den Algorithmus. Der Algorithmus selbst ist für alle gleich (in Bezug auf die Software ist es die ausführbare Datei), während die Schlüssel zwischen den Benutzern variieren. In einem Schlüsselpaar ist der öffentliche Schlüssel der Schlüssel, der zum Verschlüsseln von Daten verwendet wird (Konvertieren eines Datenelements, dh einer Folge von Bytes) , in eine andere Folge von Bytes, die für alle unergründlich ist), während der private Schlüssel der Schlüssel ist, mit dem man Daten entschlüsseln (dh die Verschlüsselung umkehren) kann.
Während bei symmetrischer Verschlüsselung die Verschlüsselungs- und Entschlüsselungsschlüssel identisch sind, aber bei asymmetrischer Verschlüsselung, unterscheiden sich die Verschlüsselungs- und Entschlüsselungsschlüssel voneinander (daher der Name). ;; Sie sind mathematisch miteinander verknüpft, aber es sollte nicht möglich sein (d. h. zu schwierig, mit nur einer Reihe von Computern fertig zu werden), den Entschlüsselungsschlüssel aus dem Verschlüsselungsschlüssel wiederherzustellen. Aus diesem Grund kann der Verschlüsselungsschlüssel veröffentlicht werden, während der Entschlüsselungsschlüssel privat gehalten wird: Durch das Aufdecken des öffentlichen Schlüssels wird der private Schlüssel nicht angezeigt.
Was durch asymmetrische Verschlüsselung erreicht wird, ist keine triviale Leistung. Die Möglichkeit, den öffentlichen Schlüssel preiszugeben, ohne zu viel über den privaten Schlüssel zu sagen, aber so, dass beide Schlüssel zusammenarbeiten (was mit dem öffentlichen Schlüssel verschlüsselt wird, kann mit dem entsprechenden privaten Schlüssel entschlüsselt werden, aber mit keinem anderen), erfordert viel Mathematik! RSA ist voller Mathematik. Dies steht im Gegensatz zu symmetrischen Verschlüsselungsalgorithmen, die "nur" Möglichkeiten sind, durch Mischen von Bits ein großes Datengewirr zu verursachen.
Asymmetrische Verschlüsselung ist das natürliche Werkzeug, wenn vertrauliche Übertragungen zwischen zwei beliebigen Benutzern in einer großen Population möglich sind. Wenn Sie 1000 Benutzer haben und möchten, dass einer der beiden Benutzer Daten miteinander austauschen kann, ohne dass jemand sie ausspionieren kann (einschließlich der 998 anderen Benutzer), besteht die klassische Lösung darin, Schlüssel für die symmetrische Verschlüsselung zu verteilen an jedes Benutzerpaar . Alice und Bob hätten einen bekannten, gemeinsamen Schlüssel; Alice und Charlie hätten auch einen gemeinsamen Schlüssel (nicht der gleiche); und Bob und Charlie auch; und so weiter. Jeder Benutzer müsste sich seinen "gemeinsamen Schlüssel" mit jedem der 999 anderen Benutzer merken, und Sie hätten insgesamt 499500 Schlüssel. Das Hinzufügen eines 1001. Benutzers würde das Erstellen von 1000 zusätzlichen symmetrischen Schlüsseln umfassen und jedem der 1000 vorhandenen Benutzer einen geben. Die gesamte Schlüsselverteilung wird bald zu einem unbrauchbaren / nicht realisierbaren Albtraum. Bei der asymmetrischen Verschlüsselung sind die Dinge in Bezug auf die Schlüsselverteilung jedoch viel einfacher: Jeder Benutzer muss sich nur an seinen eigenen privaten Schlüssel erinnern. und die öffentlichen Schlüssel (die öffentlich sind) können durch irgendeine Art von Rundfunk (z. B. ein Verzeichnis) verteilt werden.
RSA weist einige betriebliche Einschränkungen auf. Bei der am häufigsten verwendeten Variante (der als PKCS # 1 v1.5 bekannten), wenn die Größe des RSA-Schlüssels "1024 Bit" beträgt (was bedeutet, dass die zentrale mathematische Komponente des Schlüsselpaars a ist 1024-Bit-Ganzzahl), dann kann RSA eine Nachricht mit einer Länge von bis zu 117 Byte verschlüsseln und eine verschlüsselte Nachricht mit einer Länge von 128 Byte liefern. Diese begrenzte Größe und die Zunahme der Größe beim Verschlüsseln sind unvermeidbare Folgen der mathematischen Struktur des RSA-Verschlüsselungsprozesses. Aufgrund dieser Einschränkungen verschlüsseln wir Daten normalerweise nicht direkt mit RSA. Stattdessen wählen wir eine kleine Folge von zufälligen Bytes aus, die wir Sitzungsschlüssel nennen. Wir verschlüsseln den Sitzungsschlüssel mit RSA. und dann verwenden wir den Sitzungsschlüssel mit einem symmetrischen Verschlüsselungsalgorithmus, um die gesamte Nachricht zu verarbeiten. Dies wird als Hybridverschlüsselung bezeichnet.
SHA ist der gebräuchliche Name für eine Familie von kryptografischen Hash-Funktionen. Das allererste Mitglied dieser Familie wurde unter dem Namen "SHA" beschrieben, wurde jedoch bald abgelehnt, nachdem eine ernsthafte Schwäche darin gefunden wurde. Eine feste Version wurde unter dem Namen SHA-1
veröffentlicht (die schwache Version ist umgangssprachlich als SHA-0
bekannt). Später wurden der Familie vier neue SHA-ähnliche Funktionen hinzugefügt ( SHA-224
, SHA-256
, SHA-384
und SHA-512
: Diese werden zusammen als 'SHA-2' bezeichnet.
Hash-Funktionen haben keinen Schlüssel. Eine Hash-Funktion ist ein ausführbarer Algorithmus, der rein ist Code. Es gibt einen SHA-1 und jeder verwendet den gleichen.
Hash-Funktionen machen "nur" ein großes Durcheinander der Eingabedaten, das nicht entschlüsselt werden soll. Eigentlich soll es widerstandsfähig gegen Enträtseln sein. Obwohl jeder alles weiß, was über eine Hash-Funktion bekannt sein muss (es gibt keinen Schlüssel, nur Code, und nichts davon ist geheim), stellt sich heraus, dass es angesichts der. "Zu schwierig" ist, eine übereinstimmende Eingabenachricht neu zu berechnen Ausgabe der Hash-Funktion. Es ist sogar nicht möglich, zwei unterschiedliche Eingabenachrichten zu finden, die, wenn sie der Hash-Funktion zugewiesen werden, dieselbe Ausgabe ergeben. Es muss solche Nachrichtenpaare geben, die als Kollisionen bezeichnet werden, da eine Hash-Funktionsausgabe eine feste kleine Größe hat, während akzeptierte Eingaben viel größer sein können, sodass es mehr gibt mögliche Eingänge als mögliche Ausgänge. Es ist eine mathematische Gewissheit, dass für jede Hash-Funktion Kollisionen existieren, aber tatsächlich eine zu finden, ist eine andere Sache.
Eine Hash-Funktion selbst hat nichts von unmittelbar hohem Wert, ist aber sehr wichtig Baustein für andere Algorithmen. Beispielsweise werden sie mit digitalen Signaturen verwendet. Eine digitale Signatur "beweist" das bewusste Handeln eines bestimmten Unterzeichners über ein Datenelement; Dies beinhaltet wie die asymmetrische Verschlüsselung Schlüsselpaare und Mathematik sowie die damit verbundenen Einschränkungen für die signierten Daten. Eine Hash-Funktion h ist so, dass das Signieren von h (m) genauso gut ist wie das Signieren von m selbst: da es nicht möglich ist, zwei unterschiedliche Nachrichten zu finden Bei einem Hash mit demselben Wert ist die Genehmigung der Hash-Ausgabe gut genug. Der Punkt ist, dass die Ausgabe der Hash-Funktion klein genug ist, um mit der im Signaturalgorithmus verborgenen Mathematik verwendet werden zu können, selbst wenn die Nachricht selbst groß ist (SHA-1 kann Gigabyte an Daten verarbeiten, und ergeben eine 20-Byte-Ausgabe).
Es kann angemerkt werden, dass einige neuere Varianten des RSA-the-Encryption-Algorithmus (mit dem 'OAEP-Padding' von PKCS # 1 v2.0) intern Hash-Funktionen verwenden. Hash-Funktionen sind gute "Randomizer" (die Ausgabe einer Hash-Funktion weist keine erkennbare Struktur auf), und dies macht sie geeignet, um ausgefeiltere kryptografische Algorithmen mit guten Sicherheitsmerkmalen zu erstellen.
In SSL / TLS (HTTPS ist nur HTTP innerhalb eines SSL / TLS-Tunnels), Hash-Funktionen werden für verschiedene Zwecke verwendet:
- als Teil der asymmetrischen Verschlüsselung und / oder digitale Signaturen;
- als Teil von HMAC, damit Client und Server überprüfen können, ob die ausgetauschten Daten während der Übertragung nicht geändert wurden;
- als Baustein für eine Schlüsselableitungsfunktion, die einen bestimmten Sitzungsschlüssel in mehrere symmetrische Schlüssel "erweitert", die für die symmetrische Verschlüsselung und Integritätsprüfung in beiden Richtungen des Tunnels verwendet werden.
Das KDF stützt sich auf die "Randomisierung" und Nichtinvertierbarkeit der Hash-Funktion. In SSL / TLS bis TLS 1.1 basiert das KDF auf zwei Hash-Funktionen, MD5 und SHA-1, um es robust zu machen, selbst wenn später Schwachstellen in MD5 oder SHA- gefunden wurden. 1. Es stellte sich heraus, dass in beiden Schwachstellen gefunden wurden, die jedoch keine Unterbrechung des in SSL / TLS verwendeten KDF zuließen. Trotzdem wechselte TLS 1.2 zu einem anderen KDF, das eine einzelne konfigurierbare Hash-Funktion verwendet, normalerweise SHA-256, für die derzeit keine Schwäche bekannt ist.