it-swarm-eu.dev

SHA, RSA und die Beziehung zwischen ihnen

SHA ist der Hashing-Mechanismus. RSA ist jedoch der Verschlüsselungsalgorithmus.

Verwendet der RSA-Algorithmus SHA Hashing-Mechanismus, um Hashing-Schlüssel zu generieren, die wiederum zum Verschlüsseln der Nachricht verwendet werden?).

Darüber hinaus gibt RSA selbst 2 Schlüssel. Man kann öffentlich und einer privat gehalten werden. Mit diesen Schlüsseln können nun sowohl verschlüsselt als auch entschlüsselt werden. Ref: RSA . Was nützt dann SHA in RSA?

In einem Zertifikat, das von einer Site ausgestellt wird, die HTTPS-Sicherheit bietet, ist ein SHA sowie ein MD5-Schlüssel vorhanden. Wie werden diese bei der Ver- oder Entschlüsselung von Daten erzeugt und verwendet, die an den Browser übertragen werden? ?

36
whitehat

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" bezeichnet der private Schlüssel "und dies ist eine endlose Quelle der Verwirrung).

Bei der asymmetrischen Verschlüsselung werden Schlüssel verwendet. 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, mit dem verschlüsselt Daten (Daten konvertieren) verwendet werden , dh eine Folge von Bytes, in eine andere Folge von Bytes, die für alle unergründlich ist), während der privater Schlüssel der Schlüssel ist, mit dem man entschlüsseln Daten ( dh die Verschlüsselung umkehren).

Während bei symmetrischer Verschlüsselung die Verschlüsselungs- und Entschlüsselungsschlüssel identisch sind, aber bei asymmetrischer Verschlüsselung die Verschlüsselungs- und Entschlüsselungsschlüssel sind voneinander verschieden (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 Anzeigen 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 ist, 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 wir vertrauliche Übertragungen zwischen zwei beliebigen Benutzern in einer großen Population ermöglichen möchten. 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 Paar Benutzer. 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. Mit asymmetrische 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 hat einige betriebliche Einschränkungen. 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 kryptografische 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, Die zusammen als 'SHA-' bezeichnet werden. 2 ').

Hash-Funktionen haben keinen Schlüssel. Eine Hash-Funktion ist ein ausführbarer Algorithmus, der reiner Code ist. Es gibt eins SHA-1 und jeder benutzt das gleiche.

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 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 gibt muss solche Nachrichtenpaare - genannt Kollisionen - weil eine Hash-Funktionsausgabe eine feste kleine Größe hat, während akzeptierte Eingaben viel größer sein können, Es gibt also mehr 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 macht nichts von unmittelbar hohem Wert, ist jedoch ein sehr wichtiger Baustein für andere Algorithmen. Zum Beispiel werden sie mit digitale 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 h (m) so gut ist wie das Signieren m selbst: da es ist Wenn zwei unterschiedliche Nachrichten mit demselben Hash-Wert nicht gefunden werden können, ist die Genehmigung der Hash-Ausgabe ausreichend. 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) werden Hash-Funktionen für verschiedene Zwecke verwendet:

  • als Teil der asymmetrischen Verschlüsselung und/oder digitalen 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 beide 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 wird das KDF über zwei Hash-Funktionen MD5 und SHA-1 aufgebaut, um es robust zu machen, selbst wenn später Schwachstellen in MD5 oder gefunden wurden SHA-1. Es stellt sich heraus, dass in both Schwachstellen gefunden wurden, aber es erlaubte keine Unterbrechung des KDF, wie es in SSL/TLS verwendet wird. Trotzdem wechselte TLS 1.2 zu einem anderen KDF, das eine einzige konfigurierbare Hash-Funktion verwendet, normalerweise SHA-256, für die derzeit keine Schwäche bekannt ist.

51
Thomas Pornin

SHA wird in RSA nicht verwendet.

Kryptografische Protokolle wie SSL, SSH und andere verwenden jedoch unterschiedliche Algorithmen wie SHA und RSA für unterschiedliche Zwecke. SSL verwendet RSA (Verschlüsselung) oder DH (mit RSA-, DSA- oder ECDSA-Signatur) als Schlüssel Verhandlung und AES oder 3DES für die Datenverschlüsselung. Im PGP-Protokoll/Dateiformat werden RSA, DSA und ElGamal zum Signieren und Verschlüsseln verwendet.

