Elderan: 128 Bit Schlüssel erzeugen

Beitrag lesen

Hallo,

BTW: MD5 sollte mittlerweile als gebrochen angesehen und zu kryptographischen Zwecken nicht mehr benutzt werden.

Dies ist teilweise Unfug. Was gebrochen wurde, ist die starke Kollisionsresistenz, diese besagt:
Es ist praltisch Unmöglich, zwei verschiedene Nachrichten mit dem gleichen Hashwert zu finden:
M != M' ; h(M) = h(M')
Die Nachrichten kann man frei wählen. Dieses wurde aber auch bei SHA1  gebrochen.
Dennoch ist es schwer, zwei _Sinnvolle_ Nachrichten mit dem gleichen Hashwert zu finden.

Die schwache Kollisionsresistenz ist aber weiterhin gegeben, diese besagt: Zu einer gegebenen Nachricht ist es schwer, ein zweite verschiedene mit dem gleichen Hashwert zu finden.
Wäre dies nicht vorhanden, hätte man ein Problem beim Speichern von Passwörtern.

Z.B. bei Dateien die zum Download angeboten werden. (Hexadezimal sinnvoll)

Wenn ich mir ein Programm herrunterlade (z.B. php), und schauen möchte ob dies fehlerfrei Übertragen wurde, dann geh ich auf die Homepage, da findet man oft soetwas:
md5: fb1aac107870f897d26563a9cc5053c0

Dann starte ich mein altes Dos Programm, gebe den Pfad zu Datei an, dies berechnet den Hashwert und gibt ihn als Hexadezimal aus. Per Auge überprüfe ich ob die Hashwerte identisch sind.

Angenommen auf der PHP Homepage wäre die Ausgabe als ASCII-String. Hmm nicht gut, denn der Browser kann keine Steuerzeichen ausgeben. Außerdem sehen manche Buchstaben unter DOS anders aus als die Ausgabe per Browser.
Also müsste man beide Ausgaben kodieren, was für den Programmierer wieder bedeutet, dass er die Koderiungsfunktion implementieren müsste.
Anstatt, wie es bisher ist, folgendes zu benutzen:
printf("%08x%08x%08x%08x",A,B,C,D);
Müsste dieser erst A,B,C,D kodieren. Benutzt man z.B. Base64, dort werden 3 Byte in 4 Byte "überführt". Allerdings besitzt jede Variable 4 Byte/32 Bit.
Und des weiteren hat man ein Problem, wenn das Programm z.B. Base32 benutzt, auf der PHP Homepage aber der Hashwert als Base64 angegeben wird.

Also das ist ein deutlicher Mehraufwand für Programmierer, außerdem wäre es dann Sinnvoll, wenn MD5 einen Kodierungstandard vorgibt, damit nicht jeder macht was er möchte.
Aber warum benutzt man dann nicht gleich Hexadezimal?

Da ist es völlig egal. Wenn es trotzdem Probleme bereitet ist eines der beteiligten Programme kaputt oder schlecht programmiert.

Wenn man z.B. eine .exe Datei im Editor/Notepad öffnet, dort einen Buchstaben einfügt und diesen wieder löscht => speichern, so wird das Programm aufgrund der Steuerzeichen nicht mehr funktionieren.
Also könnte man z.B. eine Passwortdatei nicht per Notepad bearbeiten.  Und wenn ich per phpMyAdmin den Datensatz anschaue, dann müssen im Formular auch steuerzeichen dargestellt werden, was zu Problemen führt.
Lösung => Kodierung (warum kein Hexadezimal)

Wo bitte sollte es Verluste geben? Nein, Unfähigkeit des Programmierers ist kein Grund.

Siehe .exe Beispiel.

Ja, das ist wohl wahr und zwar in Dokus und Debuggingsessions. Sonst nirgends. Was soll auch ein Mensch damit sonst anfangen?

Ihn vergleichen? Ihn evt. selber erstellen? Wenn man ein AdminCP schützen möchte, so überprüft man oft:
if(md5($pw)) == "fb1aac107870f897d26563a9cc5053c0");

Oder auch in jeglicher anderen Darstellung. Das macht man ja nicht selber, das macht der Rechner. Das muß aber programmiert werden, deshalb ist es ideal, wenn man die Rohware zur Verfügung hat, da kann man besser mit Arbeiten.

Das muss aber alles, evt. Umständlich programmiert werden. Sofern man noch andere Sprachen als PHP kennt, weiß man wie dämlich es ist, verschiedene String Arrays in Base64 zu kodieren, denn dort muss man immer ein vielfaches von 3 Suchen, was nicht immer leicht möglich ist.
Außerdem kann man den Hashwert als Hexadezimal wieder sehr leicht in Integer überführen:
fb1aac107870f897d26563a9cc5053c0
fb1aac10 7870f897 d26563a9 cc5053c0
Und auf Basis dieser Hexadezimal Darstellung kann man dann wieder sehr leicht alle andere Formate erhalten.

Diese 4/5 Ausgaben werden dann einfach aneinandergehängt, fertig ist der Hashwert..

Der Hashwert ist schon vorher fertig, der muß nicht noch weiter bearbeitet werden.

Hast du schonmal den MD5 Algorithmus _selbst_ programmiert?
Der return in PHP sieht wie folgt aus:
return hex($a).hex($b).hex($c).hex($d);
hex(); wandelt dabei Integer in Hexadezimal Darstellung um.

Und hast du schon mal an die xxxxxxxxxxxxx Personen gedacht, die kein ASCII als Standard-Zeichensatz benutzen?

Was ist mit denen? Die können damit auch keine Hexadezimalen Zahlen darstellen, also wie kommst Du auf diese Leute?

Die Mathematik ist die einzige Sprache, die international ist. Sowohl ein Deutscher, als auch Japaner kann die Hexadezimaldarstellung Interpretieren, und wieder in die _orginal_ Werte zurücküberführen.

Was ist wenn die erste 32 Bit Variable folgendes Wert enthält:
0x61626364

ASCII: abcd

Das ist nicht sicher, das kannst Du so nicht behaupten. Das kann selbst bei ASCII auch "dcba" oder gar "badc" sein.

Gut das stimmt, es kommt auf die Plattform drauf an. Aber der Wert: 0x61626364 wäre weltweit eindeutig, ganz im gegensatz zu: abcd.

Und da Hexadezimal Weltweit eindeutig ist, gibt es dort keine Verwechslungen.

Eben sagtest Du noch, das sowas im japanischem Zeichensatz nicht geht, denn die für hexadezimale Darstellung nötigen ASCII-Zeichen "a,b,c,d,e,f" soll es da ja nicht geben.

Die Buchstaben a,b,c,d,e,f stehen aber nicht für den Wert des ASCII Wertes, sondern für 10,11,12,13,14,15.
Dies ist Weltweit eindeutig.

Ich kann immer noch nicht nachvollziehen, warum eine Hexadezimalzahl außer in seltenen und zudem nicht produktionsrelevanten Ausnahmen die ideale Lösung darstellen soll.

Was spricht denn gegen die Hexadezimal darstellung?
1. Anders als bei einer Kodierung verbraucht der Wert nicht unnötig mehr Platz, denn man kann diese als "Binär" speichern, also braucht er nur 16 Byte anstatt 32 Byte wenn man ihn als ASCII String speichert.
2. Der Binärwert ist weltweit eindeutig
3. Programmierer können eine Hexadezimal Ausgabe lachhaft einfach realisieren.
4. Man muss sich nicht auf ein Kodierungstandard einigen.
5. Man kann ihn sehr leicht in jede weiter Form überführen

Das Hexadezimalsystem eignet sich sehr gut, um Folgen von Bits (verwendet in der Digitaltechnik) darzustellen (Wikipedia)

Tja und MD5 gibt einfach eine Folge von Bits zurück.

Grüße
Elderan

0 47

128 Bit Schlüssel erzeugen

sp7
  • programmiertechnik
  1. 0
    Elderan
    1. 0
      Sven Rautenberg
      1. 0
        Alexander Brock
        1. 0
          Elderan
          1. 0
            Christoph Zurnieden
            1. 0
              Alexander Brock
            2. 0
              Elderan
              1. 0
                Christoph Zurnieden
                1. 0
                  Elderan
                  1. 0
                    Christoph Zurnieden
                    1. 0
                      Elderan
                      1. 0
                        Christoph Zurnieden
                        1. 0
                          Christian Kruse
                          1. 0
                            Christoph Zurnieden
                            1. 0
                              Christian Kruse
                        2. 0
                          Elderan
                          1. 0
                            Christoph Zurnieden
                            1. 0
                              Alexander Brock
                              1. 0
                                Christoph Zurnieden
                                1. 0
                                  Christian Kruse
                                  1. 0
                                    Elderan
                                    1. 0
                                      Christian Kruse
                                      1. 0
                                        Elderan
                                        1. 0
                                          Christian Kruse
                                          1. 0
                                            Elderan
                                            1. 0
                                              Christian Kruse
                                              1. 0
                                                Alexander Brock
                                                1. 0
                                                  Christoph Zurnieden
                                                  1. 0
                                                    Alexander Brock
                                                  2. 0
                                                    Henryk Plötz
                                                    1. 0
                                                      Christoph Zurnieden
                                                2. 0
                                                  Christoph Zurnieden
                                                  1. 0
                                                    Alexander Brock
                                                    1. 0
                                                      Christoph Zurnieden
                                                      1. 0
                                                        Alexander Brock
                                                        1. 0
                                                          Christoph Zurnieden
                                        2. 0
                                          Christoph Zurnieden
                                      2. 0
                                        Henryk Plötz
                                        1. 0
                                          Christoph Zurnieden
                                    2. 0
                                      Christoph Zurnieden
                                      1. 0
                                        Henryk Plötz
                                        1. 0
                                          Christoph Zurnieden
                            2. 0
                              Elderan
                              1. 0
                                Christoph Zurnieden
              2. 0
                Christian Kruse
    2. 0
      Henryk Plötz