WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   RSA verschlüsselung (problem mit aufgabe) (http://www.wcm.at/forum/showthread.php?t=96193)

fenster 07.05.2003 09:20

RSA verschlüsselung (problem mit aufgabe)
 
hallo

hab da eine aufgabe die ich lösen soll, weiß aber nicht
wie ich an die sache am besten rann gehen soll

und zwar:

gegeben ist eine rsa verschlüsseung mit n = 119 und e = 5
Ich soll hiermit die nachricht m = 19 verschlüsseln


danach soll ich prüfen welcher der entschlüsselungsschlüssel
6,19 oder 77 bei der entschlüsselung des gerade berechneten
geheimtextes c wieder die Nachricht m = 19 ergibt.

---Parameter--------Wert
______________________________
-------n--------119
-------e--------5
-------d--------6-----19--77



kann mir vielleicht jemand ein par tipps geben
wie ich das prob. lösen könne
oder wie ich an die schache rann gehen soll ??



gruß
fenster

Seidl 07.05.2003 23:06

Es gibt keine bekannte, einfache Möglichkeit D, P, oder Q zu errechnen wenn nur PQ und E (also der öffentliche Schlüssel) bekannt sind.

Fangen wir also mal ganz am Anfang an. Wie funktioniert die RSA-Verschlüsselung:
----------------------------------------------------------------------
- Wähle P und Q als Primzahlen.

- Wähle E so, dass E grösser als 1 aber kleiner als PQ ist, wobei E und (p-1)*(Q-1) relativ prim zueinander sein müssen. (E muss ungerade sein da (P-1)*(Q-1) gerade ist)

- Errechne einen Wert D der die Gleichung (DE-1) mod (P-1)(Q-1) = 0 erfüllt. Das kann man auch DE = 1 (mod (P-1)(Q-1)) schreiben. Das macht man indem man sich eine ganze Zahl X sucht mit der die Gleichung D=(X(P-1)(Q-1)+1)/E wahr ist. Schon hat man einen Wert für D.

- Um etwas zu verschlüsseln setzt man in folgende Gleichung ein wobei T der zu verschlüsselnde Wert und C der Verschlüsselte Wert ist: C=(T^E) mod PQ
(das funktioniert natürlich nur wenn der zu verschlüsselnde Wert T kleiner als PQ ist)

- Um etwas zu entschlüsseln setzt man in diese Gleichung ein: T=(C^D) mod PQ

Der öffentliche Schlüssel ist das Paar (PQ, E). PQ wird übrigens auch oft als N bezeichnet.
Der private Schlüssel ist die Zahl D.
----------------------------------------------------------------------

Wenn man sich das so ansieht heisst es also wohl oder übel probieren. Da wir in diesem konstruierten Fall nur drei mögliche Schlüssel zur Auswahl haben würde ich so vorgehen:

Verschlüsseln
--------------------
C = (T ^ E) mod PQ
C = (19 ^5) mod 119
C = 66

Entschlüsseln:
--------------------
T = (C ^ D) mod PQ
19 = (66 ^ D) mod 119

19 != (66 ^ 6) mod 119
19 != (66 ^ 19) mod 119
19 = (66 ^ 77) mod 119

Der gesuchte, private Schlüssel ist also 77.



Wenn wir keine Schlüssel vorgegeben hätten wäre die Sache schon interessanter. Wir bräuchten dann nämlich P und Q. In unserem Fall ist das noch recht einfach. Ich wollte nicht viel denken und habe deshalb in VBA folgendes produziert:

Public Sub SearchPQ()
Const PQ As Integer = 119
For P = 2 To PQ - 1
If 119 Mod P = 0 Then
Debug.Print P & vbTab & 119 / P
End If
Next
End Sub

Das hat mir meine Primzahlen zu P=7 und Q=17 geliefert.

In den Grundlagen ganz zu Beginn hatten wir folgende Formel:

(DE-1) mod (P-1)(Q-1) = 0

Der Modulo stört mich ein wenig beim Umformen. Also schreiben wir die Sache mal als:

(DE-1) = K * (P-1)(Q-1)

oder auch:

DE = K * (P-1)(Q-1) + 1

bzw. nach D aufgelöst:

D = (K * (P-1)(Q-1) + 1) / E

Um mein Hirn zu schonen muss jetzt wieder VB dran glauben:

Public Sub SearchD()
Const P As Integer = 7
Const Q As Integer = 17
Const E As Integer = 5
Phi = (P - 1) * (Q - 1)
K = 1
Do Until K = Phi Or D >= (Phi - 1)
D = (K * Phi + 1) / 5
If D = CInt(D) Then
Debug.Print D
End If
K = K + 1
Loop
End Sub

Damit bekomme ich jetzt alle möglichen Werte für D. Welcher Wert der richtige ist würden dann wieder Versuche mit ver- und entschlüsseln einer kurzen Nachricht erbringen. In unserem Fall bekomme ich aber nur 77. Weiteres überlegen können wir uns also hier schenken.

Falls du dich für die Details der Mathematik im Hintergrund von RSA interessierst, wirst du im Internet haufenweise Infos finden.
Suche zum Beispiel nach der "totient function". Das dürfte einige Ergebnisse bringen da die Eulersche Totient- bzw. auch Phi-Funktion einer der Grundsteine für die RSA-Verschlüsselung ist.

pong 08.05.2003 07:38

oder auch

Zitat:

Der Algorithmus

Der Algorithmus besteht aus zwei Teilen. Neben dem eigentlichen
Chiffrieralgorithmus ist die Schlüsselerzeugung von großer Wichtigkeit für die Sicherheit des Verfahrens.

Schlüsselerzeugung:

1. Wähle zufällig zwei große Primzahlen p und q.
Die Länge der Zahlen sollte zwischen 384 und 512 Bit liegen.

2. Berechne n = pq (n hat dann eine Länge von 512 bis 1024 Bit).

3. Wähle eine kleine ungerade natürliche Zahl e, die zu
j(n)=(p - 1)(q - 1) relativ prim ist, d.h. es gilt ggT(e,j(n)) = 1

4. Berechne d als Lösung der Gleichung ed = 1 mod j(n).
Es existiert d und ist eindeutig bestimmt. Das d kann berechnet werden mit dem erweiterten Euklidischen Algorithmus.

5. Gib das Paar P = (e, n) bekannt als öffentlichen Schlüssel.

6. Halte das Paar S = (d, n) geheim als geheimen Schlüssel.


Anwendung von RSA:
Verschlüsseln: Die Nachricht M aus Zn wird codiert durch
E(M) = M^e mod n.

Entschlüssseln: Ein Chiffretext C aus Zn wird decodiert durch
D(C) = C^d mod n.

Beispiel mit kleinen Zahlen:
Wir wählen p = 61 und q = 97 und erhalten
n = pq = 5917,
sowie
j(n) = (p - 1)(q - 1) = 60 - 96 = 5760.
Als Wert für e wählen wir 47 (teilerfremd zu 5760) und berechnen mit
dem erweiterten Euklidischen Algorithmus
d = 47^-1 mod 5760 = 1103.
Nun werden p und q vernichtet und (47,1103) als öffentlicher Schlüssel bekannt gegeben. Zur Verschlüsselung der Nachricht
M = 348613407195771184
wird diese in Blöcke zerlegt, so dass jeder Block kleiner als
n = 5917 ist.
Wir wählen als Blocklänge drei Ziffern und schreiben
M = 348 613 407 195 771 184.
Der erste Block wird verschlüsselt:
348^47 mod 5917 = 4479.
Der Chiffretext lautet dann
C = 4479 1333 3931 2523 3725 1038.
Das Entschlüsseln des ersten Blocks ergibt
4479^1103 mod 5917 = 348.
Der RSA-Algorithmus ist korrekt. Die Funktionen E und D sind invers zueinander und es gilt für beliebiges M aus Zn:
D(E(M)) = E(D(M)) = M.
pong

fenster 08.05.2003 16:09

weiter info dazu
 
hallo

habe da noch weitere info zu diesem thema



http://berg.heim.at/anden/421355/rsa_info.gif

gruß
fenster


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag