Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   RSA Public/Private Key (https://www.delphipraxis.net/124756-rsa-public-private-key.html)

EugenB 24. Nov 2008 19:54


RSA Public/Private Key
 
Hey Leute,

ich wollte mich mal an RSA versuchen soweit habe ich auch einen funktionierenden Algorythmus der mir entweder e,N oder d,N ausspuckt, jedoch wenn ich jetzt einen Text damit verschlüsseln wollte (immer 2 zeichen nacheinander) bekomme ich Irre Große zahlen raus. Für nen Satz (ca 10 Wörter, hätte ich ca 20 Reihen Zahlen jede Zahl mit 570 Stellen)

Jetzt habe ich online gesehen man soll Hybride Verfahren nutzen, so ... wie? Asymmetrisch ist ja RSA , Symmetrisch zb Rijindael nun wie bekomme ich diese beiden zusammen zum laufen?

Und Programme die RSA nutzen erstellen einen RSA Key mittels eines Passwortes, wie funktioniert das dann? wie werden dann die nachrichten uebermittelt , verschlüsselt/entschlüsselt.

Und noch ne frage^^, wie erhalte ich zB aus e,N oder dem Passwort so einen Public-Key:

Beispiel:
Code:
-----BEGIN RSA PUBLIC KEY-----
MIIBCAKCAQEAvqTTue+F7FzyxHk6t6pfzBc0WGwOlDSQUs4VHCGSHAxN6c/EDlje
bYiFdWbMyEmYE+vVsyI8vbgwqofu88pwEKc6uASXJBsN52/YM7A/ZPQIG9w7ImVy
TjZ/OhX9YbTTL4qKnbuRH7kDe/ur1lo5to8I0ApVeRf5QZ0al1MGvwwEG7ZX8vqC
VSoI9yohLxNoG/VpevM+bVgJIZrcJu5m4IynKfQU7jba2YiJJ+9/lMuIFbNoNh1Y
38E5mk4kHlRFv0QlhvTzVYLlrxLkQ772UfCkI8t9LZF122wsGlUoa/9AwCEYgsVW
zT0+G1L1Ya01VTCZqfsq1OG2ChADQoOUXwIBBQ==
-----END RSA PUBLIC KEY-----
Zumindest habe ich online nix gefunden was mir bei diesen Fragen weiterhelfen könnte, ich hoffe ihr habt mehr Ahnung als ich :) ^^

MfG,
Eugen

gammatester 25. Nov 2008 08:45

Re: RSA Public/Private Key
 
Zitat:

Zitat von EugenB
...
Und noch ne frage^^, wie erhalte ich zB aus e,N oder dem Passwort so einen Public-Key:

Beispiel:
Code:
-----BEGIN RSA PUBLIC KEY-----
MIIBCAKCAQEAvqTTue+F7FzyxHk6t6pfzBc0WGwOlDSQUs4VHCGSHAxN6c/EDlje
bYiFdWbMyEmYE+vVsyI8vbgwqofu88pwEKc6uASXJBsN52/YM7A/ZPQIG9w7ImVy
TjZ/OhX9YbTTL4qKnbuRH7kDe/ur1lo5to8I0ApVeRf5QZ0al1MGvwwEG7ZX8vqC
VSoI9yohLxNoG/VpevM+bVgJIZrcJu5m4IynKfQU7jba2YiJJ+9/lMuIFbNoNh1Y
38E5mk4kHlRFv0QlhvTzVYLlrxLkQ772UfCkI8t9LZF122wsGlUoa/9AwCEYgsVW
zT0+G1L1Ya01VTCZqfsq1OG2ChADQoOUXwIBBQ==
-----END RSA PUBLIC KEY-----
Zumindest habe ich online nix gefunden was mir bei diesen Fragen weiterhelfen könnte, ich hoffe ihr habt mehr Ahnung als ich :) ^^

Wie wär's damit: RFC 2440 - OpenPGP Message Format, Abschnitte 5.5.2. Public Key Packet Formats und 6. Radix-64 Conversions

Gammatester

spaxxn 25. Nov 2008 08:59

Re: RSA Public/Private Key
 
Das hört sich wieder nach einer Mission für Hagen an :D

EugenB 25. Nov 2008 12:32

Re: RSA Public/Private Key
 
Soo, vielen dank fuer die RFC Nummer :)

Zitat:

version 4 packet contains:

- A one-octet version number (4).

- A four-octet number denoting the time that the key was created.

- A one-octet number denoting the public key algorithm of this key

- A series of multi-precision integers comprising the key
material. This algorithm-specific portion is:

Algorithm Specific Fields for RSA public keys:

- multiprecision integer (MPI) of RSA public modulus n;

- MPI of RSA public encryption exponent e.
Alles klar die benötigen mehrere Oktetts nun soll man dann einfach die Oktetts nacheinander schreiben also so?:
0000000000010100

oder muss man diese voneinander mit einem extra bit trennen?

Zitat:

A four-octet number denoting the time that the key was created.
Wie sieht diese Zeit aus? als Unix-Timestamp?

Zitat:

A one-octet number denoting the public key algorithm of this key
Welche nummer ist fuer RSA?

Zitat:

A series of multi-precision integers comprising the key
material. This algorithm-specific portion is:

Algorithm Specific Fields for RSA public keys:

- multiprecision integer (MPI) of RSA public modulus n;

- MPI of RSA public encryption exponent e.
Wie schreibe die beiden zahlen rein, woher weiß ich dann wann n endet und e anfängt?

Alles klar Radix64 ist also Base64 mit Zeilenumbruch.

Man spricht immer von 512/1024/2048-Bit Schlüssel wie bekomme ich raus wieviel Bit meiner ist? an der länge der zusammengesetzten Oktetts? oder nur an den beiden n,e ?

Naja immerhin schon etwas weiter :P

MfG,
Eugen

gammatester 25. Nov 2008 13:08

Re: RSA Public/Private Key
 
Zitat:

Zitat von EugenB
Wie schreibe die beiden zahlen rein, woher weiß ich dann wann n endet und e anfängt?

Abschnitt 3.2. Multi-Precision Integers!? Vielleicht hilft ja auch der Quellcode von PGP und GNUPG weiter und/oder die Stichworte "ASN.1 BER DER".

Gammatester

EugenB 25. Nov 2008 14:51

Re: RSA Public/Private Key
 
Hm mehrmals durchgelesen und nicht verstanden.

Aber man muss sich ja nicht nach diesem Schema / Standartisierung halten und seine RSA-Key Files erstellen oder?

gammatester 25. Nov 2008 15:44

Re: RSA Public/Private Key
 
Zitat:

Zitat von EugenB
Hm mehrmals durchgelesen und nicht verstanden.

Aber man muss sich ja nicht nach diesem Schema / Standartisierung halten und seine RSA-Key Files erstellen oder?

Für den Eigenbedarf kann man machen, was man will; nur sollte es auch da halbwegs vorher durchdacht werden. Willst Du Text oder Binär oder beides? Text kann man wiederum als Base64, Hex oder sogar dezimal verwenden (dezimal sieht aber irgendwie uncool/unprofessional aus).

Da Du RSA in der Praxis nur mit MPIs (= Multi-Präzisionzahlen) benutzt, hast Du eventuell in der MPI-Bibliothek schon ein Defaultformat. RSA sollte man allerdings nicht in Roh-Form verwenden, sondern nur mit Padding (vgl RFC 3447 - PKCS #1: RSA Encryption Version 2.1). Beispiel-Pascalcode für EME-PKCS1-v1_5 en/decoding kannst Du notfalls aus der mp_rsa-Unit in meinem MPArith-Archiv nehmen.

Gammatester

EugenB 25. Nov 2008 17:13

Re: RSA Public/Private Key
 
Ich denke mal als Text per Radix64.

Eine MPI-Bibliothek habe ich nicht ^^, ich denke mir vllt per XML alles aufteilen?

z.B
<public_key>
<e>1233234234</e>
<n>2423423523</e>
</public_key>

und nochwas was wird jetzt eigentlich gewertet wenn man von zb. RSA-200 redet? welche Zahl wird dabei gewertert? die verschlüsselte Zahl? e/n?

gammatester 25. Nov 2008 17:22

Re: RSA Public/Private Key
 
Zitat:

Zitat von EugenB
Ich denke mal als Text per Radix64.

Eine MPI-Bibliothek habe ich nicht ^^, ich denke mir vllt per XML alles aufteilen?

z.B
<public_key>
<e>1233234234</e>
<n>2423423523</e>
</public_key>

und nochwas was wird jetzt eigentlich gewertet wenn man von zb. RSA-200 redet? welche Zahl wird dabei gewertert? die verschlüsselte Zahl? e/n?

Das Format ist OK, aber: Ohne MPI ist das alles Spielkram und nur zum Lernen sinnvoll. Selbst int64-Integers sind als Modulus völlig ungeeignet (und gerade Exponenten ebenso). Für MPI unter Freepascal siehe meinen MPArith-Link oben.

Gammatester

EugenB 25. Nov 2008 19:56

Re: RSA Public/Private Key
 
Die zahlen waren auch nur ein Beispiel :-D sollten nicht richtig sein^^

Zum rechnen benutze ich GNURZ ( Arithmetik zum Umgang mit (G)roßen (N)atürlichen (U)nd (R)ationalen (Z)ahlen ) die Schlüssel e,n haben ne länge von ca 570 stellen

Vorerst letzte Frage: Worauf bezieht sich die Bit-Zahl also "RSA-1024"? es sind 1024 Bit ja 2^1024 , nur von was wird das gemessen? von n oder e? oder beides? oder auf die beiden primzahlen p/q ?

Wenn das geklärt ist habe ich erstmal meinen Informationsdrang gestillt :-P

MfG,
Eugen

MrKnogge 25. Nov 2008 20:46

Re: RSA Public/Private Key
 
Zitat:

Zitat von EugenB
Jetzt habe ich online gesehen man soll Hybride Verfahren nutzen, so ... wie? Asymmetrisch ist ja RSA , Symmetrisch zb Rijindael nun wie bekomme ich diese beiden zusammen zum laufen?

Hybride heißt hier: der Schlüssel für die symmetrische Verschlüsselung wird asymetrisch verschlüsselt.

gammatester 25. Nov 2008 20:55

Re: RSA Public/Private Key
 
Zitat:

Zitat von EugenB
Vorerst letzte Frage: Worauf bezieht sich die Bit-Zahl also "RSA-1024"? es sind 1024 Bit ja 2^1024 , nur von was wird das gemessen? von n oder e? oder beides? oder auf die beiden primzahlen p/q ?

Die Bedeutung der Länge in RSA-n ist (so weit ich weiß) nicht einheitlich. So gibt es RSA-200 (eine Zahl mit 200 Dezimalstellen und mit zwei 100-stellige Primfaktoren, zerlegt im Jahr 2005) und dann noch Zahlen der Längen 704, 768, 1014, 1536 und 2048 Bits, die als RSA-705 ... RSA-2048 bezeichnet werden. Auf jeden Fall ist es die Länge des Moduls n (und die Herausforderung ist es, die Faktorisierung von n zu finden) und nicht e, p oder q. p und q haben (bei Standardverfahren) dann etwa jeweils die halbe Länge. e kann groß sein, wird aber oft als 65537 = 2^16+1 gewählt, das ist günstig für die zeitintensive Berechung der Potenzen, und es werden bestimmte Attacken gegen kleine Exponenten erschwert.

Gruß Gammatester

EugenB 28. Nov 2008 10:12

Re: RSA Public/Private Key
 
Hm versuche mich in MPArith einzuarbeiten und das ist ....

Code:
mp_init3(mp_p, mp_q, ergebnis);

   mp_read_decimal_str(mp_p, pEdit.Text);
   mp_read_decimal_str(mp_q, qEdit.Text);

   mp_mul(mp_p, mp_q, ergebnis);

   nEdit.Text:=mp_decimal(ergebnis);
und dann hat am Ende nEdit.Text = ''

was muss ich da machen? ist bischen kompliziert irgendwie :(

gammatester 28. Nov 2008 13:15

Re: RSA Public/Private Key
 
Zitat:

Zitat von EugenB
Hm versuche mich in MPArith einzuarbeiten und das ist ....

Code:
mp_init3(mp_p, mp_q, ergebnis);

   mp_read_decimal_str(mp_p, pEdit.Text);
   mp_read_decimal_str(mp_q, qEdit.Text);

   mp_mul(mp_p, mp_q, ergebnis);

   nEdit.Text:=mp_decimal(ergebnis);
und dann hat am Ende nEdit.Text = ''

was muss ich da machen? ist bischen kompliziert irgendwie :(

mp_decimal liefert maximal 255 Zeichen (also einen ShortString) wie in der Unit dokumentiert:
Delphi-Quellcode:
function mp_decimal(const a: mp_int): mp_string;
  {-convert to decimal, max 255 digits}
Für mehr als 255 Zeichen nimmst Du
Delphi-Quellcode:
function mp_adecimal(const a: mp_int): ansistring;
  {-convert to decimal ansistring, max 65000 digits}
Das "Komplizierte" resultiert aus der 16-Bit-Kompatibilität, da gibt's u.a. noch keine ansistring etc.


Gruß Gammatester


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:37 Uhr.

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