![]() |
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? |
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:
Für Unwissende kannst die Signatur auch Signatur nennen, bzw. es davor schreiben. |
AW: Signieren von Nachrichten im RSA-Programm
Zitat:
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. :) |
AW: Signieren von Nachrichten im RSA-Programm
Zitat:
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. |
AW: Signieren von Nachrichten im RSA-Programm
|
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 11:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz