Ich kann dazu leider wenig sagen, ich habe mich damit noch nicht richtig beschäfftigt.
|
Zitat:
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:
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... |
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 :-(. |
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:
(Hierbei ist das = ein = mit 3 Strichen)
e * d = 1 mod phi(n)
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:
Das ist dann meinetwegen C das ganze dann entschlüsseln mit
m^d (mod n)
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... |
Zitat:
Chris |
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? |
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:
MfG, d3g |
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:
Anschließend wählt man den zufälligen Chiffrierschlüssel e so, dass gilt:
n = p*q
phi = (p-1)*(q-1)
Code:
Mit Hilfe des erweiterten Euklidischen Algorithmus (siehe Anhang 3) berechnet man schließlich den Dechiffrierschlüssel d so, dass gilt:
1 < e < phi
ggT(e, phi) = 1
Code:
Oder anders ausgedrückt:
1 < d < phi
e*d = 1 (mod phi)
Code:
Die beiden Zahlen e und d werden Encryption Exponent bzw. Decryption Exponent genannt, während n den Modulus bildet.
d = e^-1 (mod phi)
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... |
@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. |
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. |
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