Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

shadowstrike

Frischling

  • »shadowstrike« ist der Autor dieses Themas

Beiträge: 24

Wohnort: Wiesbaden

Beruf: Schüler

  • Private Nachricht senden

1

27.10.2011, 12:38

Fehler bei der Berechnung des privaten Schlüssels für RSA

Tach,

habe da folgendes Problem:

ich versuche grad, n eigenes verschlüsselungssystem zu entwickeln. da allerdings gerade über das internet das problem des schlüsseltauschs besteht, hab ich mich entschlossen, den schlüsseltausch per RSA vorzunehmen. ich hab mir also RSA angeguckt und habe nun folgendes problem: der private schlüssel d ist das multiplikativ inverse zu e und der eulerschen φ-Funktion zu p und q. φ(p,q) und e sind teilerfremd und e muss kleiner als φ(p, q) sein, laut wikipedia gibt es für die wahl von e jedoch keine weiteren vorgaben. also macht man sich mit dem erweiterten euklidischen algorithmus daran, das multiplikativ inverse zu finden. damit wird folgende gleichung entwickelt: 1 = e * d + k * φ(p, q). d ist dann der private schlüssel. allerdings komme ich bei meinen testweisen versuchen, mit beliebigen zahlen d zu berechnen allerdings fast immer auf eine negative zahl, was eigentlich nicht passieren darf und womit der RSA algo nicht umgehn kann und auch nich soll. vlt mach ich einfach einen rechenfehler, aber ich glaube egt nicht. ich zeig euch mal ne beispiel rechnung:

Quellcode

1
2
3
4
5
6
p = 13 q = 23
N = p * q = 13 * 23 =299
φ(299)=(p-1)(q-1)=12*22=264
e = 37

1=e*d+k*φ(N)=37*d+k*264

Als nächstes muss der größte gemeinsame teiler berechnet werden:

Quellcode

1
2
3
4
264 = 7 * 37 + 5
37 = 7 * 5 + 2
5 = 2 * 2 + 1
2 = 2 * 1 + 0

Jetzt setze ich die gleichungen wieder rekursiv ineinander ein und erhalte am ende die gleichung

Quellcode

1
1=e*d+k*φ(N)=37*d+k*264

nach dem nächsten schritt sollte ich also egt d und k haben, nachdem ich mit dem einsetzen fertig bin

Quellcode

1
2
3
4
5
6
7
1 = 1 * 5 - 2 * 2
1 = 1 * 5 - 2 * (37 - 7 * 5)
1 = x * 5 - 2 * 37
1 = 15 * 5 - 2 * 37
1 = 15 * (264 - 7 * 37) - 2 * 37
1 = 15 * 264 - x * 37
1 = 15 * 264 - 107 * 37

da e = 37 ergibt sich daraus folgende gleichung:

Quellcode

1
1 = 37 * (-107) + 15 * 264

das stimmt zwar auch, allerdings kann man d (also -107) nicht sinnvoll in die RSA funktion einsetzen. jedenfalls kommt dann beim entschlüsseln ziemlicher müll raus :P

bsp:

C ist der verschlüsselte wert und K ist der klartext-wert. der zu verschlüsselnde wert ist hier testweise einfach mal 5:

Quellcode

1
2
3
4
C=K^e mod N
K=C^d mod N
C = 5 ^ 37 mod 264 = 175
K = 175 ^ (-107) mod 264 = -48

Ich muss wohl nicht anmerken, dass -48 und 5 iwie leicht unterschiedliche zahlen sind.

Wenn mir jemand helfen könnte, wäre das echt... hilfreich :P

danke schonma im voraus
Evil Industries - Kaufen Sie jetzt, bereuen Sie später.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

27.10.2011, 13:02

Nur ein Einschub, aber RSA löst dein Problem nicht.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

27.10.2011, 13:10

Und zu deinem Problem. Such mal nach dem Begriff Restklassenring.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Mastermind

unregistriert

5

27.10.2011, 14:06

Zitat

Nur ein Einschub, aber RSA löst dein Problem nicht.

Auch wenn RSA nicht im eigentlichen Sinne dem Schlüsseltausch dient, so wird RSA soviel ich weiß von GnuPG o.ä. nur verwendet um den (zufälligen) Schlüssel eines symmetrischen Verfahrens zu verschlüsseln, dass dann seinerseits die Nachricht verschlüsselt. Ich denke das war hier gemeint.

Zitat

ich versuche grad, n eigenes verschlüsselungssystem zu entwickeln.


Das solltest du auf keinen Fall tun. Wenn du dich für die Thematik interessierst kannst du als Fingerübung mal RSA und AES implementieren. Im Anbetracht deiner Frage wird dir das sicher mehr bringen als jedes neue System auf das du kommen könntest.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

6

27.10.2011, 14:14

wir hatten das Thema RSA in unserer Ausbildung in der Berufsschule im Unterricht
dabei wurden unds folgende Formeln für die erzeugung eines Schlüssels genannt:

Quellcode

1
2
n = p * q
(e * d) mod ((p-1) * (q-1)) = 1

p und q sind Primzahlen
n ist einer der beiden öffentlichen Schlüssel
e ist der 2. Schlüssel beim verschlüsseln, d beim Entschlüsseln (einer von beiden ist der private Schlüssel, der andere der 2. öffentliche Schlüssel)

wir sollten daraufhin (neben einer Ver- und entschlüsselung) durch durchprobieren auf d und e kommen
(ob das der Beste Weg an den Schlüsselpaar ist, ist eine andere Sache)


wenn ich richtig verstanden habe, was du vor hast, dann muss der Schlüssel deiner Verschlüsselung immer nur 1x gültig bzw. für 1 Person gültig sein


falls es bei der Fehlersuche helfen könnte:
passende Schlüssel für n=299 und e=37 sind 25 oder 157 (ach wie toll, dass ich da so ein Programm habe... ^^)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

shadowstrike

Frischling

  • »shadowstrike« ist der Autor dieses Themas

Beiträge: 24

Wohnort: Wiesbaden

Beruf: Schüler

  • Private Nachricht senden

7

27.10.2011, 17:47

@Schorsch: wie mastermind richtig erkannt hat, werd ich mit RSA nur den schlüssel für das 2. system verschlüsseln. auch wenn ich für sichere RSA-keys ziemlich große primzahlen brauche (das letzte mal, als ich nach dem standard geguckt hab, warns an die 40 stellen, und die quelle is schon recht veraltet) und ich hierfür prinzipiell sowieso ne klasse bräuchte, die mit solchen zahlen rechnen kann (64bit sind für sowas einfach nich das wahre :P), wird allein die RSA-Verschlüsselung des keys ziemlich zeitfressend. sonst würd ich vermutlich gleich ganze nachrichten mit rsa verschlüsseln aber das is für nen end-userpc nichtmal ansatzweise tragbar^^ und was restklassenringe angeht, prog ich erstma das erweiterte euklidische verfahren aus, das is prinzipiell ziemlich einfach und wenn mir das passende werte liefert, reicht mir das fürs erste (falls restklassenringe performanter sind, werd ich mir die nach der erstimplementierung ansehn...)

@mastermind: im prinzip hast du recht, allerdings hab ich mir vor ca nem halben jahr in der schule vorm unterricht ein an die enigma angelehntes (natürlich an computer angepasstes^^) system ausgedacht, das wie one-time-pads und auch die enigma selbst beim bruteforcen jede erdenkliche zeichenfolge erzeugt und 1,63*10^180 verschiedene schlüssel ermöglicht. das hab ich dann den restlichen schultag über im unterricht nochmal überarbeitet und n 14-seitiges beschreibendes skript geschrieben. wäre doch iwie verschwendete zeit gewesen, wenn ich dann letzten endes AES oä nachbastel xD und das ich mathematisch nich so das ass bin, heißt nich dass ich keine ahnung von kryptographie hätte xD bin zwar nich der beste, aber reicht aber aus um mir relativ sicher zu sein, dass meine chiffre klappen kann

@drakon: ich werds mir auf jeden fall ma durchlesen.

und @ sacaldur: da primfaktorzerlegung so ohne weiteres nich möglich is und modulofunktionen ausser durch bruteforce genau wie n = p * q nicht umkehrbar sind, sollte der schlüssel so ohne weiteres selbst dann nicht umkehrbar sein, wenn man ihn mehrfach verwendet. dh (auch wieder ne relativ alte information, vlt kann man RSA jetzt auch in soeinem fall knacken) im normalfall besitzt jede person ein eigenes schlüsselpaar. N und e sind dann öffentlich und damit wie das wort schon sacht für jeden zugänglich. p, q, φ(N) und d bleiben geheim, was es praktisch unmöglich macht, auf mathematischem wege zurückzurechnen, auch wenn dieses schlüsselpaar mehrfach verwendet wird. und was

Quellcode

1
(e * d) mod ((p-1) * (q-1)) = 1

angeht: naja wenn man davon ausgeht, dass

Quellcode

1
1=e*d+k*φ(N)

korrekt gelöst wurde, ist deine bedingung immer gegeben, da in dem fall entweder e*d oder k*φ(N) exakt um 1 größer ist als die jeweilige andere zahl und somit bei ner modulodivision immer 1 liefert

Quellcode

1
1=e*d+k*φ(N) => 0=e*d+k*φ(N)-1


darf ich dann also annehmen, dass ich mathematisch gesehen prinzipiell nichts falsch gemacht habe beim einsetzen der gleichungen? denn in dem fall muss ich wohl doch auf restklassenringe umsteigen (hab mir die bis jetzt noch nich angeguckt, da auf wikipedia (zumindest auf deutsch) steht, d würde per erweitertem euklidischem verfahren berechnet)

dann dank ich nochmal für die hinweise/anregungen/den link^^
Evil Industries - Kaufen Sie jetzt, bereuen Sie später.

Mastermind

unregistriert

8

27.10.2011, 17:59

