Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   File-Crypter v1.0 [BETA] (https://www.delphipraxis.net/1561-file-crypter-v1-0-%5Bbeta%5D.html)

Luckie 9. Dez 2002 15:16

Ich kann dazu leider wenig sagen, ich habe mich damit noch nicht richtig beschäfftigt.

Motzi 9. Dez 2002 18:53

Zitat:

Zitat von Chakotay1308
Die GNU(PP)-Prjekte sind zwar sehr sicher, aber der RSA bleibt da doch noch etwas vorraus. Ich weiß zwar nicht wie die DLL aussieht, aber eines kann ich dir sagen: RSA ist sicher!

Chris

Ich kenn mich mit der Materie ziemlich gut aus (beschäftige mich schon länger recht intensiv damit -> siehe meine Fachbereichsarbeit), du kannst mir also in allen Punkten vertrauen! :wink:

Ich hab nie gesagt, dass RSA unsicher ist! Sofern man sich an alle Sicherheitsmaßnahmen hält ist RSA sicher (zumindest bis jetzt)... es kommt allerdings sehr auf die Implementierung des Algorithmus an.. der Algo kann zwar mathematisch vollkommen korrekt sein, aber wenn er nur mit den Standard-C Variablentypen mit max. 64Bit arbeitet, dann ist das definitiv nicht sicher, da 64Bit lange Zahlen sehr schnell faktorisiert werden können!

Was das GNU Projekt betrifft das ich erwähnt habe.. das ist eine Bibliothek zum Rechnen mit großen Zahlen - damit kann man sich den RSA Algorithmus selbst implementieren, und schließlich weiß man vom eigenen Code immer noch am besten was er macht! :wink:


Zitat:

Zitat von Luckie
Ich kann dazu leider wenig sagen, ich habe mich damit noch nicht richtig beschäfftigt.

Macht ja nix.. dazu gibts ja das Forum! :wink:
Ab sofern du mal beabsichtigst den Algorithmus selbst zu implementieren (mit einer OpenSource Bibliothek wie zb GMP) so würd ich mich bei Bedarf gern daran beteiligen! Hatte auch schon vor sowas selbst zu machen...

d3g 10. Dez 2002 14:12

Hallo Leute,

ich poste einfach mal zur Information, wie der RSA-Algo ungefähr funktioniert:

---
Man erstelle drei zufällig erzeugte (je weniger Pseudo-Zufall, umso besser) Primzahlen z1, z2 und z3, für die gilt: die Schnittmenge von T(z3) und T((z1 -1)(z2 - 1)) ist leer (T() steht für die Teilermenge). Als nächstes bilde man ein Produkt p = z1 * z2.

Jetzt kommt die Erstellung des öffentlichen Schlüssels, mit dem nur verschlüsselt werden kann. Der öffentliche Schlüssel besteht aus den Zahlen z3 und p. Für die Klarziffer K und die verschlüsselte Botschaft B gilt nun: B = (K ^ z3) mod p.

Der geheime Schlüssel, mit dem entschlüsselt wird, besteht aus z1, z2 (und damit auch p) und z3. es wird nun ein geheimer Exponent g berechnet, für den gilt: G = 1 / z3 mod (z1 - 1)(z2 - 1). Nun kann min die Klarziffer K wie folgt berechnen K = (B ^ g) mod p.

Ein Beispiel: Es sei z1 = 13, z2 = 19 und z3 = 5. Daher gilt p = 247. der geheime Exponent g ist g = 0,2 mod 216 = 173. Will man nun die Klarzffer K = 12 verschlüsseln, so erhält man B = (K ^ z3) mod p = (12 ^ 5) mod 247 = 103. Mit dem geheimen Exponenten g ann man nun wieder K berechnen: K = (B ^ g) mod P = (103 ^ 173) mod 247 = 12.
---

Normalerweise wird RSA benutzt, um nachrichten zu verschlüsseln. Der Sender besitzt den öffentlichen Schlüssel de Empfängers, verschlüsselt die Nachricht damit und übergibt sie an den Empfänger. Der kann die Nachricht dann mit dem geheimen Schlüssel wieder entschlüsseln. Ein Cracker hat dann z3 und p aus dem öffenlichen schlüssel, braucht aber für den geheimen Exponenten g noch z1 und z2. Also muss er alle Möglichkeiten für z1 und z2 durchprobieren (er kennt schließlich das Produkt der beiden, p). Da diese beiden Zahlen sich normalerweise in der Größenordnung 10^200 aufhalten, dauert das zumindest mit heutigen Systemen Jahrhunderte.

Wenn jetzt diese DLL aus ein paar Zeichen Passwort einen Schlüssel generiert, dann kann es passieren, dass mehrere Passwörter den gleichen Schlüssel erzeugen, sehr unpraktisch.

Außerdem, und das ist es was Motzi meint, kann man bei Zahlen, die gerade mal 64 Bit groß sind, sich also in der Größenordnung 10^19 befinden, in erheblich kürzerer Zeit als Jahrhunderte faktorisieren, damit tendiert die Sicherheit schon sehr gegen null.

Was mich auch verwundert, ist: wo werden die Schlüssel gespeichert? Wenn das in der verschlüsselten Datei selber geschieht, dann liefert man dem Cracker sämtliche Instrumente auf dem Silbertablett, er wird danken. Damit wäre die Sicherheit genau null.

MfG,
d3g

PS. Wenn man den Algorithmus nachbauen will, wird man über die Modulo-Operation mit Fließkommazahlen stolpern. Die Standard-C-Bibliotheken beinhalten eine Funktion fmod(), die das beherrscht, leider habe ich sowas für Pascal noch nicht gesehen :-(.

CalganX 10. Dez 2002 14:26

Mal zum RSA: Ich kenne das etwas einfacher:

-----
Man braucht 2 Primzahlen p und q. Diese Multipliziert man miteinander. Das Produkt ist der "Generalschlüssel" n.
Nun braucht man einen öffentlichen und einen privaten Schlüssel: d (decrypt) und e (encrypt). Sie kann man erzeugen durch folgende Regel:
Code:
e * d = 1 mod phi(n)
(Hierbei ist das = ein = mit 3 Strichen)
Dann hat man einen Text, den man als Zahlen darstellt (m). m muss kleiner sein als n. Um einen Text zu verschlüsseln macht man:
Code:
m^d (mod n)
Das ist dann meinetwegen C das ganze dann entschlüsseln mit
Code:
c^e (mod n)
-----

Den Beweis hatte ich auch irgendwann mal.

Chris

PS: Werde auf meiner Website bald mal eine Doku zum RSA machen...

CalganX 10. Dez 2002 14:28

Zitat:

Zitat von d3g
PS. Wenn man den Algorithmus nachbauen will, wird man über die Modulo-Operation mit Fließkommazahlen stolpern. Die Standard-C-Bibliotheken beinhalten eine Funktion fmod(), die das beherrscht, leider habe ich sowas für Pascal noch nicht gesehen :-(.

Ähm.. modulo (in Pascal/Delphi einfach mod als Operand wie +) gibt immer einen integer Wert zurück... Kann ja auch nur (zumindest beim RSA), da ja nur mit integer (ganzen Zahlen) gerechnet wird...

Chris

m-werk 10. Dez 2002 14:42

Hi Luckie!

Ich hab mir dein Programm mal angesehen. Find ich gut. Wie du am anfang schon geschrieben hast, kommt ja noch ein Abbrechen Button und ein Fortschrittszeiger hinzu.

Eine Sache ist mir aufgefallen.
Wenn man eine Datei verschlüsselt, dann wird quasi eine Kopie vom Original erstellt und diese dann verschlüsselt.

Wenn mann dan genau diese Datei wieder entschlüsselt, dann wird nochmals eine Kopie erstellt.

Die entschlüsselte Datei muss mann dann immer Umbenennen.

Wäre es nicht sinnvoller die Original-Datei zu überschreiben beim Verschlüsseln und auch beim Entschlüsseln, so dass nur 1e Datei existiert?

d3g 10. Dez 2002 14:42

Hi Chakotay,

die Modulo-Operation ist definiert als n(mod m) = m * frac(n / m) und kann sehr wohl mit Fließkommazahlen operieren und das ist auch für RSA nötig:

Zitat:

Zitat von d3g
G = 1 / z3 mod (z1 - 1)(z2 - 1)

Da z3 immer ganzzahlig ist, muss 1/z3 ein Bruch sein und ist (da z3 <> 1, weil 1 keine Primzahl ist) nie ganzzahlig.

MfG,
d3g

Motzi 10. Dez 2002 15:24

Liste der Anhänge anzeigen (Anzahl: 1)
Irgendwie is mein Link zur Fachbereichsarbeit anscheindend nicht wirklich beachtet worden (liegt vielleicht auch daran, dass der Server zur Zeit ein paar Probleme hat).

Jedenfalls.. der Delphi-Operator mod funktioniert nur mit den Delphi-Standard Typen und ist daher für eine Implementation mit Zahlen > 10^200 gänzlich ungeeignet!

Außerdem arbeitet RSA mit ganzen Zahlen! Hier die entsprechenden Kapitel aus meiner Arbeit:

5.2 Mathematik
Die Sicherheit von RSA beruht auf der Schwierigkeit, große Zahlen zu faktorisieren (siehe auch Abschnitt 3.1.2.2). Öffentlicher und privater Schlüssel hängen von einem Paar großer Primzahlen ab (100 bis 200 Stellen und mehr). Man vermutet, dass die Wiederherstellung des Klartextes aus dem öffentlichen Schlüssel und dem Chiffretext äquivalent zur Faktorisierung des Produkts der beiden Primzahlen ist.

5.2.1 Schlüsselerzeugung
Um die beiden Schlüssel zu erzeugen, wählt man zufällig zwei große Primzahlen p und q.(Es gibt einige Kriterien, die bei der Wahl der Zahlen beachtetet werden sollten ? siehe dazu 8.1) Jetzt berechnet man:
Code:
n = p*q
phi = (p-1)*(q-1)
Anschließend wählt man den zufälligen Chiffrierschlüssel e so, dass gilt:
Code:
1 < e < phi
ggT(e, phi) = 1
Mit Hilfe des erweiterten Euklidischen Algorithmus (siehe Anhang 3) berechnet man schließlich den Dechiffrierschlüssel d so, dass gilt:
Code:
1 < d < phi
e*d = 1 (mod phi)
Oder anders ausgedrückt:
Code:
d = e^-1 (mod phi)
Die beiden Zahlen e und d werden Encryption Exponent bzw. Decryption Exponent genannt, während n den Modulus bildet.
Die beiden Paare <n, e> und <n, d> bilden den öffentlichen und den privaten Schlüssel.

Das Aussehen der mathematischen Formeln musste leider ein bisschen leiden..

Der Rest wäre zu aufwendig hier in BBCode umzuformatieren, aber wer Lust hat kann sich ja meine FBA zu Gemüte führen..

Edit: ich hab jetzt die FBA im PDF Format an das Posting angehängt...

Luckie 10. Dez 2002 15:42

@m-werk: Das resultiert noch aus der Testphase, da wollte ich es tunlichst vermeiden original Dateien zu überschreiben, weder beim verschlüsseln, noch beim entschlüsseln. Ich bin noch am überlegen, wie ich das löse. Eventuell mit eine Vorsilbe, dann kann man sie normal öffnen.

Um noch mal auf die Sicherheit zu sprechen zu kommen. Auch wenn die DLL nur mit den standard C Datentypen arbeitet und die ganz ausreizt - wie lange wird es wohl mit einem privat PC dauern, die Verschlüsselung zu knacken? Alles was über 1 bis 3 Wochen liegt, dürfte für Daten, die nicht unbedingt so sicherheitsrelevant, reichen.

CalganX 10. Dez 2002 17:12

Hi,
@ Motzi: Vielleicht liegt das einfach nur daran, dass keine weiß, wo deine Facharbeit zu finden ist...
@ Motzi (2): Das was du da zitierst, ist ja genau das, was ich geschrieben habe...!

Chris


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 Uhr.
Seite 2 von 5     12 34     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz