MD5 - nach den RFC Vorgaben selber basteln

Neue Frage »

jokin Auf diesen Beitrag antworten »
MD5 - nach den RFC Vorgaben selber basteln
hallu

im moment erweitere ich meinen horizont aufm gebiet der kryptographie.
drum versuche ich gerade eine eigene md5 funktion zu programmieren.
wie genau man dabei vorzugehen hat, ist glücklicherweise für jeden zugänglich in der rfc 1321 (http://www.faqs.org/rfcs/rfc1321.html) dokumentiert.

allerdings machen mir ein paar ausdrücke probleme.
zum beispiel was genau nun "low order" und "high order" sind.

Zitat:

2. Terminology and Notation

In this document a "word" is a 32-bit quantity and a "byte" is an
eight-bit quantity. A sequence of bits can be interpreted in a
natural manner as a sequence of bytes, where each consecutive group
of eight bits is interpreted as a byte with the high-order (most
significant) bit of each byte listed first. Similarly, a sequence of
bytes can be interpreted as a sequence of 32-bit words, where each
consecutive group of four bytes is interpreted as a word with the
low-order (least significant) byte given first.


besonders problematisch wird das auch beim initialisieren der buffer:

Zitat:

3.3 Step 3. Initialize MD Buffer

A four-word buffer (A,B,C,D) is used to compute the message digest.
Here each of A, B, C, D is a 32-bit register. These registers are
initialized to the following values in hexadecimal, low-order bytes
first):

word A: 01 23 45 67
word B: 89 ab cd ef
word C: fe dc ba 98
word D: 76 54 32 10


bis jetzt mach ich das so, dass ich mir eben immer die zwei ziffern anstatt als hexadezimale zahl als 8 stellige binärzahl denke und diese dann eben einfach in reihe schreibe. so dass die 67 die stellen von 1 bis 128 (also die zahlen von 0 bis 255), die 45 dann die stellen von 256 bis 32768 (also zahlen von 256 bis 65536) usw... ist das so gedacht?

und bei der interpretation dieser anweisung bin ich mir auch noch nicht schlüssig:
Zitat:

2. Terminology and Notation
[...]
Let the symbol "+" denote addition of words (i.e., modulo-2^32
addition).


heißt das, ich soll einfach die "zahlenwerte" der words addieren und danach mittels mod 2^32 sicher stellen, dass der neue zahlenwert ebenfalls in ein word passt?


wäre nett, wenn sich n paar leude vom fach dazu melden

danke
AD Auf diesen Beitrag antworten »
RE: MD5 - nach den RFC Vorgaben selber basteln
Zitat:

32-bit words, where each consecutive group of four bytes is interpreted as a word with the low-order (least significant) byte given first.

Damit ist ziemlich klar dargelegt, wie z.B.
word A: 01 23 45 67
aufzufassen ist, in C-Notation
A = 0x67452301
Genauso werden Zahlen in der im PC-Bereich üblichen Intel x86 Architektur gespeichert, sogenanntes Little Endian.

Also gerade nicht so, wie du hier
Zitat:
Original von jokin
so dass die 67 die stellen von 1 bis 128 (also die zahlen von 0 bis 255), die 45 dann die stellen von 256 bis 32768 (also zahlen von 256 bis 65536) usw... ist das so gedacht?

vermutet hast - das wäre die Variante "high-order (most significant) byte first", so wie sie (glaube ich) u.a. bei den Apple Macs zum Einsatz komm, sogenanntes Big Endian.


Insgesamt ist das aber eher eine Frage für das Informatiker-Board:

http://www.informatikerboard.de/
 
 
Poff Auf diesen Beitrag antworten »
RE: MD5 - nach den RFC Vorgaben selber basteln
Zitat:
Original von jokin
und bei der interpretation dieser anweisung bin ich mir auch noch nicht schlüssig:
Zitat:

2. Terminology and Notation
[...]
Let the symbol "+" denote addition of words (i.e., modulo-2^32
addition).


auf Assemblerebene brauchst bei 32Bit Registern nur drauf achten,
dass ohne das Carry addiert wird, dann wird das automatisch
modulo 2^32

und weiter solltest aufpassen, dass du nicht mit dem word-Begriff
in unbeachtete Probleme gerätst. 'Üblicherweise' ist ein word 16Bit
breit und 32Bit sind ein double word (dword) so kenne ich das
jedenfalls. Kein Problem wenn das hier so verwendet wird, aber
du musst genau darauf achten dass das auch überall der Fall ist.
.
kurellajunior Auf diesen Beitrag antworten »
RE: MD5 - nach den RFC Vorgaben selber basteln
Hi,

Genau für solche Fragen gibt es jetzt das Informatikerboard -> theoretische Informatik.

Solche Fragen ruhig da stellen Augenzwinkern dann haben alle was davon...

Jan
jokin Auf diesen Beitrag antworten »

wusst nix von der existenz eines informatiker boards... kenn eben nur zufällig nen admin von dem board hier vonner schule, weshalb ich dachte, es kann nich schaden, ma hier reinzuschaun.

zur technik:
ich programmier in delphi (mit c syntax konnte ich mich einfach nich anfreunden, weshalb meine umschulungsversuche bisher nie erfolg hatten ^^)

meine words und bytes und so weiter hab ich alle "selbst gebastelt" aus arrays von booleans. so bin ich mit der länge und größe auf der sicheren seite. für die operationen mit den daten hab ich dann jeweils funktionen geschrieben. zb für die addition oder für das zuweisen einer "normalen dezimalschreibweisen zahl" in einen 8er boolean block eines größeren arrays usw


was mich jetzt grad stört:

weiter unten kommt dann die sinus funktion ins spiel. es heißt, man solle eine tabelle T anlegen mit 64 elementen die sich durch den abs(sin(x)) mal irgendwas ergeben (x in rad) und die tabelle sei im anhang gegeben... dort hab ich die tabelle jedoch nich gefunden... meint ihr, dass ich die werte mit der delphi sin funktion selbst berechnen kann, oder ist das nicht genormt (auf wieviele stellen etc)?
kurellajunior Auf diesen Beitrag antworten »

Anmerkung am Rande: Die Admins dieses Boards sind auch Admins des Informatikerboards Augenzwinkern

Jan
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »