Implementierung von RSA

Webdesign, Programmierung, PC-Hardware und allgemeine Computerprobleme.

Moderatoren: MaxZ, ebastler, SeriousD

Antworten
Benutzeravatar

Thread-Ersteller
ferrum
Beiträge: 713
Registriert: Sa 11. Mai 2013, 15:31
Spezialgebiet: Kaffee
Wohnort: Bayern
Hat sich bedankt: 15 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Implementierung von RSA

Beitrag von ferrum »

Servus Miteinander,
ich möchte euch hier ein kleines Computerprogramm vorstellen welches Ich im Rahmen meiner Seminararbeit Geschaffen habe. Thema der Arbeit war Implementierung von RSA. Warum möchte ich euch das vorstellen? Nun, das Programm funktioniert zu meiner Zufriedenheit, entspricht halbwegs den Anforderungen des BSI und vor allem möchte ich keine Software Schreiben nur damit der Lehrer sie als einziger Mensch der Welt einmal ausprobiert. Außerdem möchte ich denjenigen die noch eine Seminararbeit in Mathematik/Informatik schreiben zeigen dass falls ein Programm implementiert wird nicht immer die Mainstream Thematiken wie ENIGMA Cäsar oder Vinegre behandelt werden müssen. So nun zum Programm selbst es war insbesondere mein Ziel nicht auf vorgefertigte Bibliotheken zurückzugreifen sondern das Programm von Grund auf selber zu gestalten obwohl dadurch natürlich eine massiv höhere Laufzeit entsteht. Deswegen habe ich sämtliche Mathematischen Operationen selbst Implementiert. Das Programm besitzt 3 Funktionen
1.) Schlüsselerzeugung
Diese Funktion wird durch den Modus K aufgerufen.
Die Datei N bezeichnet das Primfaktorprodukt des Schlüssels.
Die Datei d bezeichnet den privaten Entschlüsselungsexponenten.
Die Datei e bezeichnet den öffentlichen Verschlüsselungsexponenten.
Die Schlüssellänge wird hier in Vierfachen Bytes Angegeben 1 ^= 32Bit.
Die Schlüssellänge wird vom Programm zufällig zwischen der Minimalen und Maximalen Länge Ausgewählt.
Nun muss man 2 mal hintereinander irgendwas zufälliges auf der Tastatur eingeben bis das Programm mit der Schlüsselerzeugung beginnt.
Zum Schluss werden in dem Ordner von dem das Programm gestartet wurde der Schlüssel N d und e abgelegt.
2.) Verschlüsselung
Zum verschlüsseln muss man ein bereits erzeugtes e und N angeben welche im Ordner liegen von dem aus das Programm gestartet wird des weiteren muss man die Datei angeben welche Verschlüsselt werden soll diese muss ebenfalls an dem selben Ort liegen.
3.) Entschlüsselung
Zum entschlüsseln muss man ein bereits erzeugtes d und N angeben welche im Ordner liegen von dem aus das Programm gestartet wird des weiteren muss man die Datei angeben welche Entschlüsselt werden soll diese muss ebenfalls an dem selben Ort liegen.

Ich würde es schon finden wenn ich ein bisschen Feedback erhalten würde. Bitte nicht über Rechtschreibfehler im Code wundern. In der Zipdatei ist der Quellcode falls mir jemand nicht traut und selber Compilieren will andernfalls ist die Anwendung noch für Linux Compiliert drinnen. Anwendung startet nur direkt aus der Konsole.
Dateianhänge
RSA.7z
Programm und Code
(23.46 KiB) 140-mal heruntergeladen
KAFFEE SCHWARZ
Benutzeravatar

Thread-Ersteller
ferrum
Beiträge: 713
Registriert: Sa 11. Mai 2013, 15:31
Spezialgebiet: Kaffee
Wohnort: Bayern
Hat sich bedankt: 15 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Re: Implementierung von RSA

Beitrag von ferrum »

Wenn mir jemand was schicken will hier mein Öffentlicher Schlüssel
Dateianhänge
Schlüssel.7z
Schlüssel
(357 Bytes) 139-mal heruntergeladen
KAFFEE SCHWARZ
Benutzeravatar

DanielS
Beiträge: 430
Registriert: Sa 17. Jan 2015, 10:55
Schule/Uni/Arbeit: Physikstudium
Wohnort: Bernbeuren
Hat sich bedankt: 132 Mal
Danksagung erhalten: 9 Mal

Re: Implementierung von RSA

Beitrag von DanielS »

Hallo
Ich kann das ganze nicht ausführen, aber ich finde das Projekt (soweit ich den Quellcode verstehe) sehr gelungen.
Hoffentlich bekommst du 15 Punkte.
Gruß Daniel

Manawyrm
Beiträge: 621
Registriert: Fr 18. Dez 2009, 22:18
Spezialgebiet: MCUs, HF, IT
Hat sich bedankt: 5 Mal
Danksagung erhalten: 5 Mal
Kontaktdaten:

Re: Implementierung von RSA

Beitrag von Manawyrm »

Hallo ferrum,

dein C-Code ist ... nunja, mehr als gewöhnungsbedürftig ;)

Code: Alles auswählen

if((((*Exponent).zahl[i]&(0x1<<b))>>(b))==1)

Code: Alles auswählen

    table =malloc(2*sizeof(PSTR));
    (table[0]).s=malloc(sizeof(SIGNEDBIGNUMBER));
    (*(table[0]).s).num=malloc(sizeof(BIGNUMBER));
    (*(*(table[0]).s).num).zahl=malloc(sizeof(BYTES));
    (*(*(table[0]).s).num).zahl[0]=0x1;
    (*(*(table[0]).s).num).length=1;
und ähnliche Konstrukte *hihi*
Gleiches gilt auch für die Implementation des Square-and-Multiply Algos... ;)
Du speicherst Quelltext in Header-Dateien (RSA.h usw.), das ist auch eher so gewöhnungsbedürftig :P
Und Crypt und Encrypt sind das gleiche.. Encrypt und Decrypt oder so wären vielleicht besser gewesen.
Dein system("sleep 15") auch eher so :censer:
EDIT: Und ähhm. key=CreateKey(max,min,stdout,stdin); Einer externen Funktion die stdout/stdin Streams zu übergeben ist auch eher seltsam :D

Anyway: Hier mal eine "geheime" Nachricht:

Code: Alles auswählen

fKoE/NPMhqcEgULnTq6nqV9UxEV6R9l3qmPQo1Xf6bffzDiVu49HNl1xRYRJ0FnYn/o6ksAjFVtZ
iy9hleLILVmDEeIumHq6uvDzuFjeKzSdYJrMF5gcYXt6Fbh1hDcP5Mi90Pi4BMMSR4dVxLwmhlsy
fI3F/aJyuJC4Hh52i5ZMWwzmF1Ow994ITDJk5tpn+j41FkUaMIufPWkmorhObSwt6OBaGTjk+OA1
kZ8IpiKQKD6dzNF3C9yf2wi/sdMa
Base64't für den Transportweg ;)

Viele Grüße,
Manawyrm
Antworten