RSA-Kryptosystem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
brauny94
User
Beiträge: 8
Registriert: Donnerstag 20. Oktober 2011, 16:53

Hallo, ich brauche dringend Hilfe!!!

seit einiger Zeit arbeite ich an der Implementierung des RSA-Kryptosystems, da ich trotz einiger Tutorials immernoch aufgeschmissen war, habe ich versucht, einen bereits in Java implementierten Code ins Python-Format umzuschreiben. Leider hatte ich damit keinen wirklichen Erfolg und bin jetzt eher noch ratloser als vorher.
Ich muss dazusagen, dass ich mich zwar in den Grundzügen mit Python auskenne, aber sobald es an speziellere Methoden geht bin ich schnell überfordert (die komplexität des RSA-Verfahrens war mir anfangs nicht so ganz klar :| )

Theoretisch, also mathematisch, habe ich RSA verstanden, aber ich habe keinen Plan, wie ich das in Python umsetzen könnte!

Ich wäre für jede Hilfe dankbar, mit der auch ein nicht so versierter Python-Nutzer umgehen kann!

Danke schonmal für die (hoffentlich baldigen) Antworten
Zuletzt geändert von brauny94 am Donnerstag 20. Oktober 2011, 17:28, insgesamt 1-mal geändert.
T64
User
Beiträge: 16
Registriert: Dienstag 18. Oktober 2011, 16:36

Falls es dir nicht um den Weg, sondern das Ziel geht, könntest du dir dieses Modul angucken:
http://stuvel.eu/rsa
lunar

@brauny94: Die übliche Antwort: Zeige uns, wie weit Du bist und welchen Quelltext Du bis jetzt hast, und wir werden Dir dabei helfen, Fehler zu finden und zu korrigieren. Wir werden Dir aber nicht Deine Aufgaben für Dich lösen.

Falls Du RSA nur anwenden möchtest, dann implementiere RSA nicht selbst, sondern nutze pycrypto. Eine eigene Implementierung ist fehleranfällig und mithin unsicherer als eine bereits von vielen getestete Implementierung. Zudem ist eine reine Python-Implementierung wahrscheinlich zu langsam für den produktiven Einsatz.
brauny94
User
Beiträge: 8
Registriert: Donnerstag 20. Oktober 2011, 16:53

Vielen Dank!!,
ich werde mir das mal genauer ansehen!
Dennoch wäre ich für weitere Hilfe bezüglich der Implementierung sehr dankbar!!
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Dazu brauchen wir deinen Code...
the more they change the more they stay the same
brauny94
User
Beiträge: 8
Registriert: Donnerstag 20. Oktober 2011, 16:53

@lunar
ich würde den Code gerne einfügen, aber leider muss ich zum öffnen von Aptana (da Programm, das ich verwende) erst eine neue Java-Version downloaden, und da ich auf dem Land wohne ist unsere Internetverbindung seehr langsam; ich werde den Code so bald wie möglich nachreichen!
lunar

@brauny94: Du kannst den Quelltext doch einfach in einem anderen Editor öffnen?! Für Windows kannst Du beispielsweise notepad++ verwenden, dessen Minimalversion ist zum Download weniger als ein Megabyte groß.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

lunar hat geschrieben:@brauny94: Du kannst den Quelltext doch einfach in einem anderen Editor öffnen?! Für Windows kannst Du beispielsweise notepad++ verwenden, dessen Minimalversion ist zum Download weniger als ein Megabyte groß.
Kommt Windows nicht mehr selbst mit Notepad? Zum kopieren sollte das gerade noch reichen.
brauny94
User
Beiträge: 8
Registriert: Donnerstag 20. Oktober 2011, 16:53

Code: Alles auswählen

p = input("p")
q = input("q")

def Keys (p, q):
    m = p * q
    phi = (p-1)*(q-1)
    
def publicKey (phi):
    akT = 0
    e   = 2
    
    while akT != 1:
        e = e + 1
        akT = int(ggT(e, phi))
    return e
def ggT (a, b):
    x = a
    y = b
    while x < y or x > y:
        if x-y < 0:
            x = x + a
        else:
            y = y + b
    return a*b/x

def SecretKey (e, phi):
    i = 0
    i = i + 1
    while (i*phi + 1)%e !=0:
        return (i*phi + 1)/e
    
# print ("public Key: " + e + m)
# print ("secret Key: " + (i*phi + 1)/e)
Klartext = input("Klartext: ")

def RSA_Crypt (basis, exponent, modulus):
    sum = 0
    mask = 1
    ergebnis = 1
    
    while (sum < exponent):
        if ((exponent&mask) != 0):
            ergebnis = (ergebnis*basis) % modulus
            sum = sum + (exponent&mask)
        basis = (basis*basis) % modulus
        mask = mask << 1
    return ergebnis

def RSA_encode (Klartext):
    Chiffre = ""
    while ((Klartext.length % Math.floor((M-1)/8)) != 0):
        Klartext = Klartext + " "
        
    for (i=0; i < Klartext.length; i++):
        tmp = Klartext.charCodeAt(i)
        j = 1
        while (((j+1)*8) < BlkLen):
            tmp = tmp << 8
            tmp = tmp + Klartext.charCodeAt(i+j)
            j++
        if (j > 0) i = i + (j-1)
        Chiffre = Chiffre  + " " + String(RSA_crypt(parseInt(tmp), e, m))
    return Chiffre

