Entwickler-Ecke

Sonstiges (Delphi) - MPArith delphi xe4 rsa encrypt


herr-master - Sa 05.10.13 10:55
Titel: MPArith delphi xe4 rsa encrypt
Hallo kann mir wer sagen warum ich bei MPArith so viel code benutzen muss für ein einfaches rsa encrypt.Und functioniert auch nicht richtig.
Kann mir wer ein bsp schreieben wie man rsa encrypt bei MPArith verwendet.
Danke schon mal im vorraus.


Quitzlinga - Sa 05.10.13 12:13

Hi,

ohne Quellcodedetails kann ich bisher nur folgendes sagen bzw vermuten :

Werfe MPArith und RSA nicht in einen Topf. MPArith liefert Dir nur Datentypen und Routinen, die sich mit der Berechnung grosser (Fließkomma)-Zahlen beschäftigt, die wiederum vom RSA-Algorithmus zwingend benötigt werden.

Zitat:
Hallo kann mir wer sagen warum ich bei MPArith so viel code benutzen muss für ein einfaches rsa encrypt


Was ist für dich gross ? Ob nun RSA oder ein anderer Algorithmus, Du musst mindestens die Funktionen Verschlüsseln / Entschlüsseln und Schlüsselgenerierung mit den entsprechenden Parametern umsetzen, das ist nicht in ein paar Zeilen Code gemacht. Bezüglich des RSA können vermutlich einige Funktionen schon durch mitgelieferte Delphi-Funktionen ersetzt werden und den Code daurch ehblich kürzen. Da diese aber maximal 32/64 Bit Parameter annehmen / damit rechnen sind sie für einen vernünftigen RSA nutzlos (der arbeitet ab 1024 Bit und höher mit seinen Berechnungen -> darum MPArith)


Delphi-Quelltext
1:
Und functioniert auch nicht richtig                    


Ohne Quellcode kann ich Dir das nicht beantworten. Vermutlich wird fehlerhaft Chiffriert/Dechiffriert k.A.


Delphi-Quelltext
1:
Kann mir wer ein bsp schreieben wie man rsa encrypt bei MPArith verwendet.                    


Auch hier nochmal gesagt : MPArith hat nichts mit RSA zu tun. Es hat (soweit ich sehen konnte) nur Datentypen und Funktionen zum Berechnen grosser Zahlen aber keinerlei Funktionalität zum Verschlüsseln, Entschlüsseln oder Schlüsselgenerierung.
Wikipedia liefert Dir zum Stichwort RSA eine sehr gute Übersicht, wie man so etwas implentiert. Bezüglich der Ermittlung der Schlüssel sind das zwar "nur 5 Schritte" aber die haben es in sich. Eine konkrete Umsetzung in Delphi dürfte durchaus umfangreich sein. Aber warum das Rad neuerfinden ? Benutze doch einafch ein paar der Bibliotheken aus dem Netz (zB. Lockbox), die bereits RSA unterstützen.

Ich hoffe, das hilft Dir etwas weiter aber Verschlüsselung ist ,auch in den Grundzügen, schon ein ziemlich umfangreiches Thema, das man nicht mal eben so abhandeln kann.

MfG

Quitzlinga


herr-master - Sa 05.10.13 12:22

doch hier so sollte es gehen aber das functioniert so nicht.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
mp_init4(c,n,e,m);
 mp_read_decimal_str(e,edit1.text);
 mp_read_decimal_str(n,edit2.text);
 mp_rsaep(m,e,n,c);//rsa encrypt??
 mp_read_decimal_str(m,edit3.text);
 edit4.text:=mp_adecimal(c);



selbst wenn ich das benutze functioniert es nicht.
E=65537(10er)
n=123457171127564473956360536343713050577(128bits)
Bei fgint ist es ja so


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
FGintRSA.RSAEncrypt
    (
    StringEdt.Text,
    Private_Exp,
    Modulus_N,
    EncryptedString
    );

Es hat (soweit ich sehen konnte) nur Datentypen und Funktionen zum Berechnen grosser Zahlen aber keinerlei Funktionalität zum Verschlüsseln, Entschlüsseln oder Schlüsselgenerierung.
doch hatt es was glaubst du für was mp_rand_bits steht in mparith.
tplockbox gibt es doch nicht für delphi xe4 oder doch?


Quitzlinga - Sa 05.10.13 13:36

Hi,

hatte garnicht gesehen, das da noh zusätzlich Funktionalität versteckt war. Man lernt nicht aus.

Ich kommentiere das ganze jetzt erst einmal:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
 // Initialisiert die Variablen c,n,e,m für MPArith 
 mp_init4(c,n,e,m);
 // Du liest die Zahlen e und n ein  
 mp_read_decimal_str(e,edit1.text);
 mp_read_decimal_str(n,edit2.text);
 // Durchführung eines Standard RSA mit den Parametern m, e, n und dem Ergebnis c
 // Basic RSA encryption operation, c=m^e mod n (Aus Beschreibung mpArith)
 mp_rsaep(m,e,n,c);//rsa encrypt??
 // der Parameter m wird eingelesen, müsste aber eigentlich hinter das  mp_read_decimal_str(n,edit2.text);
 mp_read_decimal_str(m,edit3.text);
 // Du gibst das Ergebnios in Edit3 aus
 edit4.text:=mp_adecimal(c);


Der Fehler wird wahrscheinlich die Variable m sein, denn die wird erst nach der Berechnung eingelesen, obwohl sie dafür schon benötigt wird. Die Verschlüsselung selbst, da gehe ich mal von aus, ist in Ordnung.

Zur zweiten Funktion kann ich nicht viel sagen, bloss das dieser einen kompletten String verschlüsselt und nicht bloss eine Zahl, wie im obigen Algorithmus.

Zitat:
tplockbox gibt es doch nicht für delphi xe4 oder doch?

Delphi XE4 habe ich leider nicht aber da ich Lockbox auf XE2 unter 32/64 Bit am laufen habe, wirds wohl auch auf XE4 laufen. Einfach ausprobieren.

MfG

Quitzlinga


herr-master - Sa 05.10.13 13:49

Ich habs jetzt mal umgedreht aber mparith scheint keine 10 base zu kennen:
Diese zahelen stammen von keygener assistant 2.1.0 bei at4re.
e=65537
N=253615971199085675420193811977875906791
Wenn ich die zahlen verwende bekomme ich s_mp_read_radix:invalid number syntax


Mathematiker - Sa 05.10.13 13:50

Hallo herr-master,
Entschuldige bitte, aber unter
http://www.entwickler-ecke.de/topic_MPArith+delphi+xe4_112097.html
habe ich Dir schon zum wichtigsten Fehler in Deinem Quelltext geschrieben:
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
... Nach Deinem Quelltext hast Du zwar m initialisiert, aber diesem keinen Wert zugewiesen. ...

Die Antworten ignorieren und einfach einen neuen Thread aufmachen, ist schon merkwürdig.
Und noch etwas:
user profile iconherr-master hat folgendes geschrieben Zum zitierten Posting springen:
Hallo kann mir wer sagen warum ich bei MPArith so viel code benutzen muss für ein einfaches rsa encrypt.Und functioniert auch nicht richtig.

Im ersten Thread hatte ich schon ausgeführt, dass user profile iconGammatesters MPArith funktioniert(!). Zuerst würde ich nach eigenen Fehlern suchen und dann in der Arbeit anderer.

Beste Grüße
Mathematiker

Nachtrag:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button1Click(Sender: TObject);
var m,e,n,c:mp_int;
begin
   mp_init4(m,e,n,c);
   mp_read_decimal_str(m, '1234567890111111111111111111111111111');
   mp_read_decimal_str(e, '65537');
   mp_read_decimal_str(n, '253615971199085675420193811977875906791');
   mp_rsaep(m,e,n,c);//
   listbox1.items.add(mp_adecimal(c));
   mp_clear4(m,e,n,c);
end;

zum Beispiel funktioniert einwandfrei und zeigt korrekt c = 124965126236792593538163237532485181769 an.
Sollte aber m > n sein, dann geht es natürlich nicht.


herr-master - Sa 05.10.13 14:28

sorry mein fehler habs jetzt verstanden warum es nicht ging.
Der fehler war be mir hier mp_read_decimal_str(m,edit3.text); nur zahlen mit mp_read_decimal_str.
Für einen normalen string also hallo scheint das eine andere function zu sein.
Und meins geht ja auch so

Delphi-Quelltext
1:
2:
3:
 
 mp_read_decimal_str(e,edit1.text);
 mp_read_decimal_str(n,edit2.text);

Bei dir kann man doch e und n aus der exe im debugger lesen.
Ich habe doch m einen wert zugewiesen und zwar edit3.text