Tải bản đầy đủ (.pdf) (152 trang)

Nghiên cứu một số vấn đề bảo mật và an toàn thông tin cho các mạng dùng giao thức liên mạng máy tính ip phụ lục một số nghiên cứu về hàm băm và giao thức mật mã

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.82 MB, 152 trang )

Chơng trình KC-01:
Nghiên cứu khoa học
phát triển công nghệ thông tin
và truyền thông

Đề tài KC-01-01:
Nghiên cứu một số vấn đề bảo mật và
an toàn thông tin cho các mạng dùng
giao thức liên mạng máy tính IP

Phụ lục: Một số nghiên cứu về hàm băm và
giao thức mật mÃ

Hà NộI-2004


Mục lục

Nghiên cứu về thám mà MD4, Trần Hồng Thái

Trang
1

Va chạm vi sai của SHA-0, Florent Chaboud và Antoiene Joux, Crypto98

31

Phân tích SHA-1 trong chế độ mà hoá, Helena Handchuh, Lars R. Knudsen
và Matthew J. Robshaw, CT-RSA 2001

48



Các hàm băm dựa trên mà khối: phơng pháp thiết kế, Bart Preneel, René
Govaerts, Joó Vandewalle, CRYPTO93

64

Nguyên tắc thiết kế cho hàm băm, Ivan Bjerre Damgard, Eurocrypt91

75

Hàm băm nhanh an toàn dựa trên mà sửa sai, Lars Knudsen và Bart
Preneel, Crypto97

87

Độ mật của hàm băm lặp dựa trên mà khối, Walter Hohl, Xuejia Lai,
Thomas Meier, Christian Waldvogel, Crypto 93

102

Phân phối và thoả thuận khoá, Nguyễn Quốc Toàn

115

Xác thực và trao đổi khoá có xác thực, Whitfield Diffie, Paul C. Van
Oorschot và Michael J. Wierner, Design, Codes and Cryptography, 192

123

CËp nhËt th«ng tin vỊ hàm băm SHA-1


145


NGHIÊN CӬU Vӄ THÁM MÃ MD4
Trҫn Hӗng Thái

I. MÔ TҦ THUҰT TỐN MD4

Thuұt tốn MD4 lҩy mӝt ÿҫu vào là mӝt message có ÿӝ dài bҩt kǤ và ÿҫu ra là mӝt
“tóm lѭӧc thơng báo” (message digest), cịn ÿѭӧc gӑi là “fingerprint”. Nó ÿѭӧc
thiӃt kӃ khá gӑn và nhanh trên máy 32-bit.
1. Mơ t̫ thu̵t tốn
Giҧ sӱ chúng ta có mӝt message vӟi ÿӝ dài là b-bit là ÿҫu vào và chúng ta muӕn
tìm tóm lѭӧc thơng báo (message digest) cӫa nó. Ӣ ÿây b là mӝt sӕ nguyên dѭѫng
bҩt kǤ, có thӇ bҵng 0, hoһc lӟn bҩt kǤ.
Ӣ ÿây chúng ta sӱ dөng các thuұt ngӳ sau: ‘word’ là biӃn 32 bit, byte là 8 bit. Q
trình tính tóm lѭӧc thông báo này ÿѭӧc thӵc hiӋn qua 5 bѭӟc sau:
Bѭӟc 1: Thêm vào các bit ÿӋm (Padding bits)
Thông ÿiӋp ÿѭӧc mӣ rӝng bҵng viӋc thêm các “bit ÿӋm” sao cho ÿӝ dài (theo bit)
cӫa nó ÿӗng dѭ vӟi 448 (modulo 512). ViӋc này sӁ ÿҧm bҧo khi thêm 64 bit (ÿӝ
dài - ÿѭӧc trình bày sau) nӳa, thì ÿӝ dài thông ÿiӋp là bӝi cӫa 512.
ViӋc ÿӋm ÿѭӧc thӵc hiӋn nhѭ sau: mӝt bit ‘1’ ÿѭӧc nӕi vӟi thông ÿiӋp và sau ÿó là
các bit ‘0’ cho ÿӃn khi ÿӝ dài thông ÿiӋp ÿӗng dѭ vӟi 448.
Bѭӟc 2: Thêm ÿӝ dài thông ÿiӋp (Length)
Ĉӝ dài thông ÿiӋp trѭӟc khi mӣ rӝng b ÿѭӧc biӇu diӉn bӣi mӝt sӕ 64 bit (gӗm 2
word) sӁ ÿѭӧc thêm vào thông ÿiӋp sau bѭӟc 1 (theo thӭ tӵ word thҩp trѭӟc). Lúc
này ÿӝ dài thông ÿiӋp là bӝi cӫa 512 bit (16 word 32 bit). Ký hiӋu message kӃt quҧ
là M[0 … N-1], N là bӝi cӫa 512.
Bѭӟc 3: Khӣi tҥo bӝ ÿӋm MD

Bӕn biӃn A, B, C, D (là các thanh ghi 32 bit) ÿѭӧc dùng ÿӇ tính “message digest”.
Chúng ÿѭӧc khӣi tҥo bҵng các giá trӏ sau ӣ dҥng Hexa, theo thӭ tӵ các byte thҩp
trѭӟc:
word A: 01 23 45 67
word B: 89 ab cd ef
word C: fe dc ba 98
word D: 76 54 32 10
Bѭӟc 4: Xӱ lý thông ÿiӋp (message) theo tӯng khӕi 16-words

1


Trѭӟc tiên ta ÿӏnh nghƭa 3 hàm, mӛi hàm lҩy 3 word (32 bit) làm ÿҫu vào và ÿѭa
ra mӝt tӯ 32 bit:
F(X,Y,Z) = XY v not(X)Z
G(X,Y,Z) = XY v XZ v YZ
H(X,Y,Z) = X xor Y xor Z
Trong ÿó: XY là phép ‘and’ bit cӫa X và Y, not(X) là phép lҩy bù bit cӫa X, X xor
Y là phép cӝng modulo 2 theo bit cӫa X và Y, X v Y là phép toán OR (hoһc) bit
cӫa X và Y.
Thông ÿiӋp ÿѭӧc xӱ lý theo tӯng khӕi 16 word nhѭ sau:
for i = 0 to N/16-1 do
/* Copy block i into X. */
for j = 0 to 15 do
set X[j] to M[i*16 +j]
end
/*
AA
BB
CC

DD

Save A as AA, B as BB, C as CC, D as DD */
= A;
= B;
= C;
= D;

/* Round 1 */
/* Ký hiệu [abcd k s] là phép toán sau:
a = (a + F(b,c,d) + X[k]) <<< s
Thực hiện 16 lần như sau. */
[ABCD 0
[ABCD 4
[ABCD 8
[ABCD 12

3];
3];
3];
3];

[DABC 1
[DABC 5
[DABC 9
[DABC 13

7];
7];
7];

7];

[CDAB 2
[CDAB 6
[CDAB 10
[CDAB 14

11];
11];
11];
11];

[BCDA 3
[BCDA 7
[BCDA 11
[BCDA 15

19];
19];
19];
19];

/* Round 2 */
/* Ký hiệu [abcd k s] là phép toán sau:
a = (a + G(b,c,d) + X[k] + 5A82799) <<< s */
[ABCD
[ABCD
[ABCD
[ABCD


0
1
2
3

3];
3];
3];
3];

[DABC
[DABC
[DABC
[DABC

4
5
6
7

5];
5];
5];
5];

[CDAB 8
[CDAB 9
[CDAB 10
[CDAB 11


9];
9];
9];
9];

[BCDA
[BCDA
[BCDA
[BCDA

12
13
14
15

13];
13];
13];
13];

/* Round 3 */
/* Ký hiệu [abcd k s] là phép toán sau:
a = (a + H(b,c,d) + X[k] + 6ed9eba1) <<< s */
[ABCD
[ABCD
[ABCD
[ABCD

0
2

1
3

3];
3];
3];
3];

[DABC 8
[DABC 10
[DABC 9
[DABC 11

9];
9];
9];
9];

[CDAB
[CDAB
[CDAB
[CDAB

4
6
5
7

11];
11];

11];
11];

[BCDA
[BCDA
[BCDA
[BCDA

12
14
13
15

13];
13];
13];
13];

2


A
B
C
D

=
=
=
=


A
B
C
D

+
+
+
+