So, ich bin mir bewusst, dass in diesem Code massenhaft Fehler sind, aber wenn ich wissen würde wie ich es richtig machen soll, würde ich hier nicht um Hilfe bitten!

Was mir warscheinlich sehr helfen würde, ist ein Quellcode einer RSA-Verschlüsselung, an dem ich mich orientieren kann.
Mein Ziel ist nicht eine optimale, elegante oder schnelle RSA-Verschlüsselung, sondern einigermaßen funktionieren soll sie, um das grundsätzliche Verfahren asymmetrischer Kryptosysteme zu veranschaulichen!
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wo hast Du das denn her? Hast Du das selber programmiert? Wenn nein, dann mach Dich lieber selber ans Werk, wenn ja: Wie kommt es zu so langem Code, der noch (offensichtliche) Fehler enthält?

Wo genau liegen denn jetzt Deine Probleme? Du solltest da imho schon präziser formulieren, wo es noch hapert oder wo Funktionalität fehlt. Ggf. anhand eines Datensatzbeispiels?

Bei so langem Code würde ich vorschlagen, den in ein Paste-Bin auszulagern, etwas paste.pocoo.org.

Zudem bietet dieses Forum spezielle Code-Tags für Pythonprogramme. Damit gäbe es ein hübsches Syntaxhighlighting.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
lunar

@brauny94: "for (i=0; i < Klartext.length; i++):"?! "while (i*phi + 1)%e !=0: return (i*phi + 1)/e"?! Der Quelltext entbehrt ja bereits syntaktischer und semantischer Korrektheit, über die eigentliche Logik des RSA-Verfahren braucht man in diesem Stadium noch gar nicht nachdenken.

Mit Verlaub, beherrscht Du überhaupt die Grundlagen von Python?
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

@lunar, das ist cython!!!
the more they change the more they stay the same
BlackJack

@Dav1d: Hast Du da vielleicht einen Smiley vergessen? Das ist kein Cython, das sieht nach Java aus.
sabram
User
Beiträge: 28
Registriert: Mittwoch 5. Januar 2011, 13:42

brauny94 hat geschrieben: [...]habe ich versucht, einen bereits in Java implementierten Code ins Python-Format umzuschreiben. [...]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

sabram hat geschrieben:
brauny94 hat geschrieben: [...]habe ich versucht, einen bereits in Java implementierten Code ins Python-Format umzuschreiben. [...]
Tja, versucht trifft es hier ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Mir hat damals die Geschichte "Dialog der Schwestern" aus der Ct da sehr weitergeholfen für das Verständnis von RSA.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
T64
User
Beiträge: 16
Registriert: Dienstag 18. Oktober 2011, 16:36

Ich habe mir gerade mal die Geschichte durchgelesen und bin ganz fasziniert davon.
Aber warum braucht man ein Nebenmodul, kann man nicht einfach, ich sage jetzt mal in Python Fachsprache, ein dict mit dem Alphabet und den zugehörigen Resten bei der Division mit einem bestimmten Schlüssel erstellen und dann den Rest bei einer Division eier gegebenen Zahl damit vergleichen?
brauny94
User
Beiträge: 8
Registriert: Donnerstag 20. Oktober 2011, 16:53

Wie gesagt ist mir durchaus bewusst dass mein Quelltext, gelinde gesagt, falsch ist.
Aber ich, offensichtlich kein python-experte, war zugegebenermaßen überfordert ohne Anhaltspunkte oder Hilfen selbst RSA zu programmieren. Die einzige Hilfe die ich hatte war der Java-code, sonst konnte ich weder im Internet oder in Büchern Hilfen finden. Also musste ich versuchen, mit nur dem java-code und nur den grundkenntnissen von Python etwas so komplexes und (meiner Meinung nach) schwieriges zu implementieren wie RSA.

Wirklich weiterhelfen würde mir, wie gesagt, ein fertiger RSA-quellcode, an dem ich mich orientieren kann und versuchen anhand dessen die Funktionsweise von rsa zu erläutern, denn darum geht es mit im grunde, ich möchte die funktionsweise und die mathematik dahinter erklären, aber dazu brauche ich eben einen quellcode, den zu programmieren ich selbst offensichtlich nicht in der lage bin!

Wenn mir also irgendjemand mit einem rsa-code weiterhelfen kann, dann wäre ich ihm sehr zu dank verpflichtet (der rsa-code muss keineswegs perfekt sein!)
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Ich denke dir würde mehr helfen, wenn du erstmal die Grundlagen von Python lernst. RSA hat ja an sich nichts mit Python zu tun, d.h. wenn du Python beherrscht sollte es dir auch möglich sein den Algo zu implementieren.
the more they change the more they stay the same
lunar

@brauny94: Dir wurde doch bereits in ersten Antwort ein Link zu einem in Python implementierten RSA-Modul gegeben. Wenn Du nur fertigen Quelltext möchtest, wieso nimmst Du dann nicht einfach das? Wenn Du RSA nur anhand von Quelltext erklären möchtest, reicht dann nicht auch der Java-Quelltext? Für die Mathematik hinter RSA braucht es doch eigentlich überhaupt gar keinen Quelltext.
Antworten