Frage:
SHA, RSA und die Beziehung zwischen ihnen
whitehat
2011-11-29 12:24:04 UTC
view on stackexchange narkive permalink

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

Verwendet der RSA-Algorithmus auch den 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. Einer 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 ist dann die Verwendung von SHA in RSA?

In einem Zertifikat, das von einer Site ausgestellt wird, die HTTPS-Sicherheit bietet, sind sowohl ein SHA- als auch 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?

Fünf antworten:
Thomas Pornin
2011-11-29 18:55:50 UTC
view on stackexchange narkive permalink

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.

Nein, das Signieren ist die Entschlüsselung von Klartextdaten mit dem privaten Schlüssel, was auch dann keinen Sinn macht, bis man Verschlüsselung und Entschlüsselung als inverse Operationen betrachtet, die wir grundsätzlich rückwärts ausführen können.
"Die Größe des RSA-Schlüssels beträgt '1024 Bit'" - Sie verwenden den Begriff 'Größe des RSA-Schlüssels'.RSA ist der Algorithmus und hat keine Größe.Das Wort "Größe" beschreibt hier die "Schwierigkeit" des Algorithmus in Bezug auf etwas aus den Interna des Algorithmus?
chris
2011-11-29 14:30:20 UTC
view on stackexchange narkive permalink

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) für die Schlüsselverhandlung und AES oder 3DES für die Datenverschlüsselung. Im PGP-Protokoll- / Dateiformat werden RSA, DSA und ElGamal zum Signieren und Verschlüsseln verwendet.

SHA wird bei der Signatur- und Integritätsprüfung in SSL verwendet.
Es kann verwendet werden, Sie wählen vor dem Schlüsselaustausch eine Verschlüsselungssuite (bestehend aus Authentifizierungsalgorithmus, Hashing-Algorithmus und Verschlüsselungsalgorithmus). Sie können auch MD5 auswählen, wenn der Server dies unterstützt.
Nun, keine Zertifizierungsstelle in ihrem richtigen Namen würde das jetzt für ihre Zertifikate verwenden, oder? ;) Ja, ich weise nur darauf hin, dass du die halbe Frage zum Thema Hashing irgendwie verpasst hast!
Sie haben auch vermisst, wie PGP RSA oder ElGamal verwendet und DSA asymmetrisches Material.
Ich habe nichts vermisst. Die Frage war, wie SHA in RSA verwendet wird. Die Antwort ist, es ist nicht. Ich gebe keine abschließende Liste aller Verwendungsmöglichkeiten kryptografischer Algorithmen. Außerdem sind Zertifizierungsstellen, die MD5 in ihren Zertifikaten verwenden, nicht mit Servern und Clients identisch, die MD5 bei der Aushandlung von SSL-Sitzungen verwenden. Sie können MD5 in letzterem mit einem SHA-1-Zertifikat verwenden.
natürlich und umgekehrt, die frage wurde auch speziell nach sha gestellt!
Sie haben Recht, ich habe den letzten Teil über SHA vs MD5 in SSL verpasst. Ich sehe immer noch nicht, was PGP damit zu tun hat. Zum Glück gab Thomas Pornin bereits eine hervorragende Antwort.
PGP! = RSA, DSA oder El Gamal
more PGP ist ein System für die Krypto mit öffentlichen Schlüsseln für gespeicherte Nachrichten wie S / MIME
Es sind solche Dinge, die in erster Linie zu solchen Fragen führen.
Lesen Sie noch einmal: "In PGP werden RSA, DSA und ElGamal zum Signieren und Verschlüsseln verwendet." Ich sage also, dass RSA, DSA und ElGamal in PGP verwendet werden. Wie ist das falsch?
Okay, ich lasse es Sie haben, es ist zumindest leicht zu lesen, vage, wo die Liste beginnt und endet.
Ich rufe B.S.auf diese Antwort.RSA CAN und DOES verwenden SHA1: https://www.w3.org/PICS/DSig/RSA-SHA1_1_0.html Wenn Sie einen Verschlüsselungsalgorithmus wie RSA verwenden, müssen Sie die Hashing-Funktion zum Generieren der Schlüssel angeben.RSA erlaubt nur SHA.
breakingigloo
2011-11-29 13:15:47 UTC
view on stackexchange narkive permalink

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 in Verbindung 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.

SHA an sich wird nicht verwendet, um die Datenintegrität sicherzustellen, sondern nur, um einen eindeutigen Wert aus Daten zu erstellen. Außerdem ist HTTPS eine Variante von HTTP, die SSL verwendet, und keine PKI.
Würden Sie nicht sagen, dass Sie mit einem einzigartigen Wert die Integrität der Daten gewährleisten? http://www.garykessler.net/library/crypto.html#hash
https verwendet digitale Zertifikate, private und öffentliche Schlüssel, daher denke ich, dass es eine Form von PKI ist.
Ein eindeutiger Wert bedeutet keine Integrität. Ein Protokoll, das solche Daten erstellt und überprüft, verleiht Integrität. Es gibt einen Unterschied zwischen Algorithmen und Protokollen, die sie verwenden. Über PKI wird die SSL-PKI viel breiter angewendet als nur in HTTPS. HTTPS ist keine PKI, HTTPS verwendet SSL, das eine PKI verwendet (die auch von S / MIME und anderen Anwendungen verwendet wird).
Es mag wie eine Semantik erscheinen, aber imho sind die Unterscheidungen wichtig, um über Sicherheit nachzudenken :-)
Die Signatur der @chris:-Software überprüft die Datenintegrität. Und signierte Daten sind ein Hash, mit dem jedoch ein Hash verbunden ist. Ich würde sagen, SHA stellt die Datenintegrität sicher, wenn die Identifizierung des Autors nicht erforderlich ist (wie bei Ihnen ist es egal, wer ich bin. Nur wenn das von mir angebotene Paket intakt ist).
user536
2011-11-29 14:38:50 UTC
view on stackexchange narkive permalink

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).

Tatsächlich gibt es einige Dinge, bei denen es sich um große Primzahlen handelt. Wir verwenden wahrscheinlich große Primzahlen, aber es ist nicht nur eine Zufallszahl.
ewanm89
2011-11-29 19:12:25 UTC
view on stackexchange narkive permalink

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 Wir möchten, dass dies die Anforderung erfüllt, dass es nicht möglich ist, einen Datensatz so zu finden, dass er mit einem bestimmten Hash ü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 ein auf verschiedene Arten zusammen: Also werden wir RSA verwenden, um einen Satz symmetrischer (AES) Schlüssel (nur für die eine Sitzung) zu senden und zu vereinbaren. Auf diese Weise kann niemand unsere Daten entschlüsseln, außer der anderen Person, wie sie es nicht konnten Wenn Sie die symmetrischen Schlüssel in die Hand nehmen, führen wir nicht die langsame asymmetrische Kryptografie für alle Daten durch, sondern nur für eine relativ kleine symmetrischer 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 verschlüsseln Mit diesem Chiffretext sollten wir die Daten wieder herausholen (im Grunde genommen denken wir an Verschlüsselung als Umkehrung der Entschlüsselung und das macht plötzlich Sinn!), aber wie ich bereits sagte, ist die asymmetrische Kryptographie 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.

"Mit privatem Schlüssel signieren"! = "Mit privatem Schlüssel entschlüsseln". Das Signieren ist eine grundlegende Operation als das Entschlüsseln / Verschlüsseln, trotz der oberflächlichen Ähnlichkeit zwischen RSA-Signieren und RSA-Entschlüsselung.
Nein, das ist es nicht, es ist auch nicht der Verschlüsselungsschritt, weshalb es die Leute in beide Richtungen verwirrt!


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...