www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Mathe-Software" - RSA-Verschlüsselung im Maple
RSA-Verschlüsselung im Maple < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Mathe-Software"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

RSA-Verschlüsselung im Maple: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 22:15 So 03.12.2006
Autor: epsilon1

Aufgabe
Erzeugen Sie zwei große Primzahlen. Schreiben Sie eine Prozedur verschluesseln und eine Prozedur entschluesseln, die mit der Hilfe der oben erzeugeten Primzahlen die RSA-Ver/Ent-Schlüsselung durchführt.

Hi.

Die Primzahlen konnte ich noch erzeugen. Ich habe einfach gesagt


---

> Z = 100000000000000000;
> p := nextprime(Z);
> q := nextprime(p);

----

Nur jetzt weiß ich überhaupt nicht mehr weiter und hoffe, dass mir jemand einen Tipp geben kann, wie ich überhaupt anfangen muss.
Danke!!

        
Bezug
RSA-Verschlüsselung im Maple: Antwort
Status: (Antwort) fertig Status 
Datum: 01:29 Mo 04.12.2006
Autor: Martin243

Hallo,

ich mache das mal kurz, die Theorie dahinter müsstest du ja kennen. Mein Vorschlag wäre:

p := nextprime(rand());
q := nextprime(rand());
n := p*q;
e := nextprime((p-1)*(q-1)); #public key, muss prim sein zu (p-1)*(q-1)
d := LinearAlgebra[Modular][Inverse]((p-1)*(q-1),<<e>>)[1,1];
verschl := x -> x&^e mod n;
entschl := x -> x&^d mod n;

Eine mögliche Anwendung könnte so aussehen:
klartext := "Hallihallo"; 
klarbytes := convert(klartext, 'bytes');
geheimbytes := map(verschl, klarbytes);
klarbytes2 := map(entschl, geheimbytes);
klartext2 := convert(klarbytes2, 'bytes');


Am Ende sollte in klartext2 dasselbe stehen wie in klartext.


Gruß
Martin

Bezug
                
Bezug
RSA-Verschlüsselung im Maple: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 07:02 Mo 04.12.2006
Autor: epsilon1

Hallo.

Ich habe das jetzt mal versucht zu machen und bin im Internet auf eine Homepage gestoßen, welche das Prinzip erklären in Maple.

Nun wollte ich dich nochmal fragen, ob ich das so jetzt richtig gemacht habe bzw. warum funktioniert das eigentlich so?

Wie kann ich das ganze jetzt auf Buchstaben anwenden? Zur Zeit geht das ja nur mit Zahlen...



zahl := 123456789123456789;
                      zahl := 123456789123456789

>
> p := nextprime(zahl);

                       p := 123456789123456823

> q := nextprime(p);

                       q := 123456789123456889

>
> n := p * q;

               n := 15241578780673695058832363293403647

>
> m := (p - 1) * (q - 1);

               m := 15241578780673694811918785046489936

>
> e := 7;

                                e := 7

>
>
> ifactor(m);

      4     5      2
   (2)   (3)   (11)   (47)  (59)  (3366776419)  (6245934377)

         (555593)

>
>
> d := e^(-1) mod m;

               d := 8709473588956397035382162883708535

>
> message:=1234;

                           message := 1234

>
> code:=Power(message,e) mod n; #message kodieren

                    code := 4357186184021382204544

>
>
> decode:=Power(code,d) mod n; #und wieder dekodieren

                            decode := 1234

>


Bezug
                        
Bezug
RSA-Verschlüsselung im Maple: Antwort
Status: (Antwort) fertig Status 
Datum: 08:22 Mo 04.12.2006
Autor: Martin243

Hmmm, steht alles in meinem Beitrag...

Das Umwandeln von Text nach Zahlenliste und umgekehrt geht per convert.
Das Anwenden einer Funktion auf eine ganze Liste geht per map.

> ifactor(m);

Was willst du damit?


Warum das so funktioniert? Das steckt etwas Theorie dahinter und ich dachte, die müsstest du eigentlich kennen. Oder geht es dir um die Maple-Funktionen?


Gruß
Martin

Bezug
                                
Bezug
RSA-Verschlüsselung im Maple: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 08:53 Mo 04.12.2006
Autor: epsilon1

Hi Martin,

danke für deine Nachricht. Ist es dann so, dass ich das was ich jetzt code und decode genannt habe in einer Prozedur speichern muss und dann bei map der erste Punkte diese Prozedur dann ist?

Wie kann ich das denn in einer Prozedure umsetzen? Du weisst doch, dass ich mich bei den Prozeduren noch sehr schwer tue...

Danke!

Bezug
                                        
Bezug
RSA-Verschlüsselung im Maple: Antwort
Status: (Antwort) fertig Status 
Datum: 09:01 Mo 04.12.2006
Autor: Martin243

Hallo,

eine Prozedur wäre vielleicht etwas zuviel Aufwand. Man kann es auch einfacher haben:
Schreib code und decode in Funktionen um wie ich oben verschl und entschl.
Dann schreibst du zwei Funktionen codeAll und decodeAll, die Folgendes machen:
codeAll konvertiert per convert (s. mein Beitrag) einen String in eine Liste von Zahlen um und wendet darauf per map die Funktion code an.
decodeAll wendet per map die Funktion decode auf die Liste der Zahlen an und konvertiert dann per convert die erhaltene Lsite von Zahlen in einen String.

Schon kannst du Strings kodieren und dekodieren.


Gruß
Martin

Bezug
                                                
Bezug
RSA-Verschlüsselung im Maple: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 09:07 Mo 04.12.2006
Autor: epsilon1

Hi Martin,

danke. Doch irgendwie wird mir nicht klar, wie ich das machen soll. Ich habe das ganze jetzt zunächst mal so geschrieben:

>
> code := proc ( a , b , n ) local verschluesselt;
>  verschluesselt := Power(a , b) mod n;
> end;
>
>
> decode := proc ( a , b, n ) local entschluesselt;
>  entschluesselt := Power(a , b) mod n;
> end;
>


und wenn ich das mit meinem Zahlenbeispiele mache, dann funktioniert das ganze auch.

Wäre super, wenn du mir nochmal auf die Sprünge helfen könntest.

Bezug
                                                        
Bezug
RSA-Verschlüsselung im Maple: Antwort
Status: (Antwort) fertig Status 
Datum: 09:26 Mo 04.12.2006
Autor: Martin243

Hallo,

bitte probier doch mal die Funktionen convert und map auf einfachen Beispielen aus. Und lass das mit den Prozeduren, es geht einfacher.

Eine Funktion kannst du erzeugen mit
f := x -> x^2;

Eine Funktion, die eine Zahl verschlüsselt, wäre nach deinem Programmcode:
codeSingleNum := a -> Power(a , b) mod n;

Eine Funktion, die eine andere Funktion auf eine ganze Liste von Zahlen anwendet, ist map, also:
codeAllNum := liste -> map(codeSingleNum, liste);

Jetzt musst du nur noch vorher die Liste aus einem String erzeugen, was eben mit convert geht. Also:
codeString := klartext -> map(codeSingleNum, convert(klartext, 'bytes'));


Ähnlich geht das Dekodieren, nur dass man hier zuerst rechnet und erst dann konvertiert. Bitte beschäftige dich damit, probier es aus.


Gruß
Martin

Bezug
                                                                
Bezug
RSA-Verschlüsselung im Maple: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 09:37 Mo 04.12.2006
Autor: epsilon1

Irgendwie will das alles nicht so richtig wie ich das möchte.
Außerdem finde ich das schon toll, dass ich das für Zahlen schon einmal hinbekommen habe.

Das mit dem String aus deinem Post läuft aber nicht, er meinte immer n muss eine ganze zahl sein. Das ist sie aber...

Bezug
                                                                        
Bezug
RSA-Verschlüsselung im Maple: Antwort
Status: (Antwort) fertig Status 
Datum: 09:43 Mo 04.12.2006
Autor: Martin243

Ach, es muss natürlich
codeSingleNum := a -> Power(a , e) mod n; 
heißen!

Es ist ja gut, dass du es für eine Zahl hinbekommen hast, aber ob du es mit einer Prozedur oder mit einer Funktion machst, ist jetzt egal. Es geht in erster Linie darum, es auf eine Liste von Zahlen (per map) zu erweitern und vorher natürlich die Liste aus einem String (per convert) zu erzeugen.
Mach es ruhig mit einer Prozedur, aber dann musst du dir vorher überlegen, was du ihr überhaupt übergeben willst.


Gruß
Martin

Bezug
                                                                                
Bezug
RSA-Verschlüsselung im Maple: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 09:54 Mo 04.12.2006
Autor: epsilon1

Hi.

