Lukas: Problem mit RSA

Hi zusammen!

Ich bin grade dabei einen Verschlüsselungsprogramm mit RSA zu schreiben. Die Programmiersprache tut IMHO nichts dazu.

Bei RSA spielen folgende Faktoren eine Rolle (näheres siehe Wikipedia):
  *) Public-Key
  *) Private-Key
  *) DP
  *) DQ
  *) Exponent
  *) InverseQ
  *) P
  *) Q

Das Ziel ist natürlich, dass man den Public-Key weitergibt und der andere die verschlüsselten Daten entschlüsseln kann.

Solange alle Faktoren (s.o.) exakt die gleichen Werte haben läuft das ganze rund und er verschlüsselt munter. Sobald sich aber alles andere außer den Private- und Public-Keys ändert, funktioniert nichts mehr.

Nun meine Frage: Es kann doch nicht sein, dass dem Entschlüsselnden alle Faktoren bekannt sein müssen, oder? Der Sinn von einem asymmetrischen Verschlüsselungsalgorithmus ist doch, dass nur der Public-Key bekannt sein muss.

Kann mir da jemand weiterhelfen?

Viele Grüße,
Lukas

  1. Tach,

    Bei RSA spielen folgende Faktoren eine Rolle (näheres siehe Wikipedia):
      *) Public-Key
      *) Private-Key
      *) DP
      *) DQ
      *) Exponent
      *) InverseQ
      *) P
      *) Q

    Solange alle Faktoren (s.o.) exakt die gleichen Werte haben läuft das ganze rund und er verschlüsselt munter. Sobald sich aber alles andere außer den Private- und Public-Keys ändert, funktioniert nichts mehr.

    Die Faktoren, die du nennst sind nicht alle unabhängig voneinander, das Produkt aus P und Q ist Teil von beiden Schlüsseln, wenn du diese Änderst und die Schlüssel sich nicht geändert haben, darf nichts mehr funktionieren.

    mfg
    Woodfighter

    1. Hi!

      Danke für die Antwort!

      Die Faktoren, die du nennst sind nicht alle unabhängig voneinander, das Produkt aus P und Q ist Teil von beiden Schlüsseln, wenn du diese Änderst und die Schlüssel sich nicht geändert haben, darf nichts mehr funktionieren.

      Das ist mir eigentlich auch klar. Allerdings verstehe ich nicht, wie dann das Ganze ab laufen soll/kann. Schließlich möchte ich doch nur den Public-Key weitergeben müssen. Und nicht P, Q oder sonstigendwas.

      Auf diese Frage habe ich bis jetzt keine Antwort gefunden.

      Viele Grüße,
      Lukas

      1. Tach,

        Das ist mir eigentlich auch klar. Allerdings verstehe ich nicht, wie dann das Ganze ab laufen soll/kann. Schließlich möchte ich doch nur den Public-Key weitergeben müssen. Und nicht P, Q oder sonstigendwas.

        dir ist klar, dass sowohl Private als auch Public Key jeweils aus _zwei_ Zahlen bestehen? Zur Ver-/Entschlüsselung nötig sind nur drei Zahlen (mit den Bezeichnungen der Wikipedia):

        1. der Modulus N (also das Produkt aus p und q)
        2. das größtenteils zufällig gewählte e
        3. die aus e, p und q berechnete Zahl d

        p und q werden nach der Schlüsselerzeugung entsorgt, der Private Key besteht dann aus d und N, der Public Key aus e und N.

        Die Verschlüsselung funktioniert nun, da man aus e und N nicht einfach berechnen kann wie d aussieht, da man aus N nicht auf p und q schließen kann (nicht in genügend kleiner Zeit).

        In der Praxis speichert man im Private Key noch weitere Informationen ab um beim Entschlüsseln einen schnelleren Algorithmus verwenden zu können, das ist allerdings prinzipiell nicht nötig.

        mfg
        Woodfighter

        1. Hi!

          Danke für deine Antwort =)

          dir ist klar, dass sowohl Private als auch Public Key jeweils aus _zwei_ Zahlen bestehen? Zur Ver-/Entschlüsselung nötig sind nur drei Zahlen (mit den Bezeichnungen der Wikipedia):

          Ja, das ist mir klar. Allerdings hätte ich gedacht, dass es dann auch reicht, wenn ich den Public-Key weitergebe. Das tut es ja aber scheinbar nicht.

          1. der Modulus N (also das Produkt aus p und q)
          2. das größtenteils zufällig gewählte e
          3. die aus e, p und q berechnete Zahl d

          p und q werden nach der Schlüsselerzeugung entsorgt, der Private Key besteht dann aus d und N, der Public Key aus e und N.

          Meine zentrale Frage ist: Ist es möglich, dass ich den Public-Key weitergebe, ohne dass ich die drei anderen Zahlen (s.o.) weitergeben muss? Ich möchte jemand anderem nur den Public-Key geben müssen, damit dieser mir Daten verschlüsseln kann. So ist das ja auch die gängige Vorgangsweise, oder?

          Oder werden bei anderen Verschlüsselungsprogrammen die Zahlen p, q, und N weitergegeben?

          In der Praxis speichert man im Private Key noch weitere Informationen ab um beim Entschlüsseln einen schnelleren Algorithmus verwenden zu können, das ist allerdings prinzipiell nicht nötig.

          Wie speichert man weitere Infos im Private Key? Allerdings brauche ich das nicht unbedingt. Mich interessiert viel mehr, ob und wie ich eine Verschlüsselung nur per Private und Public-Key erreiche.

          Vielen vielen Dank für deine Antwort!!
          Viele Grüße,
          Lukas

          1. Tach,

            1. der Modulus N (also das Produkt aus p und q)
            2. das größtenteils zufällig gewählte e
            3. die aus e, p und q berechnete Zahl d

            p und q werden nach der Schlüsselerzeugung entsorgt, der Private Key besteht dann aus d und N, der Public Key aus e und N.

            Meine zentrale Frage ist: Ist es möglich, dass ich den Public-Key weitergebe, ohne dass ich die drei anderen Zahlen (s.o.) weitergeben muss?

            ja natürlich, es muß nur der Public Key, also die Zahlen e und N weitergegeben werden.

            Oder werden bei anderen Verschlüsselungsprogrammen die Zahlen p, q, und N weitergegeben?

            p und q nicht, diese werden (eigentlich) vernichtet; N ist Teil des Public Key und _muß_ weitergegeben werden.

            In der Praxis speichert man im Private Key noch weitere Informationen ab um beim Entschlüsseln einen schnelleren Algorithmus verwenden zu können, das ist allerdings prinzipiell nicht nötig.

            Wie speichert man weitere Infos im Private Key? Allerdings brauche ich das nicht unbedingt.

            Man speichert einfach mehr als die zwei Zahlen N und d ab; wie die Daten genau im Keyfile abgelegt werden, habe ich jetzt nicht im Kopf.

            Mich interessiert viel mehr, ob und wie ich eine Verschlüsselung nur per Private und Public-Key erreiche.

            Am besten nachvollziehen, wie der Algorithmus funktioniert, und dann die eigene Implementierung wegwerfen; die meisten Fehler im Umgang mit Kryptographie entstehen beim Implementieren nicht bei den Algorithmen selber.

            mfg
            Woodfighter

            1. Hi!

              Sorry, falls ich etwas begriffsstutzig bin, aber ich gebe mir redlich Mühe =)

              ja natürlich, es muß nur der Public Key, also die Zahlen e und N weitergegeben werden.

              Für einen Wissenden sicher eine dumme Frage: für RSA sind e und N exakt dasselbe wie der Public Key? Also ich muss nicht die zwei einzelnen Zahlen e und N weitergeben sondern nur den Public-Key?

              Oder werden bei anderen Verschlüsselungsprogrammen die Zahlen p, q, und N weitergegeben?

              p und q nicht, diese werden (eigentlich) vernichtet; N ist Teil des Public Key und _muß_ weitergegeben werden.

              Eine ähnliche Frage wie oben: Reicht es wenn ich den Public Key weitergebe? Oder muss der Entschlüsselnde die Zahl N kennen?

              Angenommen du beantwortest die oberen Fragen mit "es reicht der Public Key", dann widersprichst du dir doch hier mit deiner Aussage aus deinem ersten Posting, oder?

              Die Faktoren, die du nennst sind nicht alle unabhängig voneinander, das Produkt aus P und Q ist Teil von beiden Schlüsseln, wenn du diese Änderst und die Schlüssel sich nicht geändert haben, darf nichts mehr funktionieren.

              Genau dies läuft aber bei mir ab. Also muss ich dem Entschlüsselnden die Zahlen P und Q mitteilen, wie auch den Public-Key, oder?

              Man speichert einfach mehr als die zwei Zahlen N und d ab; wie die Daten genau im Keyfile abgelegt werden, habe ich jetzt nicht im Kopf.

              Aah, okay. Ich könnte also eine Datei weitergeben, in der der Public-Key steht. Das ist ein Ansatz den ich weiter verfolgen kann.

              Am besten nachvollziehen, wie der Algorithmus funktioniert, und dann die eigene Implementierung wegwerfen; die meisten Fehler im Umgang mit Kryptographie entstehen beim Implementieren nicht bei den Algorithmen selber.

              Ich nutze eine Implementierung des .NET-Frameworks. MSDN ist was Cryptographie angeht leider sehr schweigsam. Auch habe ich sonst nirgends etwas gefunden, wie ich Schlüssel erfolgreich austauschen kann.

              ####################################################
              Hier nochmal ganz kompakt meine Frage: Welche Zahlen/Keys muss jemand kennen, der mit seinem Private-Key etwas entschlüsseln will, das ich mit seinem Public-Key verschlüsselt habe?
              ####################################################

              Nochmals entschuldigung wenn manche Fragen komisch rüberkommen, aber ich mach's nicht mit Absicht :-) Auf jeden Fall vielen Dank für deine Hilfe!!!
              Viele Grüße,
              Lukas

              1. Tach,

                Für einen Wissenden sicher eine dumme Frage: für RSA sind e und N exakt dasselbe wie der Public Key? Also ich muss nicht die zwei einzelnen Zahlen e und N weitergeben sondern nur den Public-Key?

                e und N zusammen sind der Public Key, beide Zahlen sind nötig; nur eine von beiden zu kennen ist unzureichend. Wie diese beiden Zahlen an den Empfänger übermittelt werden, ist vollkommen egal; ich weiß leider nicht, wie genau sich der String der in meinem id_rsa.pub-File steckt zusammensetzt aber GPG weiß offensichtlich welcher Teil N und welcher e ist.

                Eine ähnliche Frage wie oben: Reicht es wenn ich den Public Key weitergebe? Oder muss der Entschlüsselnde die Zahl N kennen?

                Der Schlüssel hat zwei getrennte Hälften, eine davon ist N.

                Angenommen du beantwortest die oberen Fragen mit "es reicht der Public Key", dann widersprichst du dir doch hier mit deiner Aussage aus deinem ersten Posting, oder?

                Ich glaube, du glaubst immer noch, dass der Public Key nur aus e besteht.

                Die Faktoren, die du nennst sind nicht alle unabhängig voneinander, das Produkt aus P und Q ist Teil von beiden Schlüsseln, wenn du diese Änderst und die Schlüssel sich nicht geändert haben, darf nichts mehr funktionieren.

                Genau dies läuft aber bei mir ab. Also muss ich dem Entschlüsselnden die Zahlen P und Q mitteilen, wie auch den Public-Key, oder?

                Wer p und q kennt, kennt den Private-Key.

                Ich nutze eine Implementierung des .NET-Frameworks. MSDN ist was Cryptographie angeht leider sehr schweigsam. Auch habe ich sonst nirgends etwas gefunden, wie ich Schlüssel erfolgreich austauschen kann.

                Versuche erstmal das Beispiel des Wikipedia Artikels mit einem Taschenrechner nachzuvollziehen.

                Hier nochmal ganz kompakt meine Frage: Welche Zahlen/Keys muss jemand kennen, der mit seinem Private-Key etwas entschlüsseln will, das ich mit seinem Public-Key verschlüsselt habe?

                Er muß d und N kennen; eine konkrete Implementierung, die einen schnelleren Algorithmus verwendet, könnte allerdings weitere Dinge voraussetzen.

                mfg
                Woodfighter

                1. Hi!

                  Ich glaube, du glaubst immer noch, dass der Public Key nur aus e besteht.

                  Ah... Jetzt hats gefunkt. Okay. Danke dafür. Das probiere ich morgen gleich mal aus. Leider kann ich erst morgen weiter machen an meinem Problem. Könntest du eventuell morgen noch mal hier reinschauen, ob Probleme aufgetreten sind? Dafür wäre ich dir sehr dankbar!

                  Vielen Dank für deine kompetente Hilfe!!!

                  Viele Grüße,
                  Lukas

                  1. Tach,

                    Könntest du eventuell morgen noch mal hier reinschauen, ob Probleme aufgetreten sind? Dafür wäre ich dir sehr dankbar!

                    wenn nicht ich, dann gibt es hier auch noch genug andere Leute, die auf dem Gebiet vermutlich auch noch deutlich qualifizierter sind als ich.

                    Vielen Dank für deine kompetente Hilfe!!!

                    "Multiple exclamation marks," he went on, shaking his head, "are a sure sign of a diseased mind." - Terry Pratchett, Eric

                    mfg
                    Woodfighter

  2. Hi Lukas,

    Das Ziel ist natürlich, dass man den Public-Key weitergibt und der andere die verschlüsselten Daten entschlüsseln kann.

    Das ist bei der klassischen Verschlüsselung (ich schreib Dir was und andere sollens nicht lesen können) nicht das Ziel. Da wird mit dem öffentlichen Schlüssel ver- und mit dem privaten entschlüsselt. Nur bei der digitalen Signatur ist es umgekehrt.

    Jens hat ja schon das meiste gesagt, aber ich schlage noch der Einfachheit halber folgende Sichtweise vor:

    Alle interessanten Zahlen sind p,q und e. Der Rest ist redundant. Dann bilden

    • e,p und q den privaten Schlüssel (wenn man die kennt, weiß man alles, auch d)

    • e und p*q (= N, bei Wikipedia) den öffentlichen Schlüssel (das reicht nicht, um d effizient zu berechnen)

    Das ist schon alles. Heißt auf deutsch: Du wählst e,p und q und teilst der Welt e und p*q mit. Und schon können alle loslegen und Dir geheime Briefe schicken.

    viele Grüße,
    der Bademeister