4
chris

Wie Sie bemerkt haben, sind dies zwei verschiedene Dinge. Hash (SHA) soll sicherstellen, dass Datenintegrität und Verschlüsselung (RSA) die Vertraulichkeit der Daten gewährleisten. Sie werden zusammen verwendet, um sicherzustellen, dass die Daten nicht gemildert werden und nur die richtige Partei sie lesen kann.

HTTPS ist eine Form einer PKI, die Integrität, Vertraulichkeit und Authentifizierung bietet. SHA oder MD5 sind nur zwei verschiedene Hashing-Algorithmen, mit denen die Integrität von https-Verbindungen sichergestellt wird.

0
breakingigloo

Natürlich ist es möglich, dass SHA verwendet wird, um einen PRNG (Pseudozufallszahlengenerator) zum Generieren der RSA-Schlüssel zu erstellen. Es ist jedoch auch möglich, andere Krypto-Grundelemente (z. B. AES) zu verwenden. Für dieses PRNG gibt es spezielle Spezifikationen (NIS SP 800-90, ANSI X9.31). Dem "reinen" RSA ist es egal, wie der Schlüssel generiert wird, aber um RSA in einer realen Anwendung anzuwenden, müssen wir sicher sein, dass der generierte Schlüssel durch einen echten (oder scheinbar durch einen) zufälligen Prozess generiert wird. Wenn nicht, dann ist es für einen Angreifer leicht zu erraten, was die Schlüssel sind (Wenn die Keays nicht zufällig sind, kann der Angreifer auch die berechnen).

0
user536

RSA ist ein asymmetrischer Kryptografiealgorithmus, mit dem Informationen an eine bestimmte Partei gesendet werden, ohne dass Sie sie erneut entschlüsseln können. Kann aber trotzdem von der anderen Person entschlüsselt werden. Diese Algorithmen sind sehr langsam und möchten daher nur für kleine Datenmengen verwendet werden.

SHA ist eine Suite von kryptografischen Hashing-Algorithmen. Dies ist eine kleinere Darstellung eines großen Datenblocks. Für kryptografische Zwecke möchten wir, dass die Anforderung erfüllt wird, dass es nicht möglich ist, einen Datensatz so zu finden, dass er mit einem bestimmten Hash (in) übereinstimmt Mit anderen Worten, Sie können nicht von Hash zu Daten wechseln, die diesen Hash erzeugen (unabhängig davon, ob dieselben Daten vorhanden sind oder nicht).

Schließlich gibt es Algorithmen wie AES, die in der symmetrischen Kryptographie verwendet werden, bei der beide Seiten denselben Schlüssel haben und mit demselben Schlüssel sowohl verschlüsseln als auch entschlüsseln können.

Grundsätzlich setzen wir diese verschiedenen Dinge auf unterschiedliche Weise zusammen: Wir werden also RSA verwenden, um einen Satz symmetrischer (AES) Schlüssel zu senden und zu vereinbaren (nur für die eine Sitzung). Auf diese Weise kann niemand außer der anderen unsere Daten entschlüsseln Person, da sie die symmetrischen Schlüssel nicht erreichen konnten und wir nicht die langsame asymmetrische Kryptographie für alle Daten durchführen, sondern nur einen relativ kleinen symmetrischen Verschlüsselungsschlüssel.

Hashing wird in solchen Systemen normalerweise folgendermaßen verwendet. Wir möchten überprüfen, ob die Daten von der anderen Person stammen. Daher entschlüsselt er den Klartext mit seinem privaten Schlüssel. Wenn wir diesen Chiffretext verschlüsseln, sollten wir die Daten wieder herausholen ( Stellen Sie sich Verschlüsselung grundsätzlich als Umkehrung der Entschlüsselung vor, und dies macht plötzlich Sinn!). Wie ich bereits sagte, ist die asymmetrische Kryptographie jedoch langsam. Warum also nicht die Daten hashen und den Hash auf diese Weise signieren, können wir die Integrität der Daten überprüfen, ohne dass jemand in der Lage ist, Daten zu erstellen, die übereinstimmen.

0
ewanm89