und was restklassenringe angeht, prog ich erstma das erweiterte euklidische verfahren aus, das is prinzipiell ziemlich einfach und wenn mir das passende werte liefert, reicht mir das fürs erste (falls restklassenringe performanter sind, werd ich mir die nach der erstimplementierung ansehn...)

Du hast nicht verstanden was ein Restklassenring ist.

das wie one-time-pads und auch die enigma selbst beim bruteforcen

OTP kann man nicht bruteforcen.

jede erdenkliche zeichenfolge erzeugt und 1,63*10^180 verschiedene schlüssel ermöglicht.

Du solltest dir angewöhnen die Größe des Schlüsselraums zum Zweck der Vergleichbarkeit in Bits anzugeben.

wäre doch iwie verschwendete zeit gewesen,

Richtig erkannt. Mit 99%iger Sicherheit war es das.

shadowstrike

Frischling

  • »shadowstrike« ist der Autor dieses Themas

Beiträge: 24

Wohnort: Wiesbaden

Beruf: Schüler

  • Private Nachricht senden

9

27.10.2011, 18:21

1. korrekt. hab noch nich die zeit gehabt, mir anzugucken, was das überhaupt is :P
2. lies den satz zuende, bevor du dran rumkritisierst. wie schon geschrieben kommt jede mit dem verwendeten zeichensatz mögliche zeichenkombination bei raus. also hat man bei 100 zeichen n^100 (n is die anzahl der möglichen zeichen) verschiedene texte. davon ergeben dann vermutlich mehrere tausend texte auch noch sinn. hierbei gehe ich davon aus, wenn man davon ausgeht, dass das verwendete otp nur (im einfachsten fall) 26 zahlen verwendet. werden beliebig große zahlen verwendet, is bruteforcen natürlich nich möglich, allerdings sind wir uns hoffentlich einig, dass selbst wenn man texte, deren schlüsselzeichen nur aufm alphabet basieren, zwar gebruteforced werden können, dass die bruteforce-attacke allerdings aufgrund oben genannter tausenden von möglichen sinnvollen texten niemals ein ergebnis liefern kann.
3. 896...
und 4.: mag sein. das lass aber mal meine sorge sein, da ich wohl niemanden mit fragen zu meinem eigenen system nerven kann xD zumindest nich mit verständnisfragen und da ich imo schon relativ gut durchgeplant habe, wie ichs proggen werde, wird auch das nich euer prob sein^^

edit:

und was das bruteforcen angeht: in ihrer letzten form war bruteforcen auch bei der enigma bei durchschnittlich langen texten nich drin. das entschlüsseln im 2. weltkrieg durch die briten hat nur funkrioniert, weil die deutschen sie nicht richtig angewendet haben bzw. nich die technischen möglichkeiten hatten, ihre schlüssel sicher zu verteilen

und nochn edit:

so hab mir jetz ma restklassenringe angesehn. wenn ich das in meiner 3-minütigen einarbeitungszeit richtig verstanden habe, könnten die tatsächlich ne um längen sinnvollere und wirklich gut funktionierende lösungen sein. oder eher: sie SIND eine um längen sinnvollere lösung xD
Evil Industries - Kaufen Sie jetzt, bereuen Sie später.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »shadowstrike« (27.10.2011, 18:41)


Mastermind

unregistriert

10

27.10.2011, 18:54

hab noch nich die zeit gehabt, mir anzugucken, was das überhaupt is

Du besser geschwiegen hättest bis du die Zeit fandest.

wie schon geschrieben kommt jede mit dem verwendeten zeichensatz mögliche zeichenkombination bei raus. also hat man bei 100 zeichen n^100 (n is die anzahl der möglichen zeichen) verschiedene texte. davon ergeben dann vermutlich mehrere tausend texte auch noch sinn. hierbei gehe ich davon aus, wenn man davon ausgeht, dass das verwendete otp nur (im einfachsten fall) 26 zahlen verwendet. werden beliebig große zahlen verwendet, is bruteforcen natürlich nich möglich, allerdings sind wir uns hoffentlich einig, dass selbst wenn man texte, deren schlüsselzeichen nur aufm alphabet basieren, zwar gebruteforced werden können, dass die bruteforce-attacke allerdings aufgrund oben genannter tausenden von möglichen sinnvollen texten niemals ein ergebnis liefern kann.


und was das bruteforcen angeht: in ihrer letzten form war bruteforcen auch bei der enigma bei durchschnittlich langen texten nich drin. das entschlüsseln im 2. weltkrieg durch die briten hat nur funkrioniert, weil die deutschen sie nicht richtig angewendet haben bzw. nich die technischen möglichkeiten hatten, ihre schlüssel sicher zu verteilen


Du hast anscheinend weder verstanden was ein otp noch was eine brute-force Attacke ist. Wenn die Nachricht wesentlich länger ist als die vorhandene Entropie kann man theoretisch immer bruteforcen. OTP vermeidet dies durch genügend Entropie. In der Praxis ist man durch Rechenpower limitiert, aber die Rechenpower zu Enigma-Zeiten war auch eine andere als heute. Alles andere ist nur gerede.

Werbeanzeige