AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe zu RSA Entschlüsselung

Offene Frage von "Tchibo_Tchabo"
Ein Thema von Tchibo_Tchabo · begonnen am 17. Mär 2007 · letzter Beitrag vom 19. Mär 2007
Antwort Antwort
Tchibo_Tchabo

Registriert seit: 17. Mär 2007
3 Beiträge
 
#1

Hilfe zu RSA Entschlüsselung

  Alt 17. Mär 2007, 21:19
Also zuerst möchte ich mich mal entschuldigen dass ich mich hier überhaupt angemeldet habe. Ich habe ehrlich gesagt nicht sehr viel mit Delphi am hut. Meine stärken sind eher so homepage design und so sachen. Aber ich habe ein problem. Unser lehrer will in der 13 jetzt keine Klausur mehr schreiben und hat aufgaben verteilt. Ich habe wohl die AK gezogen und muss ein Programm in Delphi schreiben , was RSA entschlüsselt mit 2 offiziellen Keys. Mathematisch is das ganze kein ding ich habe mich informiert.

Ich bekomme nen Schlüssel M und nen Schlüssel F
und einen Code ...X= 12345 irgendwas ...

F(x)=x^f mod m

mein problem ist jetzt das ganze in delphi zu übertragen.
Wie kann ich das so machen das der vom dem code nur jede einzelne ziffer in die funktion einsetzt und wie setze ich das am ende wieder als ergebnis zusammen... wär echt nett wenn mir jemand helfen könnte , weil das is wohl für so erfahrene leute kein akt.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Hilfe zu RSA Entschlüsselung

  Alt 17. Mär 2007, 21:46
Hallo,

wie wärs damit:

Delphi-Quellcode:
function RSAUncrypt(KeyM,KeyF: Integer,CryptedText: string): string;
const
  Offset = 47;
  i: Integer;
begin
  setlength(Result,length(CryptedText));
  for i := 1 to length(CryptedText) do
    Result[i] := Power(Ord(CryptedText[i])-Offset,KeyF) mod KeyM;
end;
Ich hoffe, durch M und F muss man nicht noch durchiterieren sondern die beiben konstant als Integer.

PS: Habt ihr denn Delphi nicht gelernt in der Schule?
Lukas Erlacher
  Mit Zitat antworten Zitat
Tchibo_Tchabo

Registriert seit: 17. Mär 2007
3 Beiträge
 
#3

Re: Hilfe zu RSA Entschlüsselung

  Alt 18. Mär 2007, 07:17
boah is ja geil ich wusste net das es uncrypt gibt , also als komponente.vielen dank ich probiers gleich mal aus.

danke.

Wir haben delphi gelernt ,aber so einfache sachen wie: Taschenrechner programmieren un son stuß. Ehrlich gesagt haben wir nicht wirklich die lehrer mit ner guten ausbildung , die das draufhaben.Ich hab zumbeispiel nie gelernt das es funktionen gibt oder wie man die überhaupt rausfindet oder so.Dieses offset ist mir auch ganz neu , aber ich will euch net weiter damit stören , ich lese irgendwo nach , was das bedeutet.

PS: Aber warum hast du die Funktion Ord eingefügt? Brauch man diese denn?
  Mit Zitat antworten Zitat
Tchibo_Tchabo

Registriert seit: 17. Mär 2007
3 Beiträge
 
#4

Re: Hilfe zu RSA Entschlüsselung

  Alt 18. Mär 2007, 07:43
geht leider nicht.

der sagt in der letzten Zeile Operator auf diese Operandentyp nicht anwendbar.

versteh ich grad was falsch oder kann man mit strings nicht rechnen ??
  Mit Zitat antworten Zitat
18. Mär 2007, 13:54
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Hier gehts um Delphi
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Hilfe zu RSA Entschlüsselung

  Alt 18. Mär 2007, 14:09
Hallo,

es gibt eine Menge Encryption-Toolsets. z.b. Hagens Hier im Forum suchenDEC, da müsste auch ein RSA-Decrypt drinsein. Aber die Funktion da oben ist mitnichten eine Komponente - die hab ich aus dem Stegreif geschrieben. Was auch die Fehler eventuell erklärt.

Und wenn du einen TR programmieren kannst, sollte dir auch das debuggen der funktion nicht schwerfallen.

Delphi-Referenz durchsuchenOrd wandelt einen Delphi-Referenz durchsuchenChar in seine Position auf der ASCII-Tabelle als Integer um - da die erste Ziffer '0' die Position 48 hat, wandelst du ein '0' in eine 0 um, indem du "Ord('0')-48" ausführst - da kommt nämlich 0 raus.