Das kodieren funktioniert nun, nun hänge ich am Dekodieren. Kannst du mir da noch mal kurz auf die Sprünge helfen?

Wäre echt super.

Wie kann ich denn aus binary wieder einen string machen, zum Beispiel. Wie rechne nich mit dem codeString.

Hilfe...

Bezug
                                                                                        
Bezug
RSA-Verschlüsselung im Maple: Antwort
Status: (Antwort) fertig Status 
Datum: 10:00 Mo 04.12.2006
Autor: Martin243

Hallo,

das Dekodieren einer Liste von Zahlen funkioniert genauso wie das Kodieren, nur ersetzt man hier e durch d.
Das Konvertieren von Liste nach String funktioniert haargenau wie das Konvertieren von String nach Liste.

Also: Zuerst dekodieren, dann konvertieren.
Es steht übrigens alles in meinem ersten Beitrag, es lässt sich sogar recht simpel in deinen Code einfügen.


Gruß
Martin

Bezug
                                                                                                
Bezug
RSA-Verschlüsselung im Maple: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 10:47 Mo 04.12.2006
Autor: epsilon1

Hi.

Ich habe mich nochmal rangesetzt und habe nun insgesamt das folgende:


>
>
> codeSingleNum := a -> Power(a , e) mod n;

               codeSingleNum := a -> Power(a, e) mod n

>
> codeAllNum := liste -> map(codeSingleNum, liste);

           codeAllNum := liste -> map(codeSingleNum, liste)

>
> codeString := klartext -> map(codeSingleNum, convert(klartext, 'bytes'));

  codeString :=

        klartext -> map(codeSingleNum, convert(klartext, 'bytes'))

>
>
> decodeSingleNum := a -> Power(a , d) mod n;

              decodeSingleNum := a -> Power(a, d) mod n

>
> decodeAllNum := liste -> map(decodeSingleNum, liste);

         decodeAllNum := liste -> map(decodeSingleNum, liste)

>
> decodeString := codetext -> map(decodeSingleNum, convert(codetext, 'string'));

  decodeString :=

        codetext -> map(decodeSingleNum, convert(codetext, 'string'))

>
>
> m := "Hallo";

                             m := "Hallo"

>
> code1 := codeString(m);

  code := [10030613004288, 80798284478113, 171382426877952,

        171382426877952, 207616015289871]

> decodeString(code1);

Error, (in mod/Expand) polynomial over a finite field expected


Warum erhalte ich beim Decodieren eine Fehlermeldung?

Bezug
                                                                                                        
Bezug
RSA-Verschlüsselung im Maple: Antwort
Status: (Antwort) fertig Status 
Datum: 10:52 Mo 04.12.2006
Autor: Martin243

Hallo,

beachte die Reihenfolge:

> Also: Zuerst dekodieren, dann konvertieren.

Das ist anders als bei Kodieren, denn du entschlüsselst zuerst die Zahlen und wandelst dann in eine andere Darstellung um.
Übrigens muss es immer noch 'bytes' heißen und nicht 'string'.


Gruß
Martin

Bezug
                                                                                                                
Bezug
RSA-Verschlüsselung im Maple: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 10:56 Mo 04.12.2006
Autor: epsilon1

Aber ich mache doch zuerst DecodeSingelNum und Konvertiere dann....

Wie soll ich das denn umdrehen ....

Bezug
                                                                                                                        
Bezug
RSA-Verschlüsselung im Maple: Antwort
Status: (Antwort) fertig Status 
Datum: 11:01 Mo 04.12.2006
Autor: Martin243

Nein,

du machst es genau falsch herum. Du wendest zuerst convert auf deine Liste an und dann erst map auf das Ergebnis an. Es geht nicht um die Reihenfolge in der Schreibweise sondern um die Reihenfolge der Ausführung, also, was die innere (zuerst ausgeführte) und was die äußere Funktion sind. Du musst also map und convert geschickt vertauschen, so dass zuerst dekodiert wird und das Dekodierte dann von einer umschließenden Funktion in einen String umgewandelt wird.


Gruß
Martin

Bezug
                                                                                                                                
Bezug
RSA-Verschlüsselung im Maple: Es geht!
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 11:05 Mo 04.12.2006
Autor: epsilon1

Danke!!!

Es geht!!!! Mit der Hilfe dieser kleinen Zeile:

decodeString := codetext -> convert( map (decodeSingleNum, codetext), 'bytes');


Vielen, vielen Dank!

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Mathe-Software"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorhilfe.de