Wie überprüft ein öffentlicher Schlüssel eine Signatur?

172

Ich versuche, besser zu verstehen, wie öffentliche / private Schlüssel funktionieren. Ich verstehe, dass ein Absender einem Dokument eine digitale Signatur hinzufügen kann, indem er seinen privaten Schlüssel verwendet, um im Wesentlichen einen Hash des Dokuments zu erhalten. Ich verstehe jedoch nicht, wie der öffentliche Schlüssel zum Überprüfen dieser Signatur verwendet werden kann.

Mein Verständnis war, dass öffentliche Schlüssel verschlüsseln, private Schlüssel entschlüsseln ... kann mir jemand helfen, das zu verstehen?

jcampos8782
quelle
3
Gute Frage. :)
Suraj Jain
Ich wollte dies nicht als Antwort hinzufügen und die daraus resultierenden Flammen riskieren, aber wenn Sie das Wort "wie" wirklich bedeutet "wie überprüfe ich eine Signatur" verwenden, besteht eine Möglichkeit darin, gpg4win herunterzuladen. Nach der Installation können Sie mit der rechten Maustaste auf eine Datei klicken und diese überprüfen. Es handelt sich um eine Reihe von Produkten, die in die Windows-Shell integriert werden. Ein solches Dienstprogramm ist Kleopatra, das online nach Zertifikaten sucht, um die Validierung durchzuführen.
Newclique

Antworten:

210

Ihr Verständnis von "Verschlüsselung öffentlicher Schlüssel, Entschlüsselung privater Schlüssel" ist korrekt ... für Daten / Nachrichten ENCRYPTION. Bei digitalen Signaturen ist es umgekehrt. Mit einer digitalen Signatur versuchen Sie zu beweisen, dass das von Ihnen signierte Dokument von Ihnen stammt. Dazu müssen Sie etwas verwenden, das nur SIE haben: Ihren privaten Schlüssel.

Eine digitale Signatur in ihrer einfachsten Beschreibung ist ein Hash (SHA1, MD5 usw.) der Daten (Datei, Nachricht usw.), die anschließend mit dem privaten Schlüssel des Unterzeichners verschlüsselt werden. Da dies etwas ist, das nur der Unterzeichner hat (oder haben sollte), kommt das Vertrauen von dort. Jeder hat (oder sollte) Zugriff auf den öffentlichen Schlüssel des Unterzeichners.

Um eine digitale Signatur zu validieren, muss der Empfänger

  1. Berechnet einen Hash derselben Daten (Datei, Nachricht usw.),
  2. Entschlüsselt die digitale Signatur mit dem PUBLIC-Schlüssel des Absenders und
  3. Vergleicht die 2 Hashwerte.

Wenn sie übereinstimmen, gilt die Signatur als gültig. Wenn sie nicht übereinstimmen, bedeutet dies entweder, dass ein anderer Schlüssel zum Signieren verwendet wurde oder dass die Daten (absichtlich oder unbeabsichtigt) geändert wurden.

Hoffentlich hilft das!

Schattenmann
quelle
13
Mein Verständnis war, dass die Schlüssel nicht symmetrisch waren ... das heißt, mit einem öffentlichen Schlüssel verschlüsselte Objekte können mit dem privaten Schlüssel entschlüsselt werden, aber dass diese Beziehung nicht umgekehrt funktionierte ... genauer gesagt, ich dachte nicht an Objekte Mit dem privaten Schlüssel verschlüsselt kann mit dem öffentlichen Schlüssel entschlüsselt werden. Wenn das tatsächlich der Fall ist, dann beantwortet dies definitiv meine Frage.
jcampos8782
63
Die Tasten arbeiten umgekehrt zueinander. Etwas mit Ihrem öffentlichen Schlüssel verschlüsselt? Entschlüsseln Sie es mit Ihrem privaten Schlüssel. Wenn Sie dagegen etwas mit Ihrem privaten Schlüssel verschlüsselt haben, entschlüsseln Sie es mit Ihrem öffentlichen. Dies ist die Natur der asymmetrischen Kryptographie.
Shadowman
20
Symmetrisch bedeutet nur, dass derselbe Schlüssel zum Ver- / Entschlüsseln verwendet wird. Assymetrisch bedeutet, dass ein Schlüssel verschlüsselt und ein anderer Schlüssel entschlüsselt (und dass auch das Gegenteil der Fall ist).
Gtrig
8
@ Jodimoro, Technisch gesehen ist eine Nachricht NICHT "geheim", wenn sie mit einem privaten Schlüssel verschlüsselt ist. Wenn es mit einem privaten Schlüssel verschlüsselt ist, kann jeder mit dem öffentlich verfügbaren "öffentlichen" Schlüssel die Nachricht entschlüsseln.
RayLoveless
4
@Jodimoro Der einzige Grund, warum der Hash mit einem privaten Schlüssel in eine Signatur verschlüsselt wird, besteht darin, sicherzustellen, dass der Hash nicht geändert wird ... und nicht, dass er "geheim" ist.
RayLoveless
70

Die Tasten arbeiten umgekehrt:

Verschlüsselung mit öffentlichem Schlüssel, Entschlüsselung mit privatem Schlüssel (Verschlüsselung):

openssl rsautl -encrypt -inkey public.pem -pubin -in message.txt -out message.ssl
openssl rsautl -decrypt -inkey private.pem       -in message.ssl -out message.txt

Private Schlüssel verschlüsselt, öffentlicher Schlüssel entschlüsselt (Signieren):

openssl rsautl -sign -inkey private.pem       -in message.txt -out message.ssl
openssl rsautl       -inkey public.pem -pubin -in message.ssl -out message.txt

Unten finden Sie ein Beispielskript, mit dem Sie diesen gesamten Ablauf testen können openssl.

#!/bin/sh
# Create message to be encrypted
echo "Creating message file"
echo "---------------------"
echo "My secret message" > message.txt
echo "done\n"

# Create asymmetric keypair
echo "Creating asymmetric key pair"
echo "----------------------------"
openssl genrsa -out private.pem 1024
openssl rsa -in private.pem -out public.pem -pubout
echo "done\n"

# Encrypt with public & decrypt with private
echo "Public key encrypts and private key decrypts"
echo "--------------------------------------------"
openssl rsautl -encrypt -inkey public.pem -pubin -in message.txt         -out message_enc_pub.ssl
openssl rsautl -decrypt -inkey private.pem       -in message_enc_pub.ssl -out message_pub.txt
xxd message_enc_pub.ssl # Print the binary contents of the encrypted message
cat message_pub.txt # Print the decrypted message
echo "done\n"

# Encrypt with private & decrypt with public
echo "Private key encrypts and public key decrypts"
echo "--------------------------------------------"
openssl rsautl -sign    -inkey private.pem -in message.txt          -out message_enc_priv.ssl
openssl rsautl -inkey public.pem -pubin    -in message_enc_priv.ssl -out message_priv.txt
xxd message_enc_priv.ssl
cat message_priv.txt
echo "done\n"

Dieses Skript gibt Folgendes aus:

Creating message file
---------------------
done

Creating asymmetric key pair
----------------------------
Generating RSA private key, 1024 bit long modulus
...........++++++
....++++++
e is 65537 (0x10001)
writing RSA key
done