Wobei man sagen muss, dass meine Konstante "Offset" deshalb noch um eins erhöht werden muss.

Delphi-Referenz durchsuchenPower bzw. Delphi-Referenz durchsuchenIntPower kannst du dazu benutzen, eine Zahl zu potenzieren.

Reicht dir das?
Lukas Erlacher
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#7

Re: Hilfe zu RSA Entschlüsselung

  Alt 19. Mär 2007, 07:43
Delphi-Quellcode:
function RSAUncrypt(KeyM,KeyF: Integer,CryptedText: string): string;
const
  Offset = 47;
  i: Integer;
begin
  setlength(Result,length(CryptedText));
  for i := 1 to length(CryptedText) do
    Result[i] := Power(Ord(CryptedText[i])-Offset,KeyF) mod KeyM;
end;
Das kann niemals funktionieren

1.) wird mit Fließkommazahlen in Power() gearbeitet und diese können nur maximal 48Bit exakt darstellen. Bei RSA arbeitet man immer mit Ganzzahlen und exakten Berechnngen die auf minidestens 1024 Bit exakt sein müssen. Dh. die Zahlen liegen in Größenordnung 2^1024 und nicht nur 2^48.

2.) wird eine modulare Division im Ganzzahlbereich mit Fließkomma gemischt, das kann der Compiler garnicht übersetzen, inkompatible Datentypen (Power() mod X)

3.) wird die Zahl erst potenziert entstehen rießiggroße Zahlen, rechne mal aus wie groß 2^1024^(2^1024) ist. Dh. überlicherweise rechnet man nicht X^Y mod N so wie es als Formel erscheint, sondern man rechnet mit der Binären Modulare Exponentation die quasi jeden Einzelschritt einer Exponentation modular durchführt. Die maximal größte auftrentende Zahl dabei ist zweimal größer in Bits als das Modul N.
Also auch der Hinweis auf IntPower() ist kontraproduktiv.

4.) wird bei RSA niemals eine Nachricht Zeichenweise ver/entschlüsselt. Dies reduziert die erwünschte Sicherheit des Gesamtverfahrens auf defakto NULL. Normalerseise wird man bei RSA nur in Blöcken a X Bits arbeiten, wobei X meistens >= 1024 ist.

5.) es ist tödlich eine RSA Nachricht direkt mit RSA zu verschlüsseln, dies ist unsicher ! Normalerweise werden heute nur sogenannte Hybridsysteme verwendet. Ein per Zufall erzeugter Schlüssel mindestens 128 Bit groß wird mit RSA verschlüsselt. Die eigentliche Nachricht wird mit einem symmetrischen Verfahren verschlüsselt wobei eben unser Zufallsschlüssel als Passwort dient. Die verschlüsselte Nachricht enthält also mindestens 2 Datenbereiche -> 1.) mit RSA geschützer Zufallskey 2.) Nachricht mit diesem Zufallskey verschlüsselt.

Je nach deiner Aufgabenstellung gehst du folgendermaßen vor:

1.) der Lehrer möchte nur das du demonstrativ RSA erklärst:

- dann reichen Int64 Berechnungen aus da du mit in Wirklichkeit absolut unsicheren Zahlenbereichen arbeiten kannst, quasi Mini-RSA rein zu Demonstration der Mathematik
- du benötigtst eine modulare Exponentation Funktion die du selber schreiben musst. Hier in der DP findest du mehrere Postings dazu -> suche "binäre modulare Exponentation"
- du benötigst eine 3'rd Party Bibliothek die dir mal schnell par Mini-RSA Schlüssel erzeugst die du dann Hardcoded in deinem Source einbaust. Ich meine du willst ja nicht die RSA Schlüsselerzeugung demonstrieren.
- wenn doch benötigst du noch Funktionen zur Primzahlerzeugung (maximal 2^31 Zahlenbereich, auch das findest du hier in der DP)
- und eine Funktion um das Modulare Multiplikative Inverse zu berechnen -> A = B^-1 mod N. Dazu benötigt man den erweiteren euklidschen GCD, auch dafür gibts Source hier in der DP

2.) der Lehrer möchte eine ECHTE RSA von dir
- du benötigst auf alle Fälle eine Bibliothek/Sourcecode der alle notwendigen mathematischen Operationen auf Zahlen der Größenordnung <= 2^4096 berechnen kann
- ich meine ja das deine Lehrer von dir nicht erwarten kann das du selber so eine Lib codest (naja eigentlich doch, aber dazu braucht man zeit)
- deshalb wäre es gerechtfertig eine fertige Library zu benutzen, auch das gibts für Delphi, jedoch ist die Auswahl in JAVA und C/C++ größer
- die weiteren Schritte sind gleich zu 1.)


Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:11 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