Thema: Delphi Dateien verschlüsseln

Einzelnen Beitrag anzeigen

Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#49

Re: Dateien verschlüsseln

  Alt 8. Jul 2005, 23:29
Hallo Gina, hallo Hagen!
Danke euch beiden für eure ausführlichen Antworten.
Ich denke das hat schon ein wenig Licht auf das ganze geworfen, besonders, die Sichtweise, dass der öffentliche Schlüssel eigentlich nur eine andere Form des privaten Schlüssels ist. Nun bin ich aber eigentlich noch viel mehr verwirrt. Tut mir leid, wenn ich nicht ganz durchsteige durch das was ihr mir zu erklären versucht. Es gibt da mehrere Punkte, die ich jetzt mit Hilfe von Zitaten und meinem Quelltext mal auseinander klamüsern will.
Zunächst mal verwirrt mich die Aussage von Hagen:

Zitat:
b.) wird mit der Öffentlichen Form eines Schlüssel eine bekannte Nachricht ver-schlüsselt so kann man dieses Produkt mit einem Ver-Schlüsselten Produkt der gleichen bekannten Nachricht der Privaten Schlüssel Form binär auf Gleichheit prüfen: das nennt man Verifizierung/Erzeugung einer Digitalen Signatur ! oder Authentifizierungs- Operation.
Also: Ich nenne die öffentliche Schlüsselform jetzt mal n, weil Hagen das in seinem mathematischen Kurzdarstellungen das auch so gemacht hat. Du behauptest also, dass ich eine Nachricht alleine mit dem öffentlichen Schlüssel verschlüsseln kann und dann das selbe mit dem privaten Schlüssel machen kann, und die jeweiligen Produkte vergleichen kann. Allerdings kann ich doch mit n alleine garkeine nachricht Verschlüsseln, dazu brauche ich noch immer das e, so wie es auch bei dir steht:

Zitat:
C = M^E mod N
und aus e ergibt sich ja durch das modulare Inverse d.
Und GENAU da habe ich jetzt ein Verständnisproblem, weil du immer so eindeutig getrennt hast zwischen Verschlüsseln mit dem öffentlichen Schlüssel und Entschlüsseln mit dem privaten Schlüssel.
Ich brauche ja schließlich auch zum Verschlüsseln der Nachrichicht eine Information e, von der ich ganz ohne Probleme auf d schließen kann. Somit muss ich doch als Nachrichtenempfänger auch Informationen über meinen privaten Schlüssel preisgeben.

Der einzige Ausweg den ich mir jetzt aus diesem Dilemma konstruiert habe war nun, dass ich d nur aus solchen e berechnen kann, die auf den bekannten Primzahlen p und q basieren, dass ich allerdings die Nachricht mit beliebigem e verschlüsseln kann und die Nachricht auf Grund des konstanten n mit dem zuvor auf p und q basierenden d entschlüsselt werden kann.

Dazu fehlt mir leider die mathematische Grundlage das für mich zu versichern. 2 Semester Uni-Mathe reichen da noch nicht.

Das würde heißen ich müsste das e garnicht speichern, sondern könnte es bei jeden Verschlüsslungsvorgang neu wählen.

Wenn das der Fall wäre, dann hätte ich mit einem Schlag das ganze Prinzip Verstanden.


Ich wollte ja noch meinen source posten, der ist allerdings "leider" in JAVA:

Code:
   //Der Konstruktor, welcher mir die Schlüssel generiert
         RSA(){
      BigInteger p = BigInteger.probablePrime(512, new Random());
      BigInteger q = BigInteger.probablePrime(512, new Random());
      n=p.multiply(q);
      BigInteger f = p.multiply(q).subtract(p).subtract(q).add(BigInteger.ONE);
      e=new BigInteger("3");
      while(f.gcd(e).doubleValue()!=1.0)
         e=new BigInteger(String.valueOf(prim(e.intValue()+1)));
      d=e.modInverse(f);
   }
         
         //verschlüsseln
   public BigInteger encode(BigInteger t){
      return t.modPow(e,n);
   
   }
   
         /entschlüsseln
   public BigInteger decode(BigInteger c){
      return c.modPow(d,n);
   }
In wiefern das ganze jetzt mathematisch sicher ist, weiß ich nicht, da ich nicht weiß wie Random implementiert ist und auch nicht wie BigInteger implementiert ist, aber ich mache das ganze ja auch nur zu studienzwecken.
Weiterhin weiß ich auch nicht sicher ob e eine Primzahl sein muss, da in der Dokumentation die ich hatte dazu nicht weiter was drin stand aber alle Beispielzahlen Primzahlen waren; aber schaden kann es ja eigentlich allenfalls der Laufzeit.

Was man meinem source entnehmen kann ist, dass ich das e speichere und für jeden Verschlüsselungsvorgang wiederverwende.

Irgendwie sind unsere Dozenten/Profs hier alle Armleuchter, von denen war nicht ein einziger in der Lage mir so eine ausführliche und halbwegs verständliche Antwort zu geben wie Hagen, auch dass ich solche Verständnisschwierigkeiten habe denke ich mal liegt an der absolut mangelhaften und teilweise widersprüchlichen Vorlesung. Werd doch bitte mal schnell Prof an meiner Uni!


Eine Frage habe ich noch:

Zitat:
Während bei den sym. Verfahren die Ent-Schlüsselungs Funktion eine reine Inversion der Ver-Schlüsslungs-Funktion ist müssen Unterschiede bei den a-symmertischen Verfahren exitieren.
----------

Verschlüsselung ist C = M^E mod (P * Q)
Entschlüsselung ist M = C^D mod (P * Q)

Gut soweit ist das alles noch symmetrisch !
Wo ist denn da die Verschlüsselung das "Inverse" der Entschlüsselung? Also unter invers verstehe ich das Verhältnis zwischen + und - oder * und /.

Naja beanspruche wieder viel zu viel von anderer Leute Zeit.
Ich bedanke mich auf jeden Fall für die aufklärenden Worte!
Gruß
Jan
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat