unbiased,thì mỗi bit của hàm FX,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
Trang 1unbiased,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]
Trang 2/* 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
Trang 3mov 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
Trang 4GG 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
Trang 5mov 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
Trang 6rol 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
Trang 7xor 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
Trang 83.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
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯��¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯��¯¯¯¯¯¯¯¯¯¯
Trang 9¯¯¯¯¯¯¯¯¯¯
; 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
Trang 10add 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
Trang 11ENDM
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
Trang 12xor eax,ebx
add eax,dta
add eax,x
add eax,t
mov cl,s
rol eax,cl
add eax,dtb
mov dta,eax
ENDM
.code
MD5hash proc uses eax ebx ecx edx edi
esi,ptBuffer:dword,dtBufferLength:dword,ptMD5Resul t:dword local dta:dword,dtb:dword,dtc:dword,dtd:dword
; phase I · padding
mov edi,ptBuffer
mov eax,dtBufferLength
inc eax
add edi,eax
mov byte ptr [edi-1],080h
xor edx,edx
mov ebx,64
div ebx
neg edx
Trang 13add edx,64
cmp edx,8
jae @f
add edx,64
@@: mov ecx,edx
xor al,al
rep stosb
mov eax,dtBufferLength
inc edx
add dtBufferLength,edx
xor edx,edx
mov ebx,8
mul ebx
mov dword ptr [edi-8],eax
mov dword ptr [edi-4],edx
mov edx,dtBufferLength
mov edi,ptBuffer
; phase II · chaining variables initialization mov esi,ptMD5Result
assume esi:ptr MD5RESULT
mov [esi].dtA,067452301h
mov [esi].dtB,0efcdab89h
mov [esi].dtC,098badcfeh
Trang 14mov [esi].dtD,010325476h
; 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
Trang 15GG 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