Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Signieren von Nachrichten im RSA-Programm (https://www.delphipraxis.net/204194-signieren-von-nachrichten-im-rsa-programm.html)

EdAdvokat 5. Mai 2020 12:10

Signieren von Nachrichten im RSA-Programm
 
Hallo liebe Delphifreunde,
nachdem ich einen Editor mit AES-Funktion erstellt habe, tauchte das Problem des Schlüsselaustausches auf und so kam ich auf die Idee,
dazu ein weiteres Projekt "RSA-Programm" in Angriff zu nehmen.
All diese "Projekte" sind nur für mich ohne tiefen Sinn. Ich wollte lediglich die Funktionalität, die Möglichkeiten und ggf. auch deren Grenzen erfahren.
Nun ist auch das RSA-Programm fertig und funktioniert wie gewollt. Zurückliegend habe ich frühe Entwicklungsschritte beider hier im Formum ausschnittsweise vorgestellt.
Nun habe ich gelesen und sehe das auch als wirkliches Erfordernis an, dass der Klartext des Absenders auch signiert werden sollte, um die Autentität des verfassten
Textes tatsächlich auch nachweisen zu können(den Text dem Absender tatsächlich sicher zuzuordnen).

Ich möchte nur kurz die Grundformeln des RSA-Algorithmus aufführen, ohne auf math. Grundlagen einzugehen:

KT - Klartext
GT - Geheimtext
e - öffentlicher Key (Exponent)
n - öffentlicher Key (Modulus)
d - privater Key (Exponent)
C - signierter GT
K - verifizierter KT

mit RSA Verschlüsseln GT = KT^e mod n
mit RSA entschlüsseln KT = GT^d mod n

Signieren mit RSA C = KT^d mod n
Verifizieren mit RSA K = C^e mod n

Soweit die Theorie.
Meine Fragen:

1. Wird beim Signieren tatsächlich der Klartext nach der obigen Formel nochmals "signiert-verschlüsselt"? Oder verwendet man dazu besser
einen gängigen Hash-Algorithmus, wie SHA-2 oder MD-5 für den Klartext und signiert diesen dann mit obiger Formel?

2. Werden also bei einer Signierung zwei Geheimtexte an den Empfänger übermittelt, der dann nach obiger Formel beide entschlüsselt und dann
den Klartext mit dem verifizierten Klartext vergleicht und nach Feststellung der Identität glücklich lächelt?

3. Wie wird das praktisch umgesetzt? Der Empfänger erhält also 2 verschlüsselte Texte und wie erkennt er welcher der signierte Text ist?
Gibt es möglicherweise andere Möglichkeiten, um die Autentität der Nachricht, also die Zuordnung dieser zum Autor festzustellen?

Liege ich überhaupt grundsätzlich richtig mit meinen Überlegungen?

himitsu 5. Mai 2020 13:36

AW: Signieren von Nachrichten im RSA-Programm
 
Im Endefekt hast sogar 3 Varianten beim Signieren.
* nach dem Klartext hast noch die Signatur
* Signatur direkt aus Klartext generiert, dann ist der genau so lang, wie der Klartext (länger, da man sie noch Codieren müsste, Base64 oder so, um sie als Text anzuhängen)
* Signatur aus dem Hash des Klartextes
* Signatur aus dem Klartext und dann der Hash drüber (bei Beidem ist die Signatur nur noch so lang wie der Hash)

Ich würde dann aber eher Letzeres nehmen, denn hat mein keinen direkten Zusammenhang zwischen Signaturschlüssel und dem Klartext,
denn das andere erleichtert das entschlüsseln, denn da kann man bereits schon beim ersten Byte anfangen das knacken zu wollen und kann nicht erst ganz am Ende gegenprüfen.

[Achtung] bin nicht so der Experte und das ist mehr so nach meinem Gefühl (persönlichem Verständis der Matherie)

Wie schon beim Hashen kann es nicht schaden hier auch noch bissl Salz in die Wunde zu streuen. (Hash with Salt/InitVector)



Nja, wenn du verschlüsselst, dann ist der verschlüsselte Text seine eigene Signatur.
Signieren brauchst nur, wenn was als Klartext weg geht, aber man prüfen können möchte, ob das unverändert von einem bestimmten Absender stammt.
Also nur das Verschlüsselte oder Klartext+Signatur.

Verschlüsseltes mit zusätzlicher Signatur, auch noch mit dem selben Schlüssel berechnet, dann lieferst du dem Angreifer auch gleich das Werkzeug mit, um deine Verschlüsselung "leichter" knacken zu können, da er die Signatur benutzen kann, um das Entschlüsselte zu verifizieren.


Zitat:

wie erkennt er welcher der signierte Text ist?
Der, den er nicht lesen kann? :stupid:
Für Unwissende kannst die Signatur auch Signatur nennen, bzw. es davor schreiben.

Ghostwalker 5. Mai 2020 16:25

AW: Signieren von Nachrichten im RSA-Programm
 
Zitat:

Zitat von himitsu (Beitrag 1463713)
Nja, wenn du verschlüsselst, dann ist der verschlüsselte Text seine eigene Signatur.
Signieren brauchst nur, wenn was als Klartext weg geht, aber man prüfen können möchte, ob das unverändert von einem bestimmten Absender stammt.
Also nur das Verschlüsselte oder Klartext+Signatur.

Einspruch euer Eheren :warn:

Der Verschlüsselte Text ist der verschlüsselte Text, keine Signatur. Die Signatur kann immer eingesetzt werden, denn damit kann man die Quelle der Nachricht verifizieren.
Hagen hat mir vor Urzeiten das ganze mal erklärt. Normalerweise läuft das, wenns wirklich sicher sein soll, wie folgt ab:


Wir haben zwei Stellen, die Nachrichten sicher austauschen wollen. Nennen wir sie Adam und Bertram (A und B klingt so abgedroschen).

Adam generiert sich nun ein Schlüsselpaar und gibt den öffentlichen Schlüssel an Bertram weiter.
Bertram macht das gleiche.


Adam möchte jetzt eine Nachricht schicken. Also erstellt er den Nachrichtentext und verschlüsselt ihn mit dem öffentlichen Schlüssel von Bertram. Zusätzlich erzeugt er noch eine Signatur. Diese verschlüsselt er mit seinem privaten Schlüssel. Beide Teile schickt er nun an Betram.

Dieser nimmt nun den öffentlichen Schlüssel von Adam und überprüft die Signatur. Dann nimmt er seinen privaten Schlüssel und entschlüsselt die Nachricht.

So hab ich das zumindest im Sinn. :)

EdAdvokat 5. Mai 2020 19:45

AW: Signieren von Nachrichten im RSA-Programm
 
Zitat:

Adam möchte jetzt eine Nachricht schicken. Also erstellt er den Nachrichtentext und verschlüsselt ihn mit dem öffentlichen Schlüssel von Bertram. Zusätzlich erzeugt er noch eine Signatur. Diese verschlüsselt er mit seinem privaten Schlüssel. Beide Teile schickt er nun an Betram.

Dieser nimmt nun den öffentlichen Schlüssel von Adam und überprüft die Signatur. Dann nimmt er seinen privaten Schlüssel und entschlüsselt die Nachricht.
So habe ich das auch verstanden. Ich gehe doch richtig in der Annahme, dass das Erzeugen einer Signatur durch Anwendung von bsp. MD-5 auf den Klartext/die Klartextdatei geschieht, damit die Signatur nicht so groß wird wie der Klartext selbst, oder?
Allein die Tatsache, dass nun Bertram die Signatur entschlüsseln kann, spricht klar dafür dass die Nachricht wirklich von Adam kam.

Aktuell bin ich auf der Suche nach einem Codebeispiel Hash-Funktion für FMX. Ich möchte da nicht zu viele zur Auswahl stellen.
Was wird da aktuell als sicherer Hash-Code empfohlen und wer kennt da Quellen?
Habe soeben in DEC 6 Demos was gefunden. Werde mal schauen, ob das geht.

himitsu 5. Mai 2020 21:27

AW: Signieren von Nachrichten im RSA-Programm
 
Delphi-Referenz durchsuchenSystem.Hash

Ansonsten versteckt sich auch noch bissl was im Indy, welches ja auch bei liegt.

EdAdvokat 6. Mai 2020 15:05

AW: Signieren von Nachrichten im RSA-Programm
 
Hallo zusammen,
ich kann berichten, dass die zusätzliche Signierung/Verifizierung ausgezeichnet funktioniert und dass ebenso das Hash-Tool aus dem DEC 6 Ensemble
eine hilfreiche Bereicherung darstellt, denn die Signierung des Hash vom Klartext erscheint mir der gängigere Weg zu sein, als den gesamten Klartext
zu signieren. Wie es nun jeder handhaben will ist sicher seine Sache.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz