Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 15 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
15
Dung lượng
190,6 KB
Nội dung
unbiased,thì mỗi bit của hàm F(X,Y,Z) cũng sẽ là independent và unbiased. Hàm G,H và I cũng tương tự như hàm F, chúng họat động như tóan hạng so sánh bit sẽ sinh ra một output từ các bits của X,Y và Z như là một lọai mà nếu các bits tương ứng của X,Y và Z là independent và unbiased thì mỗi bit của hàm G(X,Y,Z),H(X,Y,Z) và I(X,Y,Z) sẽ là independent và unbiased. Chú ý rằng hàm H là tóan hạng thao tác trên bit là “xor” hay là một hàm “tương đương”của chính inputs. Đây là bước sử dụng bảng T[1…64] được xây dựng từ hàm sin. T[i] biểu thị cho phần tử thứ i của bảng T và bằng : T[i]=int(4294967296*(asb(sin(i))) với i là radians Những phần tử của mảng này cho ở phần phụ lục. Thực hiện theo các bước thao tác sau: /*Qui trình trên mỗi 16-word block. */ For i = 0 to N/16-1 do /* Copy block i vào X. */ For j = 0 to 15 do Set X[j] to M[i*16+j]. end /* Kết thúc vòng lặp j */ /* Lưu A vào AA, B vào BB, C vào CC, và D vào DD. */ AA = A BB = B CC = C DD = D /* Round 1. */ /* Với [abcd k s i] biểu thị cho họat động : a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */ /* Thực hiện 16 họat động như dưới đây */ [ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4] [ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8] [ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12] [ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16] /* Round 2. */ /* Với [abcd k s i] biểu thị cho họat động : a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */ /* Thực hiện 16 họat động như dưới đây */ [ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20] [ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24] [ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28] [ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32] /* Round 3. */ /* Với [abcd k s i] biểu thị cho họat động : a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */ /* Thực hiện 16 họat động như dưới đây */ [ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36] [ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40] [ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44] [ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48] /* Round 4. */ /* Với [abcd k s i] biểu thị cho họat động : a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */ /* Thực hiện 16 họat động như dưới đây */ [ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52] [ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56] [ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60] [ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64] /* Rồi thi hành phép cộng như dưới đây. (Đó là gia tăng mỗi 4 register bằng giá trị đã có trước khi block này bắt đầu*/ A = A + AA B = B + BB C = C + CC D = D + DD end /* kết thúc vòng lặp i */ Trong ASM: ; phase III · hashing hashloop: mov eax,[esi].dtA mov dta,eax mov eax,[esi].dtB mov dtb,eax mov eax,[esi].dtC mov dtc,eax mov eax,[esi].dtD mov dtd,eax ; round 1 FF dta,dtb,dtc,dtd,dword ptr [edi+00*4],07,0d76aa478h FF dtd,dta,dtb,dtc,dword ptr [edi+01*4],12,0e8c7b756h FF dtc,dtd,dta,dtb,dword ptr [edi+02*4],17,0242070dbh FF dtb,dtc,dtd,dta,dword ptr [edi+03*4],22,0c1bdceeeh FF dta,dtb,dtc,dtd,dword ptr [edi+04*4],07,0f57c0fafh FF dtd,dta,dtb,dtc,dword ptr [edi+05*4],12,04787c62ah FF dtc,dtd,dta,dtb,dword ptr [edi+06*4],17,0a8304613h FF dtb,dtc,dtd,dta,dword ptr [edi+07*4],22,0fd469501h FF dta,dtb,dtc,dtd,dword ptr [edi+08*4],07,0698098d8h FF dtd,dta,dtb,dtc,dword ptr [edi+09*4],12,08b44f7afh FF dtc,dtd,dta,dtb,dword ptr [edi+10*4],17,0ffff5bb1h FF dtb,dtc,dtd,dta,dword ptr [edi+11*4],22,0895cd7beh FF dta,dtb,dtc,dtd,dword ptr [edi+12*4],07,06b901122h FF dtd,dta,dtb,dtc,dword ptr [edi+13*4],12,0fd987193h FF dtc,dtd,dta,dtb,dword ptr [edi+14*4],17,0a679438eh FF dtb,dtc,dtd,dta,dword ptr [edi+15*4],22,049b40821h ; round 2 GG dta,dtb,dtc,dtd,dword ptr [edi+01*4],05,0f61e2562h GG dtd,dta,dtb,dtc,dword ptr [edi+06*4],09,0c040b340h GG dtc,dtd,dta,dtb,dword ptr [edi+11*4],14,0265e5a51h GG dtb,dtc,dtd,dta,dword ptr [edi+00*4],20,0e9b6c7aah GG dta,dtb,dtc,dtd,dword ptr [edi+05*4],05,0d62f105dh GG dtd,dta,dtb,dtc,dword ptr [edi+10*4],09,002441453h GG dtc,dtd,dta,dtb,dword ptr [edi+15*4],14,0d8a1e681h GG dtb,dtc,dtd,dta,dword ptr [edi+04*4],20,0e7d3fbc8h GG dta,dtb,dtc,dtd,dword ptr [edi+09*4],05,021e1cde6h GG dtd,dta,dtb,dtc,dword ptr [edi+14*4],09,0c33707d6h GG dtc,dtd,dta,dtb,dword ptr [edi+03*4],14,0f4d50d87h GG dtb,dtc,dtd,dta,dword ptr [edi+08*4],20,0455a14edh GG dta,dtb,dtc,dtd,dword ptr [edi+13*4],05,0a9e3e905h GG dtd,dta,dtb,dtc,dword ptr [edi+02*4],09,0fcefa3f8h GG dtc,dtd,dta,dtb,dword ptr [edi+07*4],14,0676f02d9h GG dtb,dtc,dtd,dta,dword ptr [edi+12*4],20,08d2a4c8ah ; round 3 HH dta,dtb,dtc,dtd,dword ptr [edi+05*4],04,0fffa3942h HH dtd,dta,dtb,dtc,dword ptr [edi+08*4],11,08771f681h HH dtc,dtd,dta,dtb,dword ptr [edi+11*4],16,06d9d6122h HH dtb,dtc,dtd,dta,dword ptr [edi+14*4],23,0fde5380ch HH dta,dtb,dtc,dtd,dword ptr [edi+01*4],04,0a4beea44h HH dtd,dta,dtb,dtc,dword ptr [edi+04*4],11,04bdecfa9h HH dtc,dtd,dta,dtb,dword ptr [edi+07*4],16,0f6bb4b60h HH dtb,dtc,dtd,dta,dword ptr [edi+10*4],23,0bebfbc70h HH dta,dtb,dtc,dtd,dword ptr [edi+13*4],04,0289b7ec6h HH dtd,dta,dtb,dtc,dword ptr [edi+00*4],11,0eaa127fah HH dtc,dtd,dta,dtb,dword ptr [edi+03*4],16,0d4ef3085h HH dtb,dtc,dtd,dta,dword ptr [edi+06*4],23,004881d05h HH dta,dtb,dtc,dtd,dword ptr [edi+09*4],04,0d9d4d039h HH dtd,dta,dtb,dtc,dword ptr [edi+12*4],11,0e6db99e5h HH dtc,dtd,dta,dtb,dword ptr [edi+15*4],16,01fa27cf8h HH dtb,dtc,dtd,dta,dword ptr [edi+02*4],23,0c4ac5665h ; round 4 II dta,dtb,dtc,dtd,dword ptr [edi+00*4],06,0f4292244h II dtd,dta,dtb,dtc,dword ptr [edi+07*4],10,0432aff97h II dtc,dtd,dta,dtb,dword ptr [edi+14*4],15,0ab9423a7h II dtb,dtc,dtd,dta,dword ptr [edi+05*4],21,0fc93a039h II dta,dtb,dtc,dtd,dword ptr [edi+12*4],06,0655b59c3h II dtd,dta,dtb,dtc,dword ptr [edi+03*4],10,08f0ccc92h II dtc,dtd,dta,dtb,dword ptr [edi+10*4],15,0ffeff47dh II dtb,dtc,dtd,dta,dword ptr [edi+01*4],21,085845dd1h II dta,dtb,dtc,dtd,dword ptr [edi+08*4],06,06fa87e4fh II dtd,dta,dtb,dtc,dword ptr [edi+15*4],10,0fe2ce6e0h II dtc,dtd,dta,dtb,dword ptr [edi+06*4],15,0a3014314h II dtb,dtc,dtd,dta,dword ptr [edi+13*4],21,04e0811a1h II dta,dtb,dtc,dtd,dword ptr [edi+04*4],06,0f7537e82h II dtd,dta,dtb,dtc,dword ptr [edi+11*4],10,0bd3af235h II dtc,dtd,dta,dtb,dword ptr [edi+02*4],15,02ad7d2bbh II dtb,dtc,dtd,dta,dword ptr [edi+09*4],21,0eb86d391h mov eax,dta add [esi].dtA,eax mov eax,dtb add [esi].dtB,eax mov eax,dtc add [esi].dtC,eax mov eax,dtd add [esi].dtD,eax add edi,64 sub edx,64 jnz hashloop Trong đó các biến và hàm được định nghĩa như sau: MD5RESULT STRUCT dtA dd ? dtB dd ? dtC dd ? dtD dd ? MD5RESULT ENDS FF MACRO dta,dtb,dtc,dtd,x,s,t ; a = b + ((a + F(b,c,d) + x + t) << s ) mov eax,dtb mov ebx,dtc mov ecx,dtd ; F(x,y,z) = (x and y) or ((not x) and z) and ebx,eax not eax and eax,ecx or eax,ebx add eax,dta add eax,x add eax,t mov cl,s rol eax,cl add eax,dtb mov dta,eax ENDM GG MACRO dta,dtb,dtc,dtd,x,s,t ; a = b + ((a + G(b,c,d) + x + t) << s) mov eax,dtb mov ebx,dtc mov ecx,dtd ; G(x,y,z) = (x and z) or (y and (not z)) and eax,ecx not ecx and ecx,ebx or eax,ecx add eax,dta add eax,x add eax,t mov cl,s rol eax,cl add eax,dtb mov dta,eax ENDM HH MACRO dta,dtb,dtc,dtd,x,s,t ; a = b + ((a + H(b,c,d) + x + t) << s) mov eax,dtb mov ebx,dtc mov ecx,dtd ; H(x,y,z) = x xor y xor z xor eax,ebx xor eax,ecx add eax,dta add eax,x add eax,t mov cl,s rol eax,cl add eax,dtb mov dta,eax ENDM II MACRO dta,dtb,dtc,dtd,x,s,t ; a = b + ((a + I(b,c,d) + x + t) << s) mov eax,dtb mov ebx,dtc mov ecx,dtd ; I(x,y,z) = y xor (x or (not z)) not ecx or eax,ecx xor eax,ebx add eax,dta add eax,x add eax,t mov cl,s rol eax,cl add eax,dtb mov dta,eax ENDM 3.5 Xuất ra : Tín hiệu message digest sinh ra là A,B,C,D. Đó là : bắt đầu với byte thấp nhất của A và kết thúc là byte cao nhất của D Đến đây là coi như đã mô tả hòan chỉnh về thuật tóan MD5. Trong ASM: Ở đây chủ yếu là sắp xếp lại chuổi hashes bắt đầu từ byte thấp của A và kết thúc ở byte cao của D ; phase IV · results mov ecx,4 @@: mov eax,dword ptr [esi] xchg al,ah rol eax,16 xchg al,ah mov dword ptr [esi],eax add esi,4 loop @b ret The_lighthouse(REA) TÒAN BỘ NGUỒN CODE TRONG ASM VỀ HÀM MD5hash: Khi các bạn lập trình trong ASM, các bạn sử dụng nguồn code này để tính MD5- hashes ;_________________________________________________ _____________________ ; MD5hash : hashes a string using the md5 algorithm ;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯��¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯��¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯ ; input : ; ptBuffer: pointer to the string buffer (doesn' t have to be zero-terminated, must be at least 64bytes large) ; dtBufferLength: length of the buffer ; ptMD5Result: pointer to a MD5RESULT structure ; output : ; ptMD5Result: contains the hash dwords in dtA, dtB, dtC, dtD ;_________________________________________________ _____________________ ; roy|fleur ;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯��¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯��¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯ MD5hash proto :dword,:dword,:dword MD5RESULT STRUCT dtA dd ? dtB dd ? dtC dd ? dtD dd ? MD5RESULT ENDS FF MACRO dta,dtb,dtc,dtd,x,s,t ; a = b + ((a + F(b,c,d) + x + t) << s ) mov eax,dtb mov ebx,dtc mov ecx,dtd ; F(x,y,z) = (x and y) or ((not x) and z) and ebx,eax not eax and eax,ecx or eax,ebx add eax,dta add eax,x add eax,t mov cl,s rol eax,cl add eax,dtb mov dta,eax ENDM GG MACRO dta,dtb,dtc,dtd,x,s,t ; a = b + ((a + G(b,c,d) + x + t) << s) mov eax,dtb mov ebx,dtc mov ecx,dtd ; G(x,y,z) = (x and z) or (y and (not z)) and eax,ecx not ecx and ecx,ebx or eax,ecx add eax,dta add eax,x add eax,t mov cl,s rol eax,cl add eax,dtb mov dta,eax