RSA Public Key reproduzieren möglich?

  • C#

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Andy.

    RSA Public Key reproduzieren möglich?

    Hallo, ich wurde auf der Arbeit damit beauftragt, dass diverse daten die wir an unsere Kunden liefern mittels RSA signiert werden. Der Kunde hat anschließend die Möglichkeit diese daten zu verifizieren, da er sowohl den Public Key als auch die Signatur hat. Nun stellt sich mir die frage bezüglich der Sicherheit, ob es möglich ist, den Public Key anhand der Signatur zu reproduzieren?

    beste grüße Andy
    @Andy Nein.
    Wer den Public Key hat, kann Daten verschlüsseln.
    Wer den Private Key hat, kann sie lesen.
    Wenn ich Daten haben will, übermittle ich dem Sender den Public Key, mit dem er sie verschlüsseln und an mich sendet.
    Nur ich kann sie dann lesen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ok, beim Signieren ist es so, dass der Public key die daten verifiziert und der private key sie signiert. Mit stellte sich einfach nur die frage ob die Schlüssel aus Kombination von Signatur und public key reproduziert werden können.


    @DTF es wäre sicher kein Weltzusammenbruch aber natürlich nicht optimal

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Andy“ ()

    @Andy wenn das so ist wie Du beschreibst, sind Deine Begriffe von den Keys anders belegt als bei einer "üblichen" asymmetrischen Verschlüsselung.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Wer den Public Key hat, kann Daten verschlüsseln.
    Wer den Private Key hat, kann sie lesen.


    Nicht ganz richtig.

    Der private Key (Server) kann Daten so verschlüsseln, dass sie nur durch den public Key entschlüsselt werden kann.
    Wiederum kann der public Key (client) Daten so verschlüsseln, dass sie nur durch den private Key entschlüsselt werden können.

    Andy schrieb:

    Ok, beim Signieren ist es so, dass der Public key die daten verifiziert und der private key sie signiert.

    Das ist goldrichtig. Der private Key ist privat für euch. Gebt niemals den private Key raus!

    Den private Key nimmst du, um deine Daten mit einer gültigen Signatur zu versehen. Die Signatur kann mit dem public Key verifiziert werden.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    Da bei der Signierung vorab die Originaldaten mit z.B. SHA256 oder SHA512 gehast sind, ist eine RSA-Signierung (quasi) bedenkenlos. Ich hoffe das machst du auch so. Ich geh da meistens über RSAPKCS1Signature(De)formatter

    Bei der Verifizierung werden die Originaldaten ja auch wieder mit einbezogen, und darum kann genau gleich vorgegangen werden, einfach mit dem PublicKey.

    Freundliche Grüsse

    exc-jdbi
    Kurz einmal zum Verständnis eine kleine Ausführung zum Signieren von Dokumenten und Schlüsseln.

    Zuerst die Schlüssel.
    Es gilt:
    • Was mit dem Private Key verschlüsselt wurde kann mit dem Public Key entschlüsselt werden.
    • Was mit dem Public Key verschlüsselt wurde kann mit dem Private Key entschlüsselt werden.

    Zum Signieren von Dokumenten:
    1. Es wird ein Hash-Wert von dem Dokument erstellt.
    2. Dieser Hash wird mit dem Private Key verschlüsselt. Das Resultat ist dann die Digitale Signatur zum Dokument. Diese kann an die Datei angehängt oder separate gehalten werden.
    3. Dem Empfänger des Dokumentes müssen zum Schluss diese Dateien einzeln oder kombiniert zur Verfügung gestellt werden:
      • Das Original-Dokument
      • Die Digitale Signatur
      • Der Public Key

    Das Verifizieren der Digitalen Signatur besteht aus 2 Schritten. Dem Feststellen des unveränderten Originals (Integrity) und dem Vertrauen in den Eigentümer des Zertifikats.
    Die Integrity wird so geprüft:
    1. Vom Originaldokument wird erneut ein Hash-Wert erzeugt.
    2. Die angehängte Signatur wird mit dem Public Key entschlüsselt.
    3. Die beiden Dateien Hashs werden verglichen. Sind sie identisch liegt das Dokument unverändert vor und die Integrity besteht.
    Das Vertrauen wird so geprüft.
    • Der Public Key enthält ein Zertifikat, das von einem Zertifizierungsstelle (Certificate Authority) ausgestellt wird.
    • Certificate Authority muss gewährleisten, dass sie den Besitzer des Zertifikats kennt und seine Identität geprüft und verifiziert hat.
    • Der Zertifikat muss mindestens über eine dreistufige Kette ausgestellt sein. Dh. das Zertifikat wird von einer Zwischenzertifikat signiert. Das Zwischenzertifikat wird von dem Stammzertifikat (Root Certificate) signiert sein.
    • Wenn nun die Kette geprüft und ungebrochen ist und der Certificate Authority vertraut wird, kann die Signatur als belastbar anerkannt werden.

    Ich habe bewusst die Englischen Begriffe mit verwendet.
    Wer einmal sich eingen Zertifikate ausstellen möchte kann dies relativ einfach mit dem Programm XCA hohnstaedt.de/xca/index.php/download ausprobieren.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Es gibt von einigen Braunschweigern „IKEA-Bauanleitungen“ für Algorithmen. Unter anderem ist da auch eine schematische Übersicht über Public-Key-Kryptographie vertreten. Vielleicht hilft diese Darstellung beim Verständnis.
    Bilder
    • public-key.png

      425,82 kB, 2.000×1.414, 47 mal angesehen
    Mit freundlichen Grüßen,
    Thunderbolt