RSA Verschlüsselung - Inverse??

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Megamag

Betreff: RSA Verschlüsselung - Inverse??

BeitragMo, Jun 06, 2011 23:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Wir sollen für die Schule eine RSA-Verschlüsselung programmieren. Ich gehe dabei nach diesem Wikipedia Artikel vor. Soo kompliziert ist die Verschlüsselung ja nicht, aber es gibt da einen Part, durch den ich irgendwie überhaupt nicht durchsteige: Und zwar muss man zu e eine Inverse berechnen. Und da ich mit meinem derzeitigen Mathe-Wissen nichts über Inversen weiß, kann ich mit den ganzen komplizierten Formeln irgendwie nichts anfangen. Kann mir einer von euch vielleicht kurz verständlich erklären, was eine Inverse ist und wie man sie bildet? Vielen Dank!

Der Code hier ist erstmal nur testweise mit den Zahlen aus dem Wiki-Artikel:
BlitzBasic: [AUSKLAPPEN]
AppTitle "RSA - Verschlüsselung"
Graphics3D 800,600,32,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()
timer = CreateTimer(60)

Local p = 11
Local q = 13

;RSA-Modul
Local N = p*q

;Eulersche Funktion
Local eN = (p-1)*(q-1)

;e teilerfremd zu eN
Local e = 23

;Inverse
;??

DebugLog N
DebugLog eN
Stop

While Not KeyHit(1)


WaitTimer(timer)
Flip 0
Wend
End
Mein DeviantArt Profil
Gewinner des BAC #136

Der Eisvogel

BeitragDi, Jun 07, 2011 0:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

Ich hab mich letztens auch damit beschäftigt. Hier der Thread dazu. Ganz unten ist meine Code wie er funktioniert hatte. Ich hoffe das hilft dir. Bei Fragen frag. Wink

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Megamag

BeitragDi, Jun 07, 2011 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich krieg den Kram echt nicht hin. Nach sehr langem ausprobieren und immer wieder scheitern habe ich letzendlich aus Frust deinen Code wortwörtlich kopiert, aber nichtmal das funktioniert:
BlitzBasic: [AUSKLAPPEN]
AppTitle "RSA - Verschlüsselung"
Graphics3D 800,600,32,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()
timer = CreateTimer(60)

Local p = 307
Local q = 859

;RSA-Modul
Local N = p*q

;Eulersche Funktion
Local eN = (p-1)*(q-1)

;e teilerfremd zu eN
Repeat
e = Rand(2, eN - 1)
Until ggT(e, eN) = 1

;Inverse
Local d = Inverse(e, eN)
d = (d + eN) Mod eN

;Text
;txt$ = "Hallo Welt"
;Local K$
;Dim newtxt(Len(txt))
;
;For i=1 To Len(txt)
; newtxt(i) = Asc(Mid(txt,i,1))
; K = K + Str(newtxt(i))
;Next
;
;DebugLog "Text in ASCII: "+K

DebugLog "N: "+N
DebugLog "eN: "+eN
DebugLog "d: "+d
DebugLog "Verschlüsselung: "+CryptRSA(26, e, N)
DebugLog "Entschlüsselung: "+DecryptRSA(CryptRSA(26, e, N), d, N)
Stop

While Not KeyHit(1)


WaitTimer(timer)
Flip 0
Wend
End

Function Inverse(a, b)
Local g, u, v
Local q, r, s, t

u = 1 : t = 1
v = 0 : s = 0

While (b > 0)
q = Ceil(a / b)
r = a - q * b : a = b : b = r
r = u - q * s : u = s : s = r
r = v - q * t : v = t : t = r
Wend
g = a

Return u
End Function

Function CryptRSA(K, e, N)
Local C = expmod(K, e, N) ;K ^ e Mod N
Return C
End Function

Function DecryptRSA(C, d, N)
Local K = expmod(C, d, N) ;C ^ d Mod N
Return K
End Function

Function expmod(number, e, N)
Local x = e Mod N
Local y = number Mod N

Local accum = 1
While x > 0
If (x Mod 2) = 1 Then
accum = (accum * y) Mod N
EndIf

y = (y * y) Mod N
x = Ceil(x / 2)
Wend

Return accum
End Function

Function ggT(a, b)
Repeat
Local m = b
b = a Mod b
a = m
Until b = 0
Return a
End Function


Ich möchte ganz einfach nur "26" verschlüsseln und wieder entschlüsseln, aber es kommen dabei nur willkürliche Zahlen raus. Wenn ich die Primzahlen kleiner wähle, dann geht es. Mit "11" und "17" z.B. ist alles gut. Aber was nützt mir das? Man muss ja jede Primzahl verwenden können, und mit den kleinen Primzahlen kann ich keine großen Zahlen verschlüsseln (frag mich nicht wieso, aber irgendwie geht es nicht). Eine Frechheit eigentlich, uns so eine Aufgabe zu stellen, obwohl wir diesen ganzen Mathematik-Krams noch nie im Unterricht gelernt haben...
Mein DeviantArt Profil
Gewinner des BAC #136

Der Eisvogel

BeitragDi, Jun 07, 2011 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube in dem Falle liegt es dann doch daran, das B3D nicht mit so großen Zahlen arbeiten kann. Die Generierung der Schlüssel klappt auf jeden Fall. Jedoch denke ich, dass das Problem bei expmod liegt welches zu große Zahlen verarbeiten muss und an die Grenzen von B3D stößt. Deshalb hatte ich in BM Long verwendet um diesem Fehler aus dem Weg zu gehen. Am besten wäre es denke ich in dem Fall einen String-Rechner ran zu lassen. Das wird auf größere Datenmengen zwar langsamer, aber ich sehe für B3D im Moment keinen anderen Weg.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group