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

equinox

Frischling

Beiträge: 56

Beruf: Student

  • Private Nachricht senden

11

28.03.2014, 11:10

Je nach dem könntest du dir auch mal TLS angucken(Wikipedia sollte reichen).
Aber da es noch nicht gesagt wurde: Implementiere solche Verfahren niemals selbst, wenn du sie ernsthaft benutzen willst. Es ist verdammt komplex und fehleranfällig, was man ja schon an Bugs in größeren Bibliotheken sieht(wenn ich mich recht erinnere OpenSSH).

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

12

28.03.2014, 12:11

Ja, das stimmt wohl. Wobei es schon ein guter Schritt ist, ein bewährtes mathematisches Verfahren implementieren zu wollen. Gerne wollen manche ja auch direkt dann die Mathematik dahinter gleich mit erfinden. 8o
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

13

28.03.2014, 18:04

Ok, wir reden hier nicht von einem Spiel, sondern von einem Programm. Ich wollte sowieso keine Bibliothek selbst dafür entwickeln, sondern benutze jetzt die Standard Java Kryptofunktionen, wie sie in dem ersten Tutorial von Chromanoid beschrieben werden.

@BlueCobold
Du meinst wenn ich mit RSA mehrere Nachrichten mit dem selben Schlüssel signieren würde, könnte ein anderer, der den öffentlichen Schlüssel und die Nachrichten kennt, trotzdem keine eigenen Nachrichten mit meiner Signatur erstellen? Im "Nachbauen" einer vorhandenen signierten Nachricht sehe ich irgendwie keinen Sinn, was würde das einem Angreifer bringen?

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

14

28.03.2014, 19:26

Nein, im Endeffekt wirst du wohl eh Hashes der Nachrichten signieren. Die ursprünglichen Hashe kann jeder nachrechnen (sonst könnte die Signatur ja auch gar nicht verifiziert werden). Also nehmen wir mal an wir haben zwei Nachrichten x und y. Dann kennt jeder die Hashes h(x) und h(y) und die Signaturen s(x) und s(y). So weit ist alles in Ordnung.

Nun kommt ein Angreifer her und hat eine Nachricht z, deren Besonderheit es ist, dass h(z) = h(x) * h(y) ist. Dann ist auch s(z) = s(x) * s(y).

Klingt akademisch? Nun, vielleicht ist es in der Tat etwas. Es ist nicht leicht eine Nachricht z mit dieser Eigenschaft zu finden, die auch noch irgendetwas sinnvolles bedeutet. Aber mit einem großen Satz an Nachrichten + Signaturen steigt die Wahrscheinlichkeit langsam an sich evtl. eine neue Signatur herbeimultiplizieren zu können.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

15

28.03.2014, 20:23

Im "Nachbauen" einer vorhandenen signierten Nachricht sehe ich irgendwie keinen Sinn, was würde das einem Angreifer bringen?
Das ist jetzt außerhalb des ursprünglichen Kontexts: Das kommt auf die Anwendung an, Replay-Attacken sind oft ziemlich problematisch. Da musst Du auch bei herkömmlicher Signierung dran denken.

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

16

28.03.2014, 20:36

@Legend
Wenn also der Hashwert der gefälschten Nachricht das Produkt aus den Hashwerten der beiden vorherigen Nachrichten ist, ist die Signatur wiederum das Produkt aus den beiden vorherigen Signaturen, wenn ich dich richtig verstanden habe.

Angenommen man kann die gewünschte Nachricht so umbauen (z.B. mit dem anhängen weiterer Ziffern), dass der Hashwert genau dem oben beschriebenen Produkt entspricht, könnten also Nachrichten gefälscht werden. Dann hängt es jetzt davon ab einen Hashalgorithmus zu verwenden, bei dem das nicht möglich ist. Ich gehe davon aus, dass bei SHA-1, oder MD5, noch niemand in relativ kurzer Zeit (und ohne Brute-Force) solche anzuhängenden Zeichen berechnen kann, um einen gewünschten Hashwert zu erreichen.

Man berechnet die Signatur aus der Hashfunktion, um Berechnungszeit zu sparen, oder? Würde man dann statt die Signatur von der Hashfunktion zu berechnen, die Signatur aus der Nachricht berechnen lassen, würde man die oben genannte Sicherheitslücke vermeiden, oder?

Zitat

Klingt akademisch? Nun, vielleicht ist es in der Tat etwas.
Ich war schon in einer (Probe-)Vorlesung Mathematik, die Herleitungen die wir dort von einigen Funktionen bekommen haben waren deutlich anspruchsvoller... Noch kann ich dir also folgen.

17

28.03.2014, 20:53

Wenn also der Hashwert der gefälschten Nachricht das Produkt aus den Hashwerten der beiden vorherigen Nachrichten ist, ist die Signatur wiederum das Produkt aus den beiden vorherigen Signaturen, wenn ich dich richtig verstanden habe.

Korrekt

Angenommen man kann die gewünschte Nachricht so umbauen (z.B. mit dem anhängen weiterer Ziffern), dass der Hashwert genau dem oben beschriebenen Produkt entspricht, könnten also Nachrichten gefälscht werden. Dann hängt es jetzt davon ab einen Hashalgorithmus zu verwenden, bei dem das nicht möglich ist.

Es gibt keinen Hashalgorithmus, bei dem keine Kollisionen existieren (sie sind surjektiv). Die Frage ist, wie schwer es ist, eine Kollision zu finden.

Ich gehe davon aus, dass bei SHA-1, oder MD5, noch niemand in relativ kurzer Zeit (und ohne Brute-Force) solche anzuhängenden Zeichen berechnen kann, um einen gewünschten Hashwert zu erreichen.

MD5 ist gebrochen (Kollision auf normaler Hardware in weniger als 1 Stunde). SHA-1 ist noch nicht so schlimm, aber ich würde es ebenfalls nicht mehr verwenden.

Man berechnet die Signatur aus der Hashfunktion, um Berechnungszeit zu sparen, oder? Würde man dann statt die Signatur von der Hashfunktion zu berechnen, die Signatur aus der Nachricht berechnen lassen, würde man die oben genannte Sicherheitslücke vermeiden, oder?

Nein. Zum einen spart ein Hash natürlich Berechnungszeit, aber es ist auch deutlich schwieriger eine Kollision zu einem Hash als zu einem Klartext zu finden (wenn eine kollisionsresistente Hashfunktion verwendet wird). Wenn du also die Nachricht direkt verwendest, verschwendest du Rechenleistung für weniger Sicherheit.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

18

28.03.2014, 21:27

MD5 ist gebrochen (Kollision auf normaler Hardware in weniger als 1 Stunde). SHA-1 ist noch nicht so schlimm, aber ich würde es ebenfalls nicht mehr verwenden.
Aber Kollision zu finden muss doch nicht unbedingt helfen eine Nachricht zu fälschen. Ich gehe davon aus, damit niemand z.B. "kc4a,b_d" verschicken will, mit dem er zwar die selbe Signatur verwenden kann, aber immer noch keine Botschaft. Interessanter wäre es doch nur, wenn es für bestimmte Hashfunktionen eine Methode geben würde, wie man einen beliebigen Hashwert für eine beliebige Nachricht erhält, die dann möglichst nur erweitert werden muss (z.B. zu "Ok, habe deine letzte Nachricht erhalten. dky<fl4fn"). Und ich glaube das letztere ist nicht so einfach in einer Stunde möglich.

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

19

28.03.2014, 22:18

Was MD5 angeht, es wurde sogar schon mal durchgeführt etwas relativ sinnvolles zu fälschen, wenn auch 2008 noch mit erheblichem Aufwand: http://www.zdnet.com/blog/security/ssl-b…collisions/2339
Das sich in der Zwischenzeit da noch einiges mehr getan hat glaube ich gerne.

Ansonsten hast du das mit RSA richtig verstanden.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

20

29.03.2014, 06:53

@BlueCobold
Du meinst wenn ich mit RSA mehrere Nachrichten mit dem selben Schlüssel signieren würde, könnte ein anderer, der den öffentlichen Schlüssel und die Nachrichten kennt, trotzdem keine eigenen Nachrichten mit meiner Signatur erstellen?
Natürlich nicht. Sonst wäre RSA ja wohl eher ein Epic Fail als ein CryptoSystem. In den meisten Fällen ist die Signierung also sicher. Erstens wurde schon gesagt, dass man den Hash signieren sollte und zweitens kommen eben keine hintereinander gehangenen Nachrichten im Realfall sonderlich oft vor. Kann, ist aber extrem vom Kontext abhängig und man muss sich dieser Schwäche natürlich trotzdem bewusst sein.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige