Autor |
Beitrag |
stiftmaster
      
Beiträge: 149
|
Verfasst: Mi 22.06.05 09:28
Hallo Leute,
ich möchte in den nächsten Tagen in ein Programm eine Verschlüsselung einbauen. Habe mich ein bisschen im Internet schlau gemacht und der RSA-Algorithmus scheint genau das richtige zu sein. Dazu habe ich aber noch einige Fragen:
1) Um einen Schlüssel zu erzeugen, brauche ich zwei laaaaange Primzahlen (meistens p und q genannt). Aus einigen Foren habe ich gelesen, dass diese Primzahlen rund 300 Dezimalzeichen lang sein sollten. Ist das korrekt?
2) Meine Vorstellung ist es, die Verschlüsselung schon relativ sicher zu machen - also 512Bit bzw. 1024Bit sollten es schon sein. Wie erreiche ich diese hohen Grad an Sicherheit bei der RSA-Verschlüsselung? Wie viele Dezimalstellen muss dann p, q, N haben, damit ich behaupten kann, dass ich mit 1024Bit verschlüssel?
3) Ein simples Programm mit Integer-Werten habe ich bereits programmiert und es läuft. Wenn ich natürlich N auf einige hundert Stellen vergrößern muss, fällt Integer natürlich weg und auch mit Int64 komme ich nicht weit. Gibt es da schon irgendwo fertige Units, die ich einfach einbinden kann und ich Integer nur noch durch die Klasse austauschen muss? Ich könnte das zwar auch alles selber programmieren, aber dazu habe ich eigentlich nicht so wirklich viel zu Zeit zu.
4) Für p, q muss ich mir ja Primzahlen suchen. Gibt es da irgendwelche Tabellen für oder muss ich jetzt erst noch ein Programm schreiben, wass mir Primzahlen erzeugt? Ich denke mein Rechner wäre nämlich damit leicht überfordert - kommt natürlich drauf an, wie viele Stelle (1) ich dafür brauche.
5) Gibt es nicht schon eine komplette Unit, die die gesamte RSA-Verschlüsselung beherrscht so dass ich die einfach nur noch kopieren muss und fertig - bin a) faul und b) habe ich leichten Zeitdruck
Danke für eure Antworten
Stefan Moderiert von Christian S.: Topic aus Sonstiges verschoben am Mi 22.06.2005 um 09:48
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mi 22.06.05 10:58
Zu RSA allgemein kann ich dir mal meine Fachbereichsarbeit empfehlen, die du unter www.manuel-poeter.de bei den Tutorials findest.
Eine komplett fertige Unit (gratis) wirst du wohl kaum finden, da eine mathematische Bibliothek zum Rechnen mit langen Zahlen benötigt wird, die doch sehr komplex ausfällt, vor allem wenn sie schnell auch noch sein soll!
Aber ganz prinzipielle Frage - bist du dir sicher, dass RSA die richtige Wahl ist? RSA ist ein asymmetrischer Algorithmus dh es gibt 2 Schlüsseln - einer zum ver- und einer zum entschlüsseln. Viele denken sich - "hey, RSA ist super und sicher, den nehm ich" - aber bedenken nicht, dass es eigentlich ein asymmetrisches Verfahren ist, und dabei ist oft ein symmetrisches Verfahren wesentlich geeigneter!
Symmetrische und asymmetrische Algorithmen haben sehr unterschiedliche Einsatzgebiete! Aber am besten du schaust dir meine Fachbereichsarbeit an, das steht da eh auch drinnen, und dann kannst du dir ja nochmal überlegen ob RSA wirklich die richtige Wahl ist!
Gruß, Motzi
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 22.06.05 12:48
Hagen Reddmann (DP: negaH) hat das Delphi Encryption Compendium geschrieben. Part I ist als OS veröffentlicht. Teil II und III mit Unterstützung für RSA sollten folgen, wurden jedoch aus Wut über Source-Klau nicht als Bibliothek fertiggestellt. Die Einzelteile der DEC Part II und DEC Part III solltest Du aber verstreut über die DP finden können. (Soweit ich mich an die PN erinnere, die er mir diesbezüglich mal geschrieben hat).
Ansonsten sollte Dir ein Blick auf torry.net genügen, da ich mir sicher bin, dort im Bereich Encryption bereits eine solche RSA-Kompo (FWS) gesehen zu haben. Inwieweit die was taugt, weiß ich aber nicht.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
stiftmaster 
      
Beiträge: 149
|
Verfasst: Mi 22.06.05 16:05
Hallo,
also auf eine RSA-Verschlüsselung bin ich nicht angewiesen - brauche nur ein 512/1024 Bit-Verschlüsselung - die sollte ja relativ sicher sein. Meine Aufgabe bzw. Ziel:
Ich habe zwei Server die sich hin und wieder eine E-Mail schicken, die einen Anhang hat (ungefähr 200 KBit). Ich soll nun ein Programm schreiben, was den Anhang a) verschlüsselt und dann die E-Mail verschickt und b) ein Programm was die E-Mail vom Server abholt und entschlüsselt.
Welches Verschlüsselungsverfahren da eingesetzt wird, ist mir eigentlich egal - es muss nur 512 oder besser 1024 Bit verschlüsselt sein - das sind die Vorgaben. Ratet ihr mir zu einer anderen Verschlüsselung?
Stefan
PS: Vielen Dank für den Link zu deinem Vortrag - wird meine Abendlektüre sein - lasse mich überraschen...
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mi 22.06.05 17:15
stiftmaster hat folgendes geschrieben: | Welches Verschlüsselungsverfahren da eingesetzt wird, ist mir eigentlich egal - es muss nur 512 oder besser 1024 Bit verschlüsselt sein - das sind die Vorgaben. Ratet ihr mir zu einer anderen Verschlüsselung? |
Da sieht man wiedermal, dass die Vorgaben von Leuten gestellt wurden, die offensichtlich keine Ahnung von Kryptographie haben..!
Wo ist der Sinn dabei, wenn du für diese Aufgabe ein asymmetrischen Algorithmus verwendest? Dann bräuchten beide Server 2 Schlüssel - einen mit der sie den Anhang verschlüsseln, und einen um den verschlüsselten Anhang des andren Servers zu entschlüsseln. Selbst wenn beide Server dasselbe Schlüsselpaar verwenden braucht jeder Server 2 Schlüssel, da bei asymmetrischen Verfahren eben unterschiedliche Schlüssel zum Ver- und Entschlüsseln benötigt werden (daher ja auch asymmetrisch). Wo ist hier der Vorteil zu einem klassischen symmetrischen Verfahren wie zB IDEA oder Rijandel? Mir fallen nur Nachteile ein:
- asymmetrische Algorithmen sind "unsicherer" - da asymmetrische Algos auf komplexer Mathematik aufbauen, gibt es neben den klassischen kryptanalytischen auch noch je nach Algo spezifische Angriffe die auf die darunterliegene Mathematik abzielen.
- langsamer: aufgrund der komplexen mathematischen Berechnungen sind asymmetrische Verfahren um ein vielfaches langsamer als symmetrische
Am besten du liest dir mal meine Fachbereichsarbeit durch - das ganze Thema Kryptographie ist zwar noch wesentlich komplexer, aber sie sollte mal einen ganz guten Einstieg bieten, und vielleicht kannst du dann auch selber schon ein bisschen besser abschätzen in welchem ein symmetrischer oder asymmetrischer Algo besser angebracht ist.
Gruß, Motzi
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
stiftmaster 
      
Beiträge: 149
|
Verfasst: Mi 22.06.05 22:13
Guten Abend,
deine Lektüre über Verschlüsselungen liest sich verdammt gut - Respekt. Es hat mir einige Fragen beantwortet - dafür einen ganz herzlichen Dank.
Nachdem ich hier einiges durchgeforstet habe, bin ich fest davon überzeugt, von RSA Abstand zu nehmen und mein Augenmerk auf AES zu richten. Bin jetzt auf der Suche nach einer Komponente für Delphi, die mir die Programmierarbeit abnimmt - gibt es da eine gute?
Mein Wunsch:
function CryptWithAES(key, orginal_text): encoded_text;
Gibt es da schon sowas? Und auch für Visual-Basic? Habe eben erfahren, dass der zweite Server die Applikationen in VB bekommen wird. Wobei ich nicht VB code - nur als Hilfe für den anderen Programmierer; falls ihr was kennt
Dankend
Stefan
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 22.06.05 22:39
Jup. Besagtes Komponentenpaket von Hagen Reddmann (DEC Part I) funktioniert fast auf der Art:
Delphi-Quelltext 1:
| EncodedStr := TCipher_AES.CodeString(Key, Text, fmtNone); |
Die Parameter müsstest Du aber nochmal konkret nachgucken.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
stiftmaster 
      
Beiträge: 149
|
Verfasst: Mi 22.06.05 22:57
Hi,
ich habe mir jetzt sowas gebastelt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); var Test: TCipher_Rijndael; begin Test := TCipher_Rijndael.Create('pwd', Test); Edit1.Text := Test.EncodeString('blub'); Test.Free; end; |
Den string 'pwd' muss ich doch jetzt 256-Zeichen lang machen und dann in die Applikation einbauen, compilieren und den String vergessen, oder ist noch was anderes zu berücksichtigen?
Dankend
Stefan
PS:
Das hier ist die Entschlüsselung:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button2Click(Sender: TObject); var Test: TCipher_Rijndael; begin Test := TCipher_Rijndael.Create('pwd', Test); Edit1.Text := Test.DecodeString(Edit1.Text); Test.Free; end; |
EDIT:
Will die Frage von oben noch etwas detallieren. AES kann ja 128 und 256 Bit-Verschlüsselung. Ich will mal lieber etwas höher verschlüsseln und möchte gerne die 256-Bit-Verschlüsselung nutzen. Heißt das dann, ich muss mein "pwd" 256-Zeichen lang machen? Und dort noch ein paar Sonderzeichen (.,öäü) einbauen?
Dankend
Stefan
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 22.06.05 23:12
Du solltest den String 'pwd' in deiner Anwendung möglichst unkenntlich machen. Hier ist effizientes Coding absolut fehl am Platz ... Wenn Möglich sollte vom String kein Zeichen unverarbetitet in der EXE erscheinen (Reine Sicherheitsfrage; z.B. XOR-Coding und andere Späße).
Du solltest aber das Cipher-Object noch mit FreeAndNil freigeben. Ansonsten ist das eine gewaltige Ressourcen-Verschwendung. Schau Dir also in der DOH einfach mal try except und try finally an 
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
stiftmaster 
      
Beiträge: 149
|
Verfasst: Mi 22.06.05 23:20
Wenn ich das richtig verstehe, verschlüssel ich das Password nochmal in der exe? wie soll das denn gehen - irgendwo muss das doch drin stehen - versteh ich absolut nicht.
Das mit dem FreeAndNil ist natürlich richtig - bei der zweiten Routine hatte ich es auch schon eingebunden, bei der obrigen nur vergessen - danke.
Stefan
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 22.06.05 23:43
Damit meine ich, dass Du das PW irgendwie in veränderter Form speicherst.
Angenommen, dein Text ist 'Hallo Welt' dann würdest Du in deiner Unit 'Ibmmp!Xfmu' schreiben und bei Verwendung dieses Textes eine kurze Routine aufrufen, die diesen wieder korrekt zurückwandelt (in diesem Fall, von jedem ASCII-Wert eins abzieht).
Außerdem solltest Du nicht nur eine Konstante haben, sondern meherere: Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| const Teil2 = 'Xf'; Teil1 = 'Ib'; Teil3 = 33; Teil4 = 'mmp'; Teil5 = 'mu'; |
Die Verwendung ist klar (Die Reihenfolge der Konstanten ist Absicht).
Ist eigentlich nur ne Sache des Stealthing des Passworts.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
stiftmaster 
      
Beiträge: 149
|
Verfasst: Do 23.06.05 18:58
Hi,
ich habe nun folgendes testweise erstellt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); var Test: TCipher_Rijndael; begin Test := TCipher_Rijndael.Create('1', Test); Edit1.Text := Test.EncodeString('1'); Test.Free; end; |
Verschlüsselt kommt dann in Delphi nur "¥" raus. Ein Kollege hat sich auch eine Komponente für VB organisiert und wenn er den Text "1" mit dem Key "1" verschlüsselt, bekommt er folgendes raus:
C94A61E68F3E9C7D2150380FAB7AFE34C894AD6A0F277D1751F1591FA7CF9878
Nun meine Frage: Wo liegt der Fehler? Ist es normal, dass der Text so lang wird oder mache ich gar nix falsch, sondern nur mein VB-Kollege?
Dankend
Stefan
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 23.06.05 20:03
Bei Symmetrischer Verschlüsslung ist die Codeblocklänge AFAIK meist 1 Byte, d.h. jedes Byte, was einzeln verschlüsselt wird, wird auch einzeln als Ausgabe erzeugt.
Dein VB-Kollege hat IMHO eine Komponente, die neben der 1 noch einen Header mitverschlüsselt. Frag ihn einfach mal genau.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
stiftmaster 
      
Beiträge: 149
|
Verfasst: Do 23.06.05 20:42
der behauptet es liegt nicht an ihm  Er vermutet, dass es an den Schlüsseln liegt. Zugegeben ich schnalle das auch noch nicht ganz.
Wo muss ich denn einstellen, ob ich mit 128-Bit, 192-Bit oder 256-Bit verschlüsseln will. Gibt es nicht irgendein Programm mit dem ich vergleichen kann, welche Verschlüsselung korrekt ist. Mit dem obrigen Argument kann ich natürlich gut punkten, aber leider löst das nicht die Probleme.
Stefan
|
|
|