Frage Wie verifiziert ein öffentlicher Schlüssel eine Signatur?


Versuchen, einen besseren Überblick darüber zu bekommen, 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, aber was ich nicht verstehe, ist, wie der öffentliche Schlüssel verwendet werden kann, um diese Signatur zu überprüfen. Mein Verständnis war, dass öffentliche Schlüssel verschlüsseln, private Schlüssel entschlüsseln ... kann mir jemand helfen zu verstehen?


76
2017-08-15 16:29


Ursprung


Antworten:


Ihr Verständnis von "öffentliche Schlüssel verschlüsseln, private Schlüssel entschlüsseln" ist korrekt ... für Daten / Nachricht ENCRYPTION. Bei digitalen Signaturen ist es umgekehrt. Mit einer digitalen Signatur versuchen Sie zu beweisen, dass das von Ihnen unterzeichnete Dokument von Ihnen stammt. Um das zu tun, 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 das nur der Unterzeichner hat (oder haben sollte), kommt hier das Vertrauen her. JEDER hat (oder sollte) Zugang zum öffentlichen Schlüssel des Unterzeichners.

Also, um eine digitale Signatur zu validieren, der Empfänger

  1. Berechnet einen Hash der gleichen 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, wird die Signatur als gültig angesehen. Wenn sie nicht übereinstimmen, bedeutet dies entweder, dass ein anderer Schlüssel verwendet wurde, um sie zu signieren, oder dass die Daten geändert wurden (entweder absichtlich oder unabsichtlich).

Ich hoffe, das hilft!


120
2017-08-15 18:38



Wie in atns Antwortfunktionieren die Tasten umgekehrt.

Öffentlicher Schlüssel verschlüsselt, privater Schlüssel entschlüsselt (verschlüsselt):

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

Privater Schlüssel verschlüsselt, öffentlicher Schlüssel entschlüsselt (signiert):

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

Im Folgenden finden Sie ein Beispielskript, mit dem Sie den gesamten Fluss 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  _.ly@...l.<.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

34
2017-11-01 15:17



Dachte, ich würde eine ergänzende Erklärung für jeden liefern, der nach etwas sucht, das intuitiver enthüllt.

Ein großer Teil dieser Verwirrung ergibt sich aus der Benennung von "öffentlichen Schlüsseln" und "privaten Schlüsseln" als solche, weil die Art und Weise, wie diese Dinge tatsächlich funktionieren, direkt im Widerspruch zu der Auffassung steht, wie ein "Schlüssel" verstanden wird.

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

  • Die Parteien, die die geheimen Nachrichten lesen möchten, behalten jeweils einen Schlüssel versteckt (d. h. ein privater Schlüssel)
  • Die Parteien, die in der Lage sein möchten, geheime Nachrichten zu senden, haben alle die Möglichkeit, eine unverriegelte Sperre (d. H. Eine öffentliche Sperre) zu erhalten.
  • Dann ist das Senden einer geheimen Nachricht so einfach wie das Sperren mit einem entsperrten Schloss, aber das anschließende Entsperren kann nur mit einem der versteckten Schlüssel erfolgen.

Dies ermöglicht es, geheime Nachrichten zwischen Parteien zu senden, aber von einem intuitiven Standpunkt aus ist "öffentlicher Verschluss" ein geeigneterer Name als "öffentlicher Schlüssel".

Beim Senden digitaler Signaturen sind die Rollen jedoch etwas umgekehrt:

  • Die Partei, die Nachrichten signieren möchte, ist die einzige mit Zugriff auf die entsperrten Sperren (d. H. Eine private Sperre).
  • Die Parteien, die die Signatur verifizieren möchten, haben alle die Möglichkeit, einen Schlüssel (d. H. Einen öffentlichen Schlüssel) zu erhalten.
  • Dann erstellt der Unterzeichner zwei identische Nachrichten: die eine, die jeder lesen kann, und eine, die sie begleitet, die sie aber mit einer ihrer privaten Sperren abschließen.
  • Wenn der Empfänger dann 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, dann wissen sie:

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

    2. Die Nachricht muss von der Person stammen, die das übereinstimmende Schloss zu ihrem öffentlichen Schlüssel hat.

  • Und schließlich funktioniert dieses ganze System nur, wenn jemand, der die Signatur eines Unterzeichners validieren möchte, einen autoritativen Ort hat, an den er gehen kann, um den passenden Schlüssel zu den Sperren des Unterzeichners zu bekommen. Ansonsten kann jeder sagen: "Hey, hier ist der Schlüssel zu der privaten Sperre von so-und-so", sende dir eine Nachricht, die vorgibt, sie zu sein, aber sperre sie mit ihrer privaten Sperre, führe alle obigen Schritte aus und glaube, dass die Nachricht tatsächlich sein muss von der Person, die Sie dachten, aber Sie werden getäuscht, weil Sie bezüglich des wahren Eigentümers eines öffentlichen Schlüssels irregeführt wurden.

Solange es eine vertrauenswürdige Quelle für das Abrufen des öffentlichen Schlüssels eines Unterzeichners gibt, wissen Sie, wer der rechtmäßige Besitzer eines öffentlichen Schlüssels ist, und können ihre Signatur überprüfen.


0
2018-03-02 21:37