AA;
BB;
CC;
DD;

end; /* of loop on i */
Bѭӟc 5: KӃt quҧ ÿҫu ra (output)
Bҧn tóm lѭӧc thơng ÿiӋp (message digest) là nӝi dung các thanh ghi A, B, C, D
theo thӭ tӵ tӯ byte thҩp cӫa A ÿӃn byte cao cӫa D.
2. Mã ngu͛n cͯa MD4
Chúng tôi ÿã download mã nguӗn cӫa thuұt tốn mã hố MD4 trên Internet.
Chѭѫng trình khá nhӓ gӑn, gӗm 3 file là global.h, md4.h (2 file header khai báo
các PROTOTYPE, hҵng) và md4c.c - mã nguӗn cӫa MD4. Chúng tôi ÿã ÿӑc hiӇu
mã nguӗn cӫa MD4 và thӱ nghiӋm nhӓ nhѭ sau: thӵc hiӋn băm mӝt xâu có ÿӝ dài
nhӓ hѫn 448 bit 1000000 lҫn trên máy Dell 350MHz. Thӡi gian tính tốn này là

II. THUҰT TỐN THÁM MD4

Tác giҧ cӫa thuұt tốn thám MD4 là Hans Dobbertin vӟi bài “Cryptanalysis of

MD4” - năm 1997. Thuұt toán MD4 ÿѭӧc Rivest ÿӅ nghӏ năm 1990 và 2 năm sau
là RIPEMD ÿѭӧc thiӃt kӃ mҥnh hѫn MD4. Năm 1995, tác giҧ ÿã tìm ra mӝt tҩn
cơng chӕng lҥi 2 vòng cӫa RIPEMD. Phѭѫng pháp này ÿѭӧc bә sung và có thӇ sӱ
dөng cho tҩn cơng ÿӫ 3 vịng cӫa MD4.
Theo tác giҧ thì thuұt tốn này có thӇ tìm ra “va chҥm” (collision) cho MD4 chӍ
trong mӝt vài giây trên mӝt máy PC. Ĉһc biӋt tác giҧ ÿã ÿѭa ra mӝt ví dө rҩt cө thӇ
có tính thӵc hành và thuyӃt phөc cao bҵng viӋc tìm ra va chҥm cӫa thơng ÿiӋp có ý
nghƭa. KӃt quҧ chính cӫa bài báo này là khҷng ÿӏnh “MD4 là không phҧi hàm hash
khơng va chҥm”.
Thuұt tốn này là kiӇu tҩn cơng tìm collision: tӭc là biӃt giá trӏ khӣi ÿҫu IVo, tìm
các thơng ÿiӋp X và X’ sao cho hash(IVo, X) = hash(IVo, X’).
1. Tóm tҳt thuұt tốn do Dobbertin trình bày.
1.1 Ký hi͏u và qui ˱ͣc s͵ dͭng cho thu̵t toán
Tҩt cҧ các biӃn và hҵng sӕ ÿѭӧc sӱ dөng ÿӅu là các sӕ 32 bit. Các sӕ hҥng ÿѭӧc
biӇu diӉn theo modulo 232. Các ký hiӋu ^, v, ⊕ và ¬ lҫn lѭӧt là các phép tốn
AND, OR, XOR và lҩy phҫn bù theo bit. Vӟi mӝt tӯ W - 32 bit, W<<32 ký hiӋu cӫa
phép dӏch vòng trái W ÿi s vӏ trí (vӟi 0 ≤ s ≤ 32). Và -W<~

~

Ký hiӋu X=(Xi), i<16 là toàn bӝ 16 words (512 bits) và X = ( X i ) i <16 ÿѭӧc thiӃt lұp
nhѭ sau:

3


~

X


i

= X i,

12

= X

~

X

12

vӟi i ≠ 12.
+1

~

ViӋc chӑn X 12 = X12 +1 là vì X12 xuҩt hiӋn ӣ vịng 1 và vòng 2 vӟi khoҧng cách
ngҳn nhҩt so vӟi các Xi khác.
~

Bài toán ÿ̿t ra là: làm thӃ nào ÿӇ tìm X sao cho giá trӏ băm MD4 cӫa X, X trùng
~

nhau, nghƭa là compress(IVo; X) = compress(IVo; X ).
Tҩn công ÿѭӧc chia thành 3 phҫn, mӛi phҫn ta chӍ xét mӝt ÿoҥn cӫa hàm nén. Vӟi
n < m < 48, có cơng thӭc sau:

compress nm (( A, B, C , D); X Ψ ( n ) ... X Ψ ( m ) ) = ( A' , B' , C ' , D' )
là ÿoҥn cӫa hàm nén tӯ bѭӟc thӭ n tӟi bѭӟc m, mà ψ(i) là ánh xҥ sao cho giá trӏ
cӫa Xψ(i) ÿѭӧc sӱ dөng ӣ bѭӟc thӭ i cӫa hàm nén. Nghƭa là tính compress nm vӟi giá
trӏ ban ÿҫu (A, B, C, D) và tӯ bѭӟc thӭ n ÿӃn m, tѭѫng ӭng sӱ dөng các tӯ ÿҫu vào
Xψ(n) … Xψ(m), và kӃt quҧ ra là (A’, B’, C’, D’) là nӝi dung cӫa 4 thanh ghi sau
bѭӟc m. Ĉôi khi ÿӇ ÿѫn giҧn chúng ta viӃt X thay cho Xψ(n) … Xψ(m). Mӝt dҥng
công thӭc khác cNJng ÿѭӧc sӱ dөng:
(Ai, Bi, Ci, Di) là nӝi dung cӫa các thanh ghi sau bѭӟc thӭ i.
ThiӃt lұp:
~

~

~

~

∆ i = ( Ai − A i , Bi − B i , C i − C i , Di − D i )

Chú ý rҵng mӛi bѭӟc chӍ có nӝi dung mӝt thanh ghi bӏ thay ÿәi.
1.2 Tìm Inner Almost-Collision (các b˱ͣc tͳ 12 - 19 cͯa MD4) (tҥm dӏch là “hҫu
va chҥm bên trong”)
Chú ý rҵng X12 xuҩt hiӋn 1 lҫn trong mӛi vòng là trong các bѭӟc 12, 19, 35. X và
~

X có va chҥm nӃu và chӍ nӃu ∆35 = 0, bӣi X12 xuҩt hiӋn trong bѭӟc 35 lҫn cuӕi

cùng. ĈӇ ÿiӅu này xҧy ra chúng ta cҫn chӑn các giá trӏ sao cho
∆19 = (0, 1<<25, -1<<5, 0)


(*)
~

ĈiӅu này có nghƭa là ÿҫu ra cӫa compress 12
19 cho X và X là gҫn bҵng nhau. Lý do
ÿӇ chӑn giá trӏ này sӁ ÿѭӧc trình bày rõ ràng hѫn trong phҫn tiӃp theo. Gӑi (A, B,
C, D) là giá trӏ khӣi ÿҫu cӫa compress 12
19 .

4


ĈӇ ÿѫn giҧn, ta sӱ dөng các ký hiӋu sau: A* = A19, B* = B19, …, U = A12, V=D13,
~

~

~

~

~

~

~

~

W=C14, Z = B15, U = A12 , V = D13 , W = C 14 , Z = B 15 . K1=0x5a82799 là hҵng sӕ

sӱ dөng trong vòng 2 cӫa MD4.
~

~

Ӣ ÿây chúng ta cҫn B * + 1 << 25 = B * , C* + 1<<5 = C * . Lúc này viӋc tìm inner
almost collision tѭѫng ÿѭѫng vӟi viӋc giҧi hӋ các phѭѫng trình sau:
~ << 29

− U << 29

1=U

(1)
~ << 25

~

F( U , B, C) - F(U, B, C) = V
~

~ << 21

~

F (V , U , B ) − F (V , U , B ) = W
~

~


~

~ <<13

~

~

~

~

F (W , V , U ) − F (W , V , U ) = Z

− V << 25

(2)

− W << 21

(3)

− Z <<13

(4)

G(Z ,W ,V ) − G(Z ,W ,V ) = U − U
~

~


(5)
~

G ( A* , Z ,W ) − G ( A* , Z ,W ) = V − V
~

(6)
~ << 23

~

G ( D* , A* , Z ) − G ( D* , A* , Z ) = W − W + C *
~

~

− C*<< 23

~ <<19

G (C * , D* , A* ) − G (C* , D* , A* ) = Z − Z + B *

− B*<<19 − 1

(7)
(8)

Các biӇu thӭc trên thu ÿѭӧc tӯ viӋc khӱ các Xψ(i), vӟi i=12, 13, … 19 cӫa hàm nén
compress 12

19 . Ví dө: tӯ ÿӏnh nghƭa trong bѭӟc 15, có
Z=(B + F(W,V,U) + X15)<<19
~

~

~

~

Z = ( B + F ( W, V , U ) + X 15 ) <<19

ta thu ÿѭӧc biӇu thӭc (4). Và cNJng tӯ mӛi bѭӟc trong hàm nén này, ta thu ÿѭӧc
các biӇu thӭc sau:
(9)
X13 = tùy ý
(10)
X14 = W<<21 - C - F(V,U,B)
(11)
X15 = Z<<13 - B - F(W,V,U)
<<29
- U - G(Z,W,V) - K1
(12)
X0 = A*
<<27
- V - G(A*, Z, W) - K1
(13)
X4 = D*
(14)
X8 = C*<<23 - W - G(D*, A*, Z) - K1

<<19
- Z - G(C*, D*, A*) - X13
(15)
X12 = B*
<<25
- F(U,B,C) - X13
(16)
D =V
<<29
- F(B,C,D) - X12
(17)
A =U
Thҩy rҵng hӋ (1) ÿӃn (8) gӗm có 14 biӃn, do ÿó ý tѭӣng là thiӃt lұp mӝt sӕ biӃn
sao cho có thӇ tìm ÿѭӧc các biӃn cịn lҥi. Do vұy, chӑn:
U = -1 = 0xffffffff,

~

U = 0,

B=0
5


Khi ÿó (1) ÿã thoҧ mãn. Các biӇu thӭc (2), (3), (6), (7) và (8) ÿѭӧc chuyӇn ÿәi và
sҳp xӃp lҥi nhѭ sau:
~

~ <<19


~

Z = Z − G (C * , D* , A* ) + G (C* , D* , A* ) + B *
~

~ << 23

~

W = W - G ( D* , A* , Z ) + G ( D* , A* , Z ) + C *
~ << 21

V =W

− B*<<19 − 1

(18)

− C*<< 23

(19)

− W << 21

~

~

(20)


~

V = V − G ( A* , Z ,W ) + G ( A* , Z ,W )

(21)

~ << 25

C = V <<25 − V

(22)

Trong hӋ phѭѫng trình này A*, B*, C*, D*, Z và W là các tham sӕ tӵ do ÿӇ tìm các
biӃn khác. Hai biӇu thӭc (4) và (5) còn lҥi sӁ là:
~

~

~

G ( Z ,W ,V ) − G ( Z ,W ,V ) = 1
~

~

~ <<13

F (W , V ,0) − F (W , V ,−1) − Z

(23)

+ Z <<13 = 0

(24)

ViӋc tìm hҫu va chҥm bên trong là tìm các giá trӏ A, B, C, D và X12, X13, X14, X15,
X0, X4, X8.
Bây giӡ ta thu ÿѭӧc 16 phѭѫng trình (tͳ (9) ÿ͇n (24)) vӟi 20 biӃn. Cө thӇ là X12,
~

~

~

X13, X14, X15, X0, X4, X8 và A, C, D, W, Z, V, Z ,W ,V , A*, B*, C*, D*. Nhұn thҩy
rҵng trong các biӇu thӭc tӯ (18) ÿӃn (21) nӃu ta coi A*, B*, C*, D*, Z và W là các
tham sӕ tӵ do thì ta có thӇ tìm các biӃn khác thơng qua chúng.
Thuұt tốn tìm Inner Almost Collision thӵc hiӋn nhѭ sau:
~

~

~

B˱ͣc 1:Chӑn A*, B*, C*, D*, Z, W mӝt cách ngүu nhiên, tính Z , W , V , V theo các
biӇu thӭc (18) ÿӃn (21) và kiӇm tra (test) biӇu thӭc (23). NӃu test qua thì nhҧy
sang bѭӟc 2.
B˱ͣc 2: Lҩy A*, B*, C*, D*, Z, W tìm ÿѭӧc tӯ bѭӟc 1 làm các “giá trӏ cѫ sӣ”
(basic value). Thay ÿәi 1 bit ngүu nhiên nào ÿó trong các biӃn trên, tính
~


~

~

Z , W , V , V và test biӇu thӭc (23). NӃu nó vүn thoҧ mãn và 4 bit phҧi cӫa biӇu thӭc:
~

~

~ <<13

F (W , V ,0) − F (W , V ,−1) − Z

+ Z <<13

(25)
bҵng 0 thì lҩy các giá trӏ A*, B*, C*, D*, Z, W tѭѫng ӭng làm “giá trӏ cѫ sӣ” mӟi.
Thӵc hiӋn giӕng nhѭ trên và test 8 bit phҧi cӫa (25). “Giá trӏ cѫ sӣ” mӟi ÿѭӧc lҩy
chӍ khi 8 bit phҧi cӫa (25) bҵng 0. Thӵc hiӋn tiӃp nhѭ vұy vӟi 12, 16, … 32 bit
phҧi cӫa (25) bҵng 0 (tӭc biӇu thӭc (24) thoҧ mãn).
6


B˱ͣc 3: Bây giӡ (23), (24) ÿã thoҧ mãn, ta ÿã thu ÿѭӧc mӝt “inner almostcollision” bҵng viӋc chӑn B=0 và tính các giá trӏ A, C, D và Xi (i=0, 4, 8, 12, 13,
14, 15) theo các biӇu thӭc (9)-(17) và (22).
ĈӇ sӱ dөng “inner almost-collision” vào tҩn công vi sai trong phҫn tӟi, thì cҫn
phҧi thoҧ mãn thêm ÿiӅu kiӋn nӳa là:
~

~


G ( B* , C* , D* ) = G ( B* , C* , D* )
~

(26)

~

Khi B* và B * (C* và C * tѭѫng ӭng) gҫn nhau, có mӝt xác suҩt cao ÿӇ va chҥm này
là ÿúng. Chúng ta gӑi mӝt inner almost-collision là chҩp nhұn ÿѭӧc nӃu (26) thoҧ
mãn. Tác giҧ ÿã khҷng ÿӏnh rҵng thuұt tốn này tìm ra mӝt inner almost-collision
dѭӟi 1 giây trên máy tính PC.
B͝ ÿ͉ 1: Có m͡t thu̵t tốn th͹c hành cho phép ta tính m͡t “inner almostcollision” ch̭p nh̵n ÿ˱ͫc, ví dͭ: giá tr͓ ban ÿ̯u A, B, C, D và các ÿ̯u vào X12,
X13, X14, X15, X0, X4, X8 cho compress 12
19 tho̫ mãn:
<<25
<<5
∆19 = (0, 1 , -1 , 0)
~

~

G ( B* , C* , D* ) = G ( B* , C* , D* )

----------------------------------------------------------------------------------------------Ta có thӇ tóm tҳt ý tѭӣng cӫa bѭӟc này theo quan ÿiӇm giҧi mӝt hӋ phѭѫng trình
nhѭ sau:
HӋ phѭѫng trình ban ÿҫu gӗm 17 phѭѫng trình: (1)-> (17);
Sӕ biӃn: 23, cө thӇ là X12, X13, X14, X15, X0, X4, X8 và A, B, C, D, W, U, Z, V,
~


~

~

~

U , Z , W , V , A*, B*, C*, D*.

Sau ÿó hӋ phѭѫng trình này ÿѭӧc biӃn ÿәi (mӝt cách tѭѫng ÿѭѫng) vӅ hӋ phѭѫng
trình gӗm có 16 phѭѫng trình: (9)-> (17); (18)->(22) ; (23) ; (25)
~

~

~

Sӕ biӃn: 20, cө thӇ là X12, X13, X14, X15, X0, X4, X8 và A, C, D, W, Z, V, Z ,W ,V ,
A*, B*, C*, D*.
Ĉây là mӝt hӋ phѭѫng trình khơng tuyӃn tính, nên mһc dù sӕ ҭn nhiӅu hѫn sӕ
phѭѫng trình, nhѭng viӋc giҧi khơng dӉ. Ӣ ÿây có lӁ cҫn nhӳng kiӃn thӭc và sӵ
nhҥy cҧm cӫa mӝt ngѭӡi làm ÿiӅu khiӇn, tính xҩp xӍ,….Chҳc là có nhiӅu thuұt
tốn ÿӇ giҧi hӋ phѭѫng trình này, chúng tơi ÿã phҧi sӱ dөng ÿúng thuұt toán do
Dobbertin nêu ra (thuұt toán tìm Inner Almost Collision); ÿây là thuұt tốn thӵc
hành ÿѭӧc nhҳc tӟi trong bә ÿӅ 1. ChiӃn lѭӧc giҧi cӫa Dobbertin ÿѭӧc chia làm 3
giai ÿoҥn :

7


Bѭӟc 1: Xét các phѭѫng trình (18)-> (21) và (23)

Bѭӟc 2: Xét ÿӃn các phѭѫng trình (18)-> (21); (23) và (24) (ӣ dҥng (25)).
Bѭӟc 3: Xét ÿӃn các phѭѫng trình còn lҥi (9)-> (17) và (22)
-------------------------------------------------------------------------------------------------1.3 Differential Attack Modulo 232 (các b˱ͣc 20-35 cͯa MD4)
B͝ ÿ͉ 2: Gi̫ s͵ r̹ng m͡t ‘inner almost collision’, cͭ th͋: giá tr͓ khͧi ÿ̯u
(A,B,C,D) cho b˱ͣc 12 và các bi͇n X12, X13, X14, X15, X0, X4, X8 theo b͝ ÿ͉ 1.
Ch͕n các Xi còn l̩i m͡t cách ng̳u nhiên t˱˯ng ͱng vͣi giá tr͓ khͧi ÿ̯u b̹ng vi͏c
tính compress 110 sao cho:
(A11, B11, C11, D11) = (A, B, C, D)
~

Thì xác sṷt ÿ͋ X và X x̫y ra va ch̩m (∆35 = 0) trong hàm nén cͯa MD4 là
kho̫ng 2-22.
Bѭӟc
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35



0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

1<<25
1<<25
1<<25
1<<25
1<<6
1<<6
1<<6
1<<6
1<<19
1<<19

1<<19
1<<19
1
1
1
1
0

*

i

-1<<5
-1<<5
-1<<5
-1<<14
-1<<14
-1<<14
-1<<14
-1<<23
-1<<23
-1<<23
-1<<23
-1
-1
-1
-1
0
0


0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

Bҧng 3
Hàm
*
G
G
G
G
G
G
G
G
G

G
G
G
H
H
H
H

Dӏch
*
3
5
9
13
3
5
9
13
3
5
9
13
3
9
11
15

pii −1

*

1
1/9
1/3
1/3
1/9
1/9
1/3
1/3
1/9
1/9
1/3
1/3
1/3
1/3
1/3
1

Vào
constant
*
*
X1
K1
X5
K1
X9
K1
X13
K1
X2

K1
X6
K1
X10
K1
X14
K1
X3
K1
X7
K1
X11
K1
X15
K1
X0
K2
X8
K2
X4
K2
X12(+1)
K2

Giҧ sӱ p là xác suҩt ÿӇ ∆35 = 0 vӟi ÿiӅu kiӋn cho trѭӟc. Chúng ta phҧi chӭng minh
rҵng p ≈ 2-22. Phҫn chӭng minh cө thӇ cӫa phҫn này ÿѭӧc chúng tơi thӵc hiӋn lҥi
và trình bày tѭӡng minh ӣ phҫn III.
1.4 Right Initial Value (các b˱ͣc 0 - 11 cͯa MD4)

8



Vҩn ÿӅ cịn lҥi là tính va chҥm vӟi giá trӏ ban ÿҫu IVo cӫa MD4. Giҧ sӱ có mӝt
‘inner almost-collision’ vӟi giá trӏ khӣi ÿҫu (A, B, C, D). Lҩy ngүu nhiên các giá
trӏ X1, X2, X3, X5 (X0, X4 và X8 ÿã ÿѭӧc cӕ ÿӏnh). Tính compress 50 (IVo; X0, …,
X5). Lúc này A5 = A4, B5 = B4 = B3, C5 = C4 = C3 = C2, D5 là cӕ ÿӏnh. TiӃp theo ta
tìm X6, X7, X9, X10 và X11 sao cho ÿҫu ra cӫa compress 110 trùng vӟi (A, B, C, D).
Nói cách khác:
compress 116 ((A4, B3, C2, D5);X6, …, X11) = (A, B, C, D)
Tӯ bѭӟc 8 cӫa MD4, ta có:
A8 = (A4 + F(B7, C6, D5) + X8)<<3
Tӯ công thӭc này, ta thҩy rҵng A8 = A nӃu B7 = -1 = 0xffffffff và C6 = A<<29 - A4
- X8. Ý tѭӣng này dүn tӟi các biӇu thӭc sau:
X6 = -C2 - F(D5, A4, B3) + (A<<29 - A4 - X8)<<21,
C6 = (C2 + F(D5, A4, B3)+X6)<<11 = A<<29 - A4 - X8
X7 = -B3 - F(C6, D5, A4) -1
B7 = (B3 + F(C6, D5, A4) + X7)<<19 = -1
A8 = (A4 + F(-1, C6, D5) + X8)<<3 = A
X9 = D<<25 - D5 - F(A, -1, C6)
D9 = (D5 + F(A, -1, C6) + X9)<<7 = D
X10 = C<<21 - C6 - F(D, A, -1)
C10 = (C6 + F(D, A, -1) + X10)<<11 = C
X11 = B<<13 + 1 - F(C,D,A)
B11 = (-1 + F(C,D,A) + X11)<<19 = B
Có nghƭa là chúng ta có:
compress 110 ((A4, B3, C2, D5);X0, …, X11) = (A11, B11, C11, D11)
= (A8, B11, C10, D9) = (A, B, C, D)
1.5 Thu̵t tốn tìm ki͇m va ch̩m
Chúng ta ÿã mô tҧ cҧ 3 phҫn tҩn công cӫa MD4, ÿӃn ÿây ta có mӝt thuұt tốn tәng
quan cho tìm kiӃm va chҥm ÿӕi vӟi MD4:

1. Tính A, B, C, D và X12, X13, X14, X15, X0, X4, X8 ÿӇ tìm ‘inner almostcollision’ (tӯ bѭӟc 12 ÿӃn 19). Thuұt toán chi tiӃt ÿѭӧc mô tҧ trong phҫn
1.2.
2. Theo phҫn 1.3 và 1.4 ӣ trên, chӑn X1, X2, X3, X4 ngүu nhiên và tính:
(A5, B5, C5, D5) = compress 50 (IVo; X0, …, X5),
t = A<<29 - A5 - X8,
X6 = t<<21-C5 - F(D5, A5, B5) ,
X7 = -B5 - F(t, D5, A5) -1

(27)
(28)
(29)
(30)
9


X9 = D<<25 - D5 - F(A, -1, t),
X10 = C<<21 - t - F(D, A, -1)
X11 = B<<13 + 1 - F(C,D,A)
20
(A35, B35, C35, D35) = compress 35
(A19, B19, C19, D19);X),
~

~

~

~

~


~

~

~

20
( A 35 , B 35 , C 35 , D 35 ) = compress 35
( ( A19 , B 19 , C 19 , D19 ) ;X),

(31)
(32)
(33)
(34)
(35)

3. NӃu ∆35 = 0, thì chúng ta ÿã tìm ÿѭӧc collision. NӃu khơng thì nhҧy vӅ
bѭӟc 2.
2. Sѫ ÿӗ thuұt tốn
a. Thuұt tốn tìm kiӃm va chҥm

Begin

Tìm inner almost-collision
(Tính A, B, C, D và X0, X4, X8, X12,
X13, X14, X15)

Tҩn công vi sai modulo 232 - tìm va chҥm
Tìm các X1, X2, X3, X5 (sao cho ∆35 = 0)

NӃu ∆35 = 0 thì tìm ÿѭӧc va chҥm

End

b. Thuұt tốn tìm Inner almost-collision

10


A*, B*, C*, D*, Z, W = random();
~

~

~

Tính Z , W , V , V
S
Test_23();
Ĉ
n = n + 4;
gettimeofday(t1);
Aa_save=A*; Ba_save=B*;
Ca_save=C*; Da_save=D*;
W save=W, Z save=Z;
A* = Aa_save + ROTATE_LEFT(1, random());
B* = Ba_save + ROTATE_LEFT(1, random());
C* = Ca_save + ROTATE_LEFT(1, random());
D* = Da_save + ROTATE_LEFT(1, random());
W* = W_save + ROTATE_LEFT(1, random());

Z* = Z save + ROTATE LEFT(1 random());

S

Test 23()
Ĉ
Test 25(i)
Ĉ
Test_26()

S

S

Ĉ
Ghi l¹i A*, B*, C*, D*, Z vµ W vµo Aa_save,
Ba_save, ... W_save.
TÝnh X[i] , i = 0, 4, 8, 12, 13, 14, 15
S
i < 32
Ĉ
Output: Aa_save, Ba_save, ... Da_save,
Z_save, W_save, X[i], i =0, 4, 8, 12,
13, 14, 15

11


3. Các nhұn xét trong quá trình lұp trình tҩn cơng MD4
Dӵa trên thuұt tốn ÿѭӧc Dobbertin mơ tҧ, chúng tơi ÿã lұp trình cho thuұt tốn

thám, chѭѫng trình ÿѭӧc viӃt bҵng ngôn ngӳ C và chҥy trên máy Dell - 350MHz.
- HiӋu chӍnh mӝt sӕ công thӭc: do soҥn thҧo, bài báo ÿã ÿѭӧc in vӟi mӝt vài chӛ
không chính xác. Chúng tơi ÿã sӱa lҥi cho ÿúng logic, ÿó là các chӛ sau:
~

1. Ӣ dịng 20, trang 6. Nguyên bҧn là thiӃt lұp U = -1 = 0xffffffff,

U = 0.

~

Ĉúng phҧi là U = -1 = 0xffffffff, U = 0.
~ << 25

2. BiӇu thӭc (22) - trang 6. Nguyên bҧn là: C = V

− V <<25 , ÿѭӧc sӱa lҥi ÿúng

~ << 25

là: C = V <<25 − V .
3. BiӇu thӭc (24) và (25) - trang 6, 7. Nguyên bҧn là:
~

~

~ <<13

~


~

~ <<13

F (W , V ,−1) − F (W , V ,0) − Z

+ Z <<13 = 0


F (W , V ,−1) − F (W , V ,0) − Z

+ Z <<13

ÿѭӧc sӱa lҥi cho ÿúng nhѭ sau:
~

~

~ <<13

~

~

~ <<13

F (W , V ,0) − F (W , V ,−1) − Z

+ Z <<13 = 0



F (W , V ,0) − F (W , V ,−1) − Z

+ Z <<13 .

- Thuұt tốn tìm ‘inner almost-collision’ ÿѭӧc trình bày ӣ phҫn 1.2 ÿѭӧc tác giҧ
mơ tҧ chҥy dѭӟi 1 giây. Song trong lұp trình thӱ nghiӋm, thì chѭѫng trình chҥy
khá lâu (vài ngày) vүn khơng ra kӃt quҧ. Thơng thѭӡng có thӇ test biӇu thӭc (25)
vӟi 16, 20 và 24 vӟi khoҧng thӡi gian ngҳn (vài giây).
- Phát hiӋn và cҧi tiӃn thuұt tốn:
• Qua seminar nhóm, phân tích và chҥy chѭѫng trình rҩt nhiӅu lҫn, trên nhiӅu
máy tính khác nhau, kӃt quҧ nhѭ sau: ӣ mӛi thӡi ÿiӇm chѭѫng trình có thӇ
tìm ngay ra ÿѭӧc ‘inner almost-collision’ dѭӟi mӝt giây (nhѭ tác giҧ ÿã
trình bày). Nhѭ vұy có thӇ “phӓng ÿốn” thuұt tốn “xҩp xӍ tiӃp tөc” ÿѭӧc
sӱ dөng có ý nghƭa nhѭ sau: vӟi mӛi bӝ “giá trӏ cѫ sӣ” (basic value) có thӇ
tìm ÿѭӧc bӝ “giá trӏ cѫ sӣ” mӟi ӣ mӝt lân cұn nhӓ nào ÿó cӫa cѫ sӣ cNJ. Và
nӃu sau mӝt khoҧng nào ÿó mà khơng thҩy thì xác suҩt thành cơng cӫa
thuұt tốn sӁ rҩt nhӓ. Do ÿó, thuұt toán ÿѭӧc cҧi tiӃn nhѭ sau: vӟi mӛi bӝ
giá trӏ cѫ sӣ A*, B*, C*, D*, Z, W ta chӍ test và tìm “cѫ sӣ” mӟi sau mӝt
khoҧng thӡi gian nhӓ 2 giây. Cҧi tiӃn này rҩt có hiӋu quҧ trong viӋc tìm ra
“inner almost-collision”.

12


• Ngồi ra, cịn nhұn thҩy rҵng hàm tҥo sӕ ngүu nhiên ramdom() thѭӡng là
thanh ghi dӏch có phҧn hӗi, nӃu ÿѭӧc khӣi tҥo vӟi cùng mӝt “mҫm khố”
thì tính ngүu nhiên là khơng có. Nói khác ÿi thì các giá trӏ “cѫ sӣ” lҫn sau
vүn giӕng các kӃt quҧ cӫa lҫn trѭӟc. Do ÿó ÿӇ ÿҧm bҧo tính ngүu nhiên,
chѭѫng trình sӁ liên tөc thay ÿәi “mҫm khố” bҵng cách lҩy thӡi gian tính

theo nanogiây và giây cӫa ÿӗng hӗ hӋ thӕng. Nhѭ vұy ÿҧm bҧo viӋc tҥo các
cѫ sӣ là hồn tồn ngүu nhiên.
• Vӟi cҧi tiӃn mӟi này, chúng tơi ÿã tìm ÿѭӧc rҩt nhiӅu các va chҥm khác
nhau (trung bình khoҧng 1h15 phút chúng tơi có thӇ tìm ÿѭӧc 1 hҫu va
chҥm bên trong). Chú ý rҵng vӟi mӛi mӝt hҫu va chҥm bên trong tìm ÿѭӧc,
chúng ta có thӇ tìm ÿѭӧc rҩt nhiӅu các va chҥm (mà theo tác giҧ là khoҧng
2106 va chҥm). Các va chҥm này ÿѭӧc kiӇm tra lҥi vӟi MD4, tҩt cҧ ÿӅu ÿúng
(2 thơng ÿiӋp có cùng hash value). Mӝt vài va chҥm cө thӇ mà chúng tơi
tìm thҩy ÿѭӧc trích ӣ phҫn dѭӟi.
- Thӱ nghiӋm vӟi va chҥm có nghƭa mà tác giҧ ÿѭa ra (bҧn hӧp ÿӗng mua bán
ÿѭӧc sӱa ÿi phҫn giá cҧ - khác mӝt con sӕ). ĈiӅu này ÿúng nhѭ tác giҧ ÿã mô tҧ,
cҧ 2 thông ÿiӋp này ÿӅu cho ra mӝt giá trӏ hash.
- Mӝt vài kӃt quҧ thӵc thi cӫa chѭѫng trình thám MD4:
1. Vӟi hҫu va chҥm tìm ÿѭӧc sau:
A* = 0xde9f958e, B* = 0x4a65d27d, C* = 0x63e55380,
D* = 0x0b73a3e5, Z = 0x5d15702b, W = 0xedfbcfdd
Ta có cһp va chҥm thӭ 1:
X0
X1
X2
X3
X4
X5
X6
X7
~

=
=
=

=
=
=
=
=

0xa3537919,
0x47baaf9a,
0x1703078c,
0x18b21760,
0xf03b4df9,
0x5a2ef2b7,
0xfffbdd44,
0x1c014184,

X8 = 0x189bf784,
X9 = 0x3c58eacc,
X10 = 0x2bac77bd,
X11 = 0x58807999,
X12 = 0x905ad5e6,
X13 = 0x57c508d9,
X14 = 0xfffdbf79,
X15 = 0xc00b9bc6.
~

và X i = X i , vӟi i ≠ 12 và X 12 = X 12 + 1 = 0x905ad5e7.
2. Vӟi hҫu va chҥm tìm ÿѭӧc sau:
A* = 0x6eb77687, B* = 0x93c2936e, C* = 0xa932145e,
D* = 0x2d224171, Z = 0xaf1cd175, W = 0xffffefdf


13


Ta có cһp va chҥm thӭ 2:
X0
X1
X2
X3
X4
X5
X6
X7
~

=
=
=
=
=
=
=
=

0x93547538,
0x6935d3a3,
0x5b7379ad,
0x4bbb4f7c,
0x3f26a09d ,
0x30b664f5,
0x6bc0a73,

0x2819a7c,

X8 = 0x761bde1d,
X9 = 0x064bd926,
X10 = 0xbaa1401d,
X11 = 0x5a827999,
X12 = 0xc92afeaf,
X13 = 0x3fc28c94,
X14 = 0xfffffffd,
X15 = 0x00000605.

~

và X i = X i , vӟi i ≠ 12 và X 12 = X 12 + 1 = 0xc92afeb0.

III - TÍNH TỐN LҤI XÁC SUҨT THÀNH CƠNG Ӣ BѬӞC 2
Mөc ÿích làm sáng tӓ mөc 4 (Differential Attack Modulo 232) ÿѭӧc trình bày trong
bài báo “Cryptanalysis of MD4” cӫa Dobbertin. Ĉây là thӫ tөc tҩn cơng vi sai ÿӇ
cho phép ta tìm các va chҥm cho hàm nén cӫa MD4.
Nhѭ ÿã trình bày ӣ phҫn II, tѭ tѭӣng chӫ ÿҥo cho thám mã MD4 là dӵa trên
phѭѫng pháp “xҩp xӍ tiӃp tөc” (continuous approximation), nhѭng vҩn ÿӅ quyӃt
ÿӏnh tӟi khҧ năng thành công cӫa thuұt tốn cNJng cҫn phҧi làm sáng tӓ. Ĉó là:
• viӋc chӑn ∆19 = (0, 1<<25, -1<<5, 0) và
• viӋc ÿѭa ra bҧng 3 vӟi các xác suҩt cho tӯng bѭӟc trong bҧng.
NӃu làm rõ ÿѭӧc viӋc này thì ta có thӇ hӑc ÿѭӧc phѭѫng pháp ÿӇ có thӇ sӱ dөng
cho viӋc phân tích, thám mã các hàm hash dӵa trên MD4 khác. ĈӇ tiӋn theo dõi
quá trình trình bày ӣ dѭӟi, chúng ta có thӇ tham khҧo Bҧng 3(ӣ trên).
Các ký hiӋu ÿѭӧc sӱ dөng trong phҫn này hѫi khác mӝt chút: Xi(0 ≤ i ≤ 15) và X’i
(0 ≤ i ≤ 15) là 2 message cҫn tìm, trong ÿó X’i bҵng vӟi Xi, trӯ X’12 = X12 + 1. Và
tѭѫng tӵ các (Aj, Bj, Cj, Dj) và (A’j, B’j, C’j, D’j) ký hiӋu cho nӝi dung 4 thanh ghi

(32 bit) sau bѭӟc thӭ j tѭѫng ӭng vӟi ÿҫu vào X và X’. Các ký hiӋu còn lҥi vүn
ÿѭӧc sӱ dөng.
Cҫn thҩy rҵng ÿӇ tìm ÿѭӧc va chҥm thì ∆35 = 0. Ta cҫn tìm giá trӏ ∆19 ÿӇ ∆35 = 0
vӟi mӝt xác suҩt là cao nhҩt, ÿӫ ÿӇ có thӇ thӵc hiӋn viӋc thám mã MD4. Ta sӁ lҫn
lѭӧt xét và tìm sӵ sai khác cӫa các thanh ghi qua tӯng bѭӟc cӫa thuұt toán.
1. Step 35
14


ĈӇ ∆35 = 0 ⇔ A35 = A’35, B35 = B’35, C35 = C’35, D35 = D’35.
Ӣ bѭӟc này chӍ có thanh ghi B35 bӏ thay ÿәi nӝi dung, ta có:

(1)

B35 = B’35
⇔ (B34 + H(C35, D35, A35) + X12 + K2)<<15 =
= (B’34 + H(C’35, D’35, A’35) + X12 + 1 + K2)<<15
Tӯ (1) ⇒ B34 - B’34 = 1.
hay: ∆34 = (0, 1, 0, 0) vӟi xác suҩt p35 = 1.
2. Step 34.
Có: ∆34 = (0, 1, 0, 0). Trong bѭӟc này chӍ có nӝi dung cӫa thanh ghi C thay ÿәi,
nên ta có:



C34 = C'34.
(C33 + H(D34, A34, B34) + X4 + K2)<<11 =
= (C’33 + H(D’34, A’34, B’34) + X4 + K2)<<11
= H(D’34, A’34, B’34) - H(D34, A34, B34).
C33 - C’33

= H(D34, A34, B34 - 1) - H(D34, A34, B34).

(2)

Xét vӃ phҧi cӫa (2) vӟi 3 biӃn D, A, B ÿӝc lұp vӟi nhau (là các thanh ghi 32 bit).
ĈӇ tìm các giá trӏ có thӇ cӫa biӇu thӭc trên và xác suҩt cӫa nó ta có thӇ sӱ dөng
phѭѫng pháp ѭӟc lѭӧng. Ta lҩy ngүu nhiêu 10.000.000 giá trӏ D, A, B và thӵc hiӋn
bҵng 1 chѭѫng trình tính xác suҩt xuҩt hiӋn các giá trӏ cӫa (2). KӃt quҧ ÿѭӧc sҳp
xӃp theo thӭ tӵ xác suҩt tӯ cao ÿӃn thҩp nhѭ sau:
The number of times take random to test: 10000000
0 Count: 3334130.
-1 Count: 3331027.
1 Count: 835112.
-2 Count: 831972.
3 Count: 208688.
-3 Count: 208669.
-4 Count: 208545.
2 Count: 208011.
.. ..
other

33%
33%
8%
8%
2%
2%
2%
2%
<<


1/(
1/(
1/(
1/(
1/(
1/(
1/(
1/(

2,999)
3,027)
11,813768)
12,16336)
47,191664)
47,192557)
47,198385)
48,15472)

*

1/191

Ӣ ÿây (2) nhұn giá trӏ 0 hoһc -1 vӟi xác suҩt cao nhҩt. Ӣ ÿây ta chӑn ÿҷng thӭc
bҵng -1 ÿӇ C33 - C’33 có sӵ sai khác rҩt nhӓ. Lúc này (2) là:
C33 - C’33
Nhѭ vұy, ta có:

= -1


vӟi xác suҩt p ≈ 1/3

15


∆33 = (0, 1, -1, 0) vӟi xác suҩt p34 ≈ 1/3
3. Step 33
Nӝi dung cӫa thanh ghi D bӏ thay ÿәi, ta có:



D33 = D’33
(D32 + H(A33, B33, C33) + X8 + K2)<<9 =
= (D’32 + H(A’33, B’33, C’33) + X8 + K2)<<9
D32 - D’32 = H(A33, B’33 -1, C’33 + 1) - H(A33, B33, C33)

(3)

Tѭѫng tӵ nhѭ Step 34, ta xét vӃ phҧi cӫa (3) vӟi A33, B33, C33 ÿӝc lұp, ta thu ÿѭӧc
kӃt quҧ nhѭ sau:
The number of times take random to test: 10000000
0 Count: 3332810.
1 Count: 1667715.
-1 Count: 1667619.
3 Count: 417511.
2 Count: 417069.
-2 Count: 416475.
các trường hợp khác

33%

16%
16%
4%
4%
4%
<

1/( 3,0015)
1/( 5,9962)
1/( 5,9962)
1/( 23,397247)
1/( 23,407413)
1/( 24,4600)
1/95

*

Chӑn vӃ phҧi cӫa (3) bҵng 0, ta có: D32 - D’32 = 0 hay ∆32 = (0, 1, -1, 0) vӟi xác
suҩt p33 ≈ 1/3.
4. Step 32
Thanh ghi A thay ÿәi, ta có:



A32 = A’32.
(A31 + H(B32, C32, D32) + …)<<3 =
= (A’31 + H(B’32, C’32, D’32) + …)<<3
A31 - A’31 = H(B32 - 1, C32 + 1, D32) - H(B32, C32, D32)

(4)


Thӵc hiӋn hoàn toàn tѭѫng tӵ ta ÿѭӧc kӃt quҧ sau:
The number of times take random to test: 10000000
0
1
-1
-3
-2
3
2
6

Count: 3332305.
Count: 1668240.
Count: 1665502.
Count: 417408.
Count: 417238.
Count: 417002.
Count: 416073.
Count: 104431.

33%
16%
16%
4%
4%
4%
4%
1%


1/(
1/(
1/(
1/(
1/(
1/(
1/(
1/(

3,0303)
5,994341)
6,003)
23,399616)
23,403526)
23,408954)
24,14248)
95,79055)

*

16


Ӣ ÿây chӍ có 0 xuҩt hiӋn vӟi xác suҩt là cao nhҩt, ta chӑn vӃ phҧi cӫa (4) bҵng 0,
có:
∆31 = (0, 1, -1, 0), vӟi xác suҩt p32 ≈ 1/3
Chú ý:
Ӣ ÿây tác giҧ ÿã chӭng minh biӇu thӭc này bҵng cách chӍ ra rҵng (R+1)⊕S =
R⊕(S+1) xҧy ra vӟi xác suҩt là 1/3 vӟi R, S là các tӯ (word) ÿӝc lұp. BiӇu thӭc
này ÿѭӧc chӭng minh nhѭ sau:

BiӇu thӭc này chӍ thoҧ mãn khi và chӍ khi chính xác mӝt trong các ÿiӅu kiӋn sau
cӫa R, S xҧy ra:
R = *0

S = *0
$ = *01

S = *01
$ = *011

S = *011
….
$ = 011…11

S = 011..11
$ = 111…11

S = 111..11
Các dҩu ‘*’ ÿánh dҩu dãy bit bҩt kǤ có ÿӝ dài phù hӧp. Vì vұy chúng ta có:
p32 =

1
1
1
1
1
1
1
1 
+ 2 + 2 + ... + 62 + 64 + 64 = 1 + 63 

2
3 2 
2
4
8
2
2
2

Áp dөng ÿҷng thӭc ÿã chӭng minh này, ta có:
H(B’32, C’32, D’32) = (B32 - 1) ⊕ (C32 +1) ⊕ D32
= (B32 - 1+1) ⊕ C32 ⊕ D32, vӟi p ≈ 1/3
= H(B32, C32, D32), vӟi p ≈ 1/3
Tuy nhiên trong các bѭӟc khác nhau ta cҫn có các ÿҷng thӭc khác, mà ta chѭa thӇ
chӍ ra ÿѭӧc cách chӭng minh tѭӡng minh nhѭ trên. Chҷng hҥn vӟi Step 33, ta cҫn
chӭng minh ÿҷng thӭc R⊕(S-1) = R⊕S - 1, cNJng vӟi p ≈ 1/3. Và tӯ các bѭӟc 31
trӣ lên tӟi 20, các ÿҷng thӭc sӁ phө thuӝc vào 3 biӃn và các toán tӱ AND, OR. Tuy
nhiên tác giҧ nói rҵng có thӇ tìm ÿѭӧc xác suҩt trên bҵng phѭѫng pháp Monte
Carlo ÿѫn giҧn.
5. Step 31
Có B31 - B’31 = 1

(B30 + G(C31, D31, A31) + ….)<<13 =
=1 - (B’30 + G(C’31, D’31, A’31) + …)<<13


B30 - B’30 = 1<<19 + G(C31 + 1, D31, A31) - G(C31, D31, A31)

(5)


17


Xét biӇu thӭc G(C31 + 1, D31, A31) - G(C31, D31, A31), thӵc hiӋn tѭѫng tӵ nhѭ các
bѭӟc ӣ trên ta có:
The number of times take random to test: 10000000
1
0
-1
2
4
-3
-2
3
. .

Count: 3334909.
Count: 3331574.
Count: 833767.
Count: 832756.
Count: 208647.
Count: 208558.
Count: 207949.
Count: 207770.
.

33%
33%
8%
8%

2%
2%
2%
2%

1/(
1/(
1/(
1/(
1/(
1/(
1/(
1/(

2,998)
3,0015)
11,828563)
12,6928)
47,193591)
47,197774)
48,18448)
48,27040)

*

Chӑn giá trӏ 0 cho biӇu thӭc này, (5) trӣ thành:
B30 - B’30 = 1<<19 hay
∆30 = (0, 1<<19, -1, 0) vӟi xác suҩt p ≈ 1/3
6. Step 30
C30 - C’30 = -1


(C29 + G(D30, A30, B30) + ….)<<9 =
=-1 - (C’29 + G(D’30, A’30, B’30) + …)<<9


C29 - C’29 = -1<<23 + G(D30, A30, B30 - 1<<19) - G(C31, D31, A31)

(6)

Xét biӇu thӭc G(D30, A30, B30 - 1<<19) - G(C31, D31, A31) và thӵc hiӋn viӋc tѭѫng tӵ
ta thu ÿѭӧc kӃt quҧ sau:
The number of times take random to test: 10000000
0
-524288
524288
-1048576
1572864
-1572864
-2097152
1048576
-3670016

Count: 3335877.
Count: 3330779.
Count: 833543.
Count: 833126.
Count: 208995.
Count: 208517.
Count: 208331.
Count: 207572.

Count:
52169.

33%
33%
8%
8%
2%
2%
2%
2%
0%

1/( 2,9977)
1/( 3,0023)
1/( 11,831027)
1/( 12,2488)
1/( 47,177235)
1/( 47,199701)
1/( 48, 112)
1/( 48,36544)
1/(191,35721)

*

Chӑn giá trӏ 0 cho biӇu thӭc này, ta có:
∆29 = (0, 1<<19, -1<<23, 0) vӟi xác suҩt p29 ≈ 1/3.

18



7. Step 29
Có: D29 = D’29.

(D28 + G(A29, B29, C29) + ….)<<5 =
= (D’28 + G(A’29, B’29, C’29) + …)<<5


D28 - D’28 = G(A29, B29 -1<<29, C29 + 1<<23) - G(A29, B29, C29)

(7)

Thӵc hiӋn tính các giá trӏ có thӇ vӟi vӃ phҧi cӫa ÿҷng thӭc (7) ta thu ÿѭӧc kӃt quҧ
sau:
The number of times take random to test: 10000000
0
7864320
-524288
8388608
524288
7340032
-8388608
16252928
.. ..

Count:
Count:
Count:
Count:
Count:

Count:
Count:
Count:

1120114.
1118482.
1113614.
1113495.
286781.
286216.
283803.
282537.

11%
11%
11%
11%
2%
2%
2%
2%

1/(
1/(
1/(
1/(
1/(
1/(
1/(
1/(


8,927)
8,9406)
8,9797)
8,9807)
34,249446)
34,268656)
35,66895)
35,111205)

*

Ta chӑn giá trӏ cho biӇu thӭc này bҵng 0. Khi ÿó (7) là:
D28 - D’28 = 0 hay
∆28 = (0, 1<<19, -1<<23, 0) vӟi xác suҩt p29 ≈ 1/9
8. Step 28.
Có A28 = A’28.



(A27 + G(B28, C28, D28) + ….)<<3 =
= (A’27 + G(B’28, C’28, D’28) + …)<<3
A27 - A’27 = G(B28 - 1<<19, C28 + 123, D28) - G(B28, C28, D28)

(8)

Thӵc hiӋn tѭѫng tӵ vӟi vӃ phҧi cӫa (8). Ta thu ÿѭӧc các kӃt quҧ sau:
The number of times take random to test: 10000000
0
7864320

8388608
-524288
524288
7340032
16252928
-8388608

Count:
Count:
Count:
Count:
Count:
Count:
Count:
Count:

1119764.
1119595.
1115341.
1114095.
286932.
286814.
283250.
283090.

11%
11%
11%
11%
2%

2%
2%
2%

1/(
1/(
1/(
1/(
1/(
1/(
1/(
1/(

8,93045)
8,931801)
8,9656)
8,975895)
34,244312)
34,248324)
35,86250)
35,91850)

*

19


Ta chӑn vӃ phҧi cӫa (8) bҵng 0, lúc này (8) là:
A27 - A’27 = 0 hay
∆27 = (0, 1<<19, -1<<23, 0) vӟi xác suҩt p28 ≈ 1/9

9. Step 27

B27 - B’27 = 1<<19.