Public key encrypts and private key decrypts
--------------------------------------------
00000000: 31c0 f70d 7ed2 088d 9675 801c fb9b 4f95  1...~....u....O.
00000010: c936 8cd0 0cc4 9159 33c4 9625 d752 5b77  .6.....Y3..%.R[w
00000020: 5bfc 988d 19fe d790 b633 191f 50cf 1bf7  [........3..P...
00000030: 34c0 7788 efa2 4967 848f 99e2 a442 91b9  4.w...Ig.....B..
00000040: 5fc7 6c79 40ea d0bc 6cd4 3c9a 488e 9913  [email protected].<.H...
00000050: 387f f7d6 b8e6 5eba 0771 371c c4f0 8c7f  8.....^..q7.....
00000060: 8c87 39a9 0c4c 22ab 13ed c117 c718 92e6  ..9..L".........
00000070: 3d5b 8534 7187 cc2d 2f94 0743 1fcb d890  =[.4q..-/..C....
My secret message
done

Private key encrypts and public key decrypts
--------------------------------------------
00000000: 6955 cdd0 66e4 3696 76e1 a328 ac67 4ca3  iU..f.6.v..(.gL.
00000010: d6bb 5896 b6fe 68f1 55f1 437a 831c fee9  ..X...h.U.Cz....
00000020: 133a a7e9 005b 3fc5 88f7 5210 cdbb 2cba  .:...[?...R...,.
00000030: 29f1 d52d 3131 a88b 78e5 333e 90cf 3531  )..-11..x.3>..51
00000040: 08c3 3df8 b76e 41f2 a84a c7fb 0c5b c3b2  ..=..nA..J...[..
00000050: 9d3b ed4a b6ad 89bc 9ebc 9154 da48 6f2d  .;.J.......T.Ho-
00000060: 5d8e b686 635f b6a4 8774 a621 5558 7172  ]...c_...t.!UXqr
00000070: fbd3 0c35 df0f 6a16 aa84 f5da 5d5e 5336  ...5..j.....]^S6
My secret message
done
Jaakko
quelle
2
Vielen Dank, dass Sie das Skript hinzugefügt haben - es hat definitiv geholfen, die Dinge zu klären.
Pat
Vielen Dank, es ist immer einfacher für mich, mit ecample zu verstehen
Simon
16

Der öffentliche Schlüssel verschlüsselt und nur der private Schlüssel kann ihn entschlüsseln, und das Gegenteil ist der Fall. Beide verschlüsseln mit unterschiedlichen Hashes, aber jeder Schlüssel kann die Verschlüsselung des anderen entschlüsseln.

Es gibt verschiedene Möglichkeiten, um zu überprüfen, ob eine Nachricht von einem erwarteten Absender stammt. Beispielsweise:

Der Absender sendet:

  1. Die Nachricht

  2. Der Hash der Nachricht, der mit ihrem privaten Schlüssel verschlüsselt ist

Der Empfänger:

  1. Entschlüsselt die Signatur (2) mit dem öffentlichen Schlüssel, um eine Nachricht zu erhalten, angeblich dieselbe Nachricht wie (1), aber wir wissen es noch nicht. Wir haben jetzt zwei Nachrichten, die wir überprüfen müssen, um identisch zu sein. Dazu verschlüsseln wir beide mit unserem öffentlichen Schlüssel und vergleichen die beiden Hashes. Wir werden ....
  2. Verschlüsseln Sie die ursprüngliche Nachricht (1) mit dem öffentlichen Schlüssel, um einen Hash zu erhalten
  3. Verschlüsseln Sie die entschlüsselte Nachricht (3), um einen zweiten Hash zu erhalten, und vergleichen Sie sie mit (4), um sicherzustellen, dass sie identisch sind.

Wenn sie nicht identisch sind, bedeutet dies, dass entweder die Nachricht manipuliert oder mit einem anderen Schlüssel signiert wurde und nicht mit dem, den wir dachten ...

Ein anderes Beispiel wäre, dass der Absender einen allgemeinen Hash verwendet, den der Empfänger möglicherweise ebenfalls verwendet. Beispielsweise:

Der Absender sendet:

  1. Eine Nachricht
  2. Nimmt einen bekannten Hash der Nachricht und verschlüsselt den Hash mit dem privaten Schlüssel

Der Empfänger:

  1. Entschlüsselt (2) und erhält einen Hashwert
  2. Hashes die Nachricht (1) mit dem gleichen Hash, der vom Absender verwendet wird
  3. Vergleicht die beiden Hashes, um sicherzustellen, dass sie übereinstimmen

Dadurch wird erneut sichergestellt, dass die Nachricht nicht manipuliert wurde und vom erwarteten Absender stammt.

wueb
quelle
6

Wenn ich Ihre Frage so umformulieren musste, wie ich sie verstehe, stellen Sie Folgendes:

Wenn Public Key - Kryptographie stellt sicher , dass ein öffentlicher Schlüssel kann von einem privaten Schlüssel abgeleitet wird, sondern ein privater Schlüssel kann nicht aus einem öffentlichen Schlüssel abgeleitet wird, dann könnte man sich fragen, wie kann ein öffentlicher Schlüssel entschlüsselt eine Nachricht mit einem privaten Schlüssel , ohne den Absender signiert den privaten Schlüssel in der signierten Nachricht dem Empfänger zugänglich machen? (Lesen Sie das einige Male durch, bis es Sinn macht)

Andere Antworten haben bereits erklärt, wie asymmetrische Kryptographie bedeutet, dass Sie entweder :

  1. Mit öffentlichem Schlüssel verschlüsseln, mit passendem privaten Schlüssel entschlüsseln (Pseudocode unten)
var msg = 'secret message';

var encryptedMessage = encrypt(pub_key, msg);

var decryptedMessage = decrypt(priv_key, encryptedMessage);

print(msg == decryptedMessage == 'secret message'); // True
  1. Mit privatem Schlüssel verschlüsseln, mit passendem öffentlichen Schlüssel entschlüsseln (Pseudocode unten)
var msg = 'secret message';

var encryptedMessage = encrypt(priv_key, msg);

var decryptedMessage = decrypt(pub_key, encryptedMessage); // HOW DOES THIS WORK???

print(msg == decryptedMessage == 'secret message'); // True

Wir wissen, dass sowohl Beispiel 1 als auch Beispiel 2 funktionieren. Beispiel 1 ist intuitiv sinnvoll, während Beispiel 2 die ursprüngliche Frage aufwirft .

Es stellt sich heraus, dass die Kryptographie mit elliptischen Kurven (auch als "Multiplikation mit elliptischen Kurven" bezeichnet) die Antwort auf die ursprüngliche Frage ist. Die Kryptographie mit elliptischen Kurven ist die mathematische Beziehung, die die folgenden Bedingungen ermöglicht:

  1. Ein öffentlicher Schlüssel kann mathematisch aus einem privaten Schlüssel generiert werden
  2. Ein privater Schlüssel kann nicht mathematisch aus einem öffentlichen Schlüssel generiert werden (dh "Trapdoor-Funktion").
  3. Ein privater Schlüssel kann werden überprüft durch einen öffentlichen Schlüssel

Für die meisten sind die Bedingungen 1 und 2 sinnvoll, aber was ist mit 3?

Sie haben hier zwei Möglichkeiten:

  1. Sie können ein Kaninchenloch hinuntergehen und stundenlang lernen, wie die Kryptographie mit elliptischen Kurven funktioniert ( hier ist ein guter Ausgangspunkt ) ... ODER ...
  2. Sie können die oben genannten Eigenschaften akzeptieren - genau wie Sie Newtons 3 Bewegungsgesetze akzeptieren, ohne sie selbst ableiten zu müssen.

Zusammenfassend wird ein öffentliches / privates Schlüsselpaar unter Verwendung der Kryptographie mit elliptischen Kurven erstellt, die von Natur aus einen öffentlichen und einen privaten Schlüssel erstellt, die mathematisch in beide Richtungen verknüpft , aber nicht in beide Richtungen mathematisch abgeleitet sind . Auf diese Weise können Sie den öffentlichen Schlüssel einer Person verwenden, um zu überprüfen, ob diese eine bestimmte Nachricht signiert hat, ohne dass sie Ihnen ihren privaten Schlüssel zur Verfügung stellt.

Zach Gollwitzer
quelle
Ihre 3 Bedingungen erklären alles. Ich habe gerade diese Terme 'elliptische Kurve' gelesen und war wie wtf
Simon
5

Ich dachte, ich würde eine ergänzende Erklärung für jeden liefern, der etwas Intuitiveres sucht.

Ein großer Teil dieser Verwirrung ergibt sich aus der Benennung von "öffentlichen Schlüsseln" und "privaten Schlüsseln" als solchen, da die tatsächliche Funktionsweise dieser Dinge direkt im Widerspruch dazu steht, wie ein "Schlüssel" verstanden wird.

Nehmen wir zum Beispiel die Verschlüsselung. Man könnte sich vorstellen, dass es so funktioniert:

  • Die Parteien, die die geheimen Nachrichten lesen möchten, halten jeweils einen Schlüssel versteckt (dh einen privaten Schlüssel).
  • Die Parteien, die geheime Nachrichten senden möchten, haben alle die Möglichkeit, eine entsperrte Sperre (dh eine öffentliche Sperre) zu erhalten.
  • Das Senden einer geheimen Nachricht ist dann so einfach wie das Sperren mit einem entsperrten Schloss. Das anschließende Entsperren kann jedoch nur mit einem der versteckten Schlüssel erfolgen.

Dies ermöglicht das Senden geheimer Nachrichten zwischen Parteien, aber von einem intuitiven Standpunkt aus gesehen ist "öffentliche Sperre" ein geeigneterer Name als "öffentlicher Schlüssel".

Beim Senden digitaler Signaturen sind die Rollen jedoch etwas vertauscht:

  • Die Partei, die Nachrichten signieren möchte, ist die einzige, die Zugriff auf die entsperrten Sperren hat (dh eine private Sperre).
  • Die Parteien, die die Signatur überprüfen möchten, haben alle die Möglichkeit, einen Schlüssel (dh einen öffentlichen Schlüssel) zu erhalten.
  • Anschließend erstellt der Unterzeichner zwei identische Nachrichten: die eine, die jeder lesen kann, und eine, die dazu gehört, die er jedoch mit einer seiner privaten Sperren sperrt.
  • Wenn der Empfänger die Nachricht erhält, kann er sie lesen und dann mit dem öffentlichen Schlüssel die gesperrte Nachricht entsperren und die beiden Nachrichten vergleichen. Wenn die Nachrichten gleich sind, wissen sie Folgendes:

    1. Die entsperrte Nachricht wurde während der Reise nicht manipuliert und,

    2. Die Nachricht muss von der Person stammen, die das passende Schloss für ihren öffentlichen Schlüssel hat.

  • Und schließlich funktioniert dieses gesamte System nur, wenn jeder, der die Signatur eines Unterzeichners validieren möchte, einen maßgeblichen Ort hat, an den er gehen kann, um den passenden Schlüssel für die Schlösser des Unterzeichners zu erhalten. Andernfalls kann jeder sagen "Hey, hier ist der Schlüssel zum privaten Schloss von so und so", Ihnen eine Nachricht senden, die vorgibt, sie zu sein, aber sie mit ihrem privaten Schloss sperren. Sie führen alle oben genannten Schritte aus und glauben, dass die Nachricht tatsächlich sein muss von der Person, die Sie gedacht haben, aber Sie werden getäuscht, weil Sie in Bezug auf den wahren Besitzer eines öffentlichen Schlüssels irregeführt wurden.

Solange es eine vertrauenswürdige Quelle zum Abrufen des öffentlichen Schlüssels eines Unterzeichners gibt, wissen Sie, wer der rechtmäßige Eigentümer eines öffentlichen Schlüssels ist, und können dessen Signatur validieren.

Schuh
quelle
4
Das Ändern von "Schlüssel" in "entsperrtes Schloss" trägt nur zur Verwirrung bei.
Marquis von Lorne
@EJP Ich ändere den Schlüssel nicht in "entsperrtes Schloss". Es wurde in "Sperren" geändert. 'Unlocked Locked' wird nur verwendet, um die Verwendung des Elements auszudrücken. Dies ist Ihre Meinung, und wenn Sie über langjährige Erfahrung in der Krypto-Community verfügen, ist diese wahrscheinlich äußerst voreingenommen, da Sie mit den vorhandenen Begriffen die Technologie besser verstehen. Warum lassen Sie nicht Leute, die gerade erst anfangen, bestimmen, ob die Analogie nützlich ist oder nicht?
Schuh
1
Ich denke, die Analogie mit Schlössern und Schlüsseln ist ziemlich gut, um ein erstes Verständnis dieser Angelegenheit zu vermitteln. Sobald Sie die Schlösser und Schlüssel visualisiert haben, können sie verschiedene Ganzzahlen austauschen, die zu rsa-Schlüsseln (oder anderen Schlüsseltypen) zusammengesetzt sind.
Andreas Lundgren
Ich persönlich denke, diese Einsicht ist die beste, die ich bisher gelesen habe. Und sehen Sie auf jeden Fall, wie das Hinzufügen eines Schlosses anstelle eines Schlüssels zu privat / öffentlich das gesamte System für normale Neuankömmlinge intuitiv selbsterklärend macht. Während im Moment ist es überhaupt nicht. Wir sind erfahrene Entwickler (bis jetzt nur ohne direkten Kontakt zu Krypto) und haben uns einige Zeit über den Zweck von öffentlich / privat gestritten. Ich sagte, dass privat zum Verschlüsseln verwendet wird, während er sagte, dass öffentliches zum Verschlüsseln verwendet wird: D
jayarjo
0

Auf Ihre Frage - ich habe mir die RSA-Implementierung angesehen. Und Sie erhalten mehr Klarheit darüber, wie ein öffentlicher Schlüssel zum Überprüfen der Signatur mithilfe eines privaten Schlüssels verwendet wird. Zweifellos ist der private Schlüssel nicht verfügbar. Hier ist, wie...

Trick hier ist, den privaten Schlüssel innerhalb einer Funktion zu verstecken. In diesem Fall,(p-1)*(q-1).

Betrachten Sie p als privaten Schlüssel und e als öffentlichen Schlüssel. 'p' ist in einer anderen Funktion gekapselt, um es auszublenden.

E.g., `d = (p-1)(q-1); d * e = 1` (d is the inverse of e - public key)

Gesendete Daten = [verschlüsselt (Hash), Nachricht] = [m ^ d, Nachricht]; Dabei ist m die Nachricht. Angenommen, 'Daten gesendet' = y Um die Integrität zu überprüfen, finden wir y ^ e, um m zu erhalten. Schon seitm ^(d*e) = m ^1 = m .

Hoffe das hilft! :) :)

George John
quelle