(B26 + G(C27, D27, A27) + ….)<<13 =
= (B’26 + G(C’27, D’27, A’27) + …)<<13 + 1<<19.
B26 - B’26 = 1<<6 + G(C27 + 1<<23, D27, A27) - G(C27, D27, A27)

(9)

Xét biӇu thӭc G(C27 + 1<<23, D27, A27) - G(C27, D27, A27), thӵc hiӋn tѭѫng tӵ nhѭ
trên ta có kӃt quҧ sau:
The number of times take random to test: 10000000
8388608
0
16777216
-8388608
33554432
-16777216

Count: 3333159.
Count: 3331763.
Count: 833481.
Count: 833163.
Count: 208731.
Count: 208505.

33%

33%
8%
8%
2%
2%

1/(
1/(
1/(
1/(
1/(
1/(

3,0001)
3,0014)
11,831709)
12,2044)
47,189643)
47,200265

*

Lҩy giá trӏ 0 cho biӇu thӭc này, lúc này (9) là:
B26 - B’26 = 1<<6 hay
∆26 = (0, 1<<6, -1<<23, 0) vӟi xác suҩt p27 ≈ 1/3.
10. Step 26.

C26 - C’26 = -1<<23.




(C25 + G(D26, A26, B26) + ….)<<9 =
= (C’25 + G(D’26, A’26, B’26) + …)<<9 - 1<<23.
C25 - C’25 = -1<<14 + G(D26, A26, B26 - 1<<6) - G(D26, A26, B26)

(10)

Xét biӇu thӭc G(D26, A26, B26 - 1<<6) - G(D26, A26, B26), tính tốn theo cách tѭѫng
tӵ, ta có:
The number of times take random to test: 10000000
0
-64

Count: 3333617.
Count: 3333040.

33% 1/(
33% 1/(

2,99974)
3,00026)

*

20


64
-128
-256

-192

Count:
Count:
Count:
Count:

833875.
831272.
209087.
208544.

8%
8%
2%
2%

1/(
1/(
1/(
1/(

11,827375)
12,24736)
47,172911)
47,198432

Chӑn giá trӏ 0 cho biӇu thӭc này, ta sӁ có:
C25 - C’25 = -1<<14 hay
∆25 = (0, 1<<6, -1<<14, 0) vӟi xác suҩt p26 ≈ 1/3.

11. Step 25

D25 = D’25.



(D24 + G(A25, B25, C25) + ….)<<5 =
= (D’24 + G(A’25, B’25, C’25) + …)<<5
D24 - D’24 = G(A25, B25 - 1<<6, C25 + 1<<14) - G(A25, B25, C25)

(11)

Xét biӇu thӭc vӃ phҧi cӫa (11). KӃt quҧ tính tốn nhѭ sau:
The number of times take random to test: 10000000
0
16384
-64
16320
-16448
16256
32704

Count:
Count:
Count:
Count:
Count:
Count:
Count:


1112047.
1111843.
1110745.
1109409.
278556.
278056.
277964.

11%
11%
11%
11%
2%
2%
2%

1/( 8,9924)
1/( 8,9940)
1/( 9,0029)
1/( 9,0138)
1/( 35,250540)
1/( 35,268040)
1/( 35,271260)

*

Lҩy giá trӏ 0 cho biӇu thӭc này. (11) là:
D24 - D’24 = 0 hay
∆24 = (0, 1<<6, -1<<14, 0) vӟi xác suҩt p25 ≈ 1/9.
12. Step 24


A24 = A’24.



(A23 + G(B24, C24, D24) + ….)<<3 =
= (A’23 + G(B’24, C’24, D’24) + …)<<3
A23 - A’23 = G(B24 - 1<<6, C24 + 1<<14, D24) - G(B24, C24, D24)

(12)

Xét và tính tốn vӟi vӃ phҧi cӫa (12) có:
The number of times take random to test: 10000000
-64
0

Count: 1111760.
Count: 1111338.

11% 1/(
11% 1/(

8,99474)
8,99816)

*

21



16384
16320
16256
32704

Count: 1109959.
Count: 1109594.
Count: 278239.
Count: 278065.

11%
11%
2%
2%

1/( 9,0093)
1/( 9,0123)
1/( 35,261635)
1/( 35,267725)

Lҩy vӃ phҧi cӫa (12) bҵng 0, ta có:
∆23 = (0, 1<<6, -1<<14, 0) vӟi xác suҩt p24 ≈ 1/9.
13. Step 23

B23 = B’23 + 1<<6.



(B22 + G(C23, D23, A23) + ….)<<13 =
= (B’22 + G(C’23, D’23, A’23) + …)<<13 +1<<6

B22 - B’22 = 1<<25 + G(C23 + 1<<14, D23, A23) - G(C23, D23, A23)

(13)

Xét và tính tốn biӇu thӭc G(C23 + 1<<14, D23, A23) - G(C23, D23, A23) tѭѫng tӵ, ta
thu ÿѭӧc kӃt quҧ sau:
The number of times take random to test: 10000000
0
16384
32768
-16384
49152
-49152

Count: 3333428.
Count: 3331739.
Count: 833840.
Count: 832806.
Count: 208990.
Count: 208843.

33%
33%
8%
8%
2%
2%

1/(
1/(

1/(
1/(
1/(
1/(

2,9999)
3,001)
11,827760)
12,6328)
47,177470)
47,184379)

*

Ta lҩy 0 cho biӇu thӭc này, (13) có dҥng:
B22 - B’22 = 1<<25
hay ∆22 = (0, 1<<25, -1<<14, 0) vӟi xác suҩt p23 ≈ 1/3.
14. Step 22

C22 = C’22 - 1<<14.



(C21 + G(D22, A22, B22) + ….)<<9 =
= (C’21 + G(D’22, A’22, B’22) + …)<<9 -1<<14
C21 - C’21 = -1<<5 + G(D22, A22, B22 - 1<<25) - G(D22, A22, B22)

(14)

Xét và tính tốn các giá trӏ có thӇ cho biӇu thӭc G(D22, A22, B22 - 1<<25) - G(D22,

A22, B22), ta có kӃt quҧ nhѭ sau:
The number of times take random to test: 10000000
0
-33554432

Count: 3334895.
Count: 3332571.

33% 1/(
33% 1/(

2,9985)
3,0006)

*

22


33554432
-67108864
67108864
100663296
-100663296

Count:
Count:
Count:
Count:
Count:


834775.
833416.
210048.
209509.
207098.

8%
8%
2%
2%
2%

1/(
1/(
1/(
1/(
1/(

11,817475)
11,832424)
47,127744)
47,153077)
48,59296)

Lҩy 0 cho biӇu thӭc này, (14) có dҥng nhѭ sau:
C21 - C’21 = -1<<5 hay
∆21 = (0, 1<<25, -1<<5, 0) vӟi xác suҩt p22 ≈ 1/3.
15. Step 21


D21 = D’21.



(D20 + G(A21, B21, C21) + ….)<<5 =
= (D’20 + G(A’21, B’21, C’21) + …)<<5
D20 - D’20 = G(A21, B21-1<<25, C21 + 1<<5) - G(A21, B21, C21)

(15)

Xét và tính tốn các giá trӏ có thӇ cho vӃ phҧi cӫa biӇu thӭc (15) ta có:
The number of satisfy numbers: 1000000
32
-33554432
0
-33554400
33554432
64

Count:
Count:
Count:
Count:
Count:
Count:

111534.
110985.
110909.
110732.

28242.
27963.

11%
11%
11%
11%
2%
2%

1/
1/
1/
1/
1/
1/

8,9658
9,0102
9,0164
9,0308
35
35

*

Lҩy giá trӏ 0 cho biӇu thӭc này, (15) có dҥng sau:
D20 - D’20 = 0 hay
(0, 1<<25, -1<<5, 0) vӟi xác suҩt p21 ≈ 1/9.
16. Step 20


A20 = A’20.



(A19 + G(B20, C20, D20) + ….)<<3 =
= (A’19 + G(B’20, C’20, D’20) + …)<<3
A19 - A’19 = G(B20 - 1<<25, C20 + 1<<5, D20) - G(B20, C20, D20)

(16)

Xét và tính tốn các giá trӏ có thӇ cho vӃ phҧi cӫa biӇu thӭc (16) ta có:
The number of times take random to test: 10000000
0
32

Count: 1147000.
Count: 1129000.

11%
11%

1/(
1/(

8,7183)
8, 85)

*


23