際際滷

際際滷Share a Scribd company logo
1.3.4.3. Hm bm v ch畛 k箪 s畛.
1. Gi畛i thi畛u hm bm
Vi畛c s畛 d畛ng c叩c h畛 m畉t m達 v c叩c s董 畛 ch畛 k箪 s畛, th動畛ng l m達 h坦a v k箪
s畛 tr棚n t畛ng bit c畛a th担ng tin, s畉 t畛 l畛 v畛i th畛i gian 畛 m達 h坦a v dung l動畛ng c畛a
th担ng tin. Th棚m vo 坦 c坦 th畛 x畉y ra tr動畛ng h畛p: V畛i nhi畛u b畛c th担ng i畛p 畉u
vo kh叩c nhau, s畛 d畛ng h畛 m畉t m達, s董 畛 k箪 s畛 gi畛ng nhau (c坦 th畛 kh叩c nhau) th狸
cho ra k畉t qu畉 b畉n m達, b畉n k箪 s畛 gi畛ng nhau (叩nh x畉 N-1: nhi畛u  m畛t), nh動 H狸nh
1-6. i畛u ny s畉 d畉n 畉n m畛t s畛 r畉c r畛i v畛 sau cho vi畛c x叩c th畛c th担ng tin.
V畛i c叩c s董 畛 k箪 s畛, ch畛 cho ph辿p k箪 c叩c b畛c th担ng i畛p (th担ng tin) c坦 k鱈ch
th動畛c nh畛 v sau khi k箪, b畉n k箪 s畛 c坦 k鱈ch th動畛c g畉p 担i b畉n th担ng i畛p g畛c  v鱈
d畛 v畛i s董 畛 ch畛 k箪 chu畉n DSS ch畛 k箪 tr棚n c叩c b畛c th担ng i畛p c坦 k鱈ch th動畛c 160
bit, b畉n k箪 s畛 s畉 c坦 k鱈ch th動畛c 320 bit. Trong khi 坦 tr棚n th畛c t畉, ta c畉n ph畉i k箪
c叩c th担ng i畛p c坦 k鱈ch th動畛c l畛n h董n nhi畛u, ch畉ng h畉n vi ch畛c MegaByte. H董n
n畛a, d畛 li畛u truy畛n qua m畉ng kh担ng ch畛 l b畉n th担ng i畛p g畛c, m c嘆n bao g畛m c畉
b畉n k箪 s畛 (c坦 dung l動畛ng g畉p 担i dung l動畛ng b畉n th担ng i畛p g畛c), 畛 叩p 畛ng
vi畛c x叩c th畛c sau khi th担ng tin 畉n ng動畛i nh畉n.
Th担ng i畛p x

Th担ng i畛p y

H畛 m畉t m達 hay
S董 畛 k箪 s畛

B畉n m達
hay B畉n
k箪 s畛

Th担ng i畛p z
Ngu畛n

鱈ch
H狸nh 1.6: Nhi畛u th担ng i畛p ngu畛n cho c湛ng m畛t k畉t qu畉 sau m達 h坦a/ k箪 s畛
M畛t c叩ch 董n gi畉n 畛 gi畉i bi to叩n (v畛i th担ng i畛p c坦 k鱈ch th動畛c vi ch畛c
MB) ny l chia th担ng i畛p thnh nhi畛u o畉n 160 bit, sau 坦 k箪 l棚n c叩c o畉n 坦
畛c l畉p nhau. Nh動ng bi畛n ph叩p ny c坦 m畛t s畛 v畉n 畛 trong vi畛c t畉o ra c叩c ch畛 k箪
s畛:
 Th畛 nh畉t: v畛i m畛t th担ng i畛p c坦 k鱈ch th動畛c a, th狸 sau khi k箪 k鱈ch th動畛c c畛a
ch畛 k箪 s畉 l 2a (trong tr動畛ng h畛p s畛 d畛ng DSS).
 Th畛 hai: v畛i c叩c ch畛 k箪 an ton th狸 t畛c 畛 ch畉m v狸 ch炭ng d湛ng nhi畛u ph辿p
t鱈nh s畛 h畛c ph畛c t畉p nh動 s畛 m滴 modulo.
 Th畛 ba: v畉n 畛 nghi棚m tr畛ng h董n 坦 l k畉t qu畉 sau khi k箪, n畛i dung c畛a th担ng
i畛p c坦 th畛 b畛 x叩o tr畛n c叩c o畉n v畛i nhau, ho畉c m畛t s畛 o畉n trong ch炭ng c坦 th畛 b畛 m畉t
m叩t, trong khi ng動畛i nh畉n c畉n ph畉i x叩c minh l畉i th担ng i畛p. Ta c畉n ph畉i b畉o v畛 t鱈nh ton
v畉n c畛a th担ng i畛p.

Gi畉i ph叩p cho c叩c v畉n 畛 v動畛ng m畉c 畉n ch畛 k箪 s畛 l d湛ng hm bm 畛 tr畛
gi炭p cho vi畛c k箪 s畛. C叩c thu畉t to叩n bm v畛i 畉u vo l c叩c b畛c th担ng i畛p c坦 dung
l動畛ng, k鱈ch th動畛c t湛y 箪 (vi KB 畉n vi ch畛c MB th畉m ch鱈 h董n n畛a)  c叩c b畛c
th担ng i畛p c坦 th畛 l d畉ng vn b畉n, h狸nh 畉nh, 但m thanh, file 畛ng d畛ng v.v - v
v畛i c叩c thu畉t to叩n bm: MD2, MD4, MD5, SHA cho c叩c b畉n bm 畉u ra c坦 k鱈ch
th動畛c c畛 畛nh: 128 bit v畛i d嘆ng MD, 160 bit v畛i SHA.
Nh動 v畉y, b畛c th担ng i畛p k鱈ch th動畛c t湛y 箪 sau khi bm s畉 動畛c thu g畛n thnh
nh畛ng b畉n bm  動畛c g畛i l c叩c vn b畉n 畉i di畛n  c坦 k鱈ch th動畛c c畛 畛nh (128
bit ho畉c 160 bit). V畛i m畛i th担ng i畛p 畉u vo ch畛 c坦 th畛 t鱈nh ra 動畛c m畛t vn b畉n
畉i di畛n  gi叩 tr畛 bm t動董ng 畛ng  duy nh畉t. Gi叩 tr畛 bm 動畛c coi l 畉c th湛 c畛a
th担ng i畛p, gi畛ng nh動 d畉u v但n tay c畛a m畛i ng動畛i. Hai th担ng i畛p kh叩c nhau ch畉c
ch畉n c坦 hai vn b畉n 畉i di畛n kh叩c nhau. Khi 達 c坦 vn b畉n 畉i di畛n duy nh畉t cho
b畛c th担ng i畛p, 叩p d畛ng c叩c s董 畛 ch畛 k箪 s畛 k箪 tr棚n vn b畉n 畉i di畛n 坦.
C董 ch畉 g畛i th担ng tin s畛 d畛ng hm bm tr畛 gi炭p cho ch畛 k箪 s畛 動畛c m担 t畉
theo th畛 t畛 c叩c H狸nh 1.7(1.7a, 1.7b, 1.7c).
畛 di tu畛 箪
Th担ng i畛p(b畉n r探)
x
(vn b畉n, 但m thanh,
h狸nh 畉nh,)

Bm th担ng i畛p
(s畛 d畛ng thu畉t to叩n MD5
ho畉c SHA)

h(x)

畛 di c畛 畛nh 128
v畛i MD5 v 160 v畛i
SHA
B畉n bm
(vn b畉n 畉i di畛n)
z=h(x)

H狸nh 1.7a: Bm th担ng i畛p.
K箪 s畛

B畉n bm
(vn b畉n 畉i di畛n)
z

(s畛 d畛ng c叩c s董 畛 k箪 s畛
RSA, DSS)

SigK(z)

B畉n k箪 s畛
y=SigK(z)

Kho叩 b鱈 m畉t
(c畛a ng動畛i d湛ng)

H狸nh 1.7b: K箪 tr棚n b畉n bm.

Ng動畛i g畛i (A)

Th担ng i畛p, B畉n k箪 s畛
(x, y)

Ng動畛i nh畉n (B)

H狸nh 1.7c: Truy畛n d畛 li畛u th担ng tin c畉n g畛i.
Gi畉 s畛 A mu畛n g畛i cho B th担ng i畛p x. A th畛c hi畛n c叩c b動畛c sau:
1. A bm th担ng i畛p x (H狸nh 1-7a), thu 動畛c b畉n 畉i di畛n z = h(x)  c坦 k鱈ch
th動畛c c畛 畛nh 128 bit ho畉c 160 bit.
2. A k箪 s畛 tr棚n b畉n 畉i di畛n z (H狸nh 1-7b), b畉ng kh坦a b鱈 m畉t c畛a m狸nh, thu 動畛c
b畉n k箪 s畛 y = sig K1 (z).
3. A g畛i (x, y) cho B (H狸nh 1.7c).

Khi B nh畉n 動畛c (x, y). B th畛c hi畛n c叩c b動畛c sau:
4. B ki畛m tra ch畛 k箪 s畛 畛 x叩c minh xem th担ng i畛p m m狸nh nh畉n 動畛c c坦 ph畉i
動畛c g畛i t畛 A hay kh担ng b畉ng c叩ch gi畉i m達 ch畛 k箪 s畛 y, b畉ng kh坦a c担ng khai
c畛a A, 動畛c z. (H狸nh 1.8a)
5. B d湛ng m畛t thu畉t to叩n bm  t動董ng 畛ng v畛i thu畉t to叩n bm m A d湛ng  畛
bm th担ng i畛p x i k竪m, nh畉n 動畛c h(x). (H狸nh 1.8b)
6. B so s叩nh 2 gi叩 tr畛 bm z v h(x), n畉u gi畛ng nhau th狸 ch畉c ch畉n r畉ng th担ng i畛p
x  m A mu畛n g畛i cho B  c嘆n nguy棚n v畉n, b棚n c畉nh 坦 c滴ng x叩c th畛c 動畛c
ng動畛i g畛i th担ng tin l ai. (H狸nh 1.8c)

B畉n k箪 s畛
y

X叩c minh ch畛 k箪
VerK(y,z)

True

y = SigK(z)

False

y  SigK(z)

Kho叩 c担ng khai
c畛a ng動畛i A

H狸nh 1.8a: X叩c minh ch畛 k箪

Bm th担ng i畛p
Th担ng i畛p(b畉n r探)
x

(s畛 d畛ng thu畉t to叩n
MD5 ho畉c SHA)

h(x)

B畉n bm
(vn b畉n 畉i di畛n)
h(x)

H狸nh 1.8b: Ti畉n hnh bm th担ng i畛p x i k竪m

H狸nh 1.8c: Ki畛m tra t鱈nh ton v畉n c畛a th担ng i畛p
Hm bm 達 tr畛 gi炭p cho c叩c s董 畛 k箪 s畛 nh畉m gi畉m dung l動畛ng c畛a d畛 li畛u
c畉n thi畉t 畛 truy畛n qua m畉ng (l炭c ny ch畛 c嘆n bao g畛m dung l動畛ng c畛a b畛c th担ng
i畛p g畛c v 256 bit (s畛 d畛ng MD) hay 320 bit (s畛 d畛ng SHA) c畛a b畛c k箪 s畛 動畛c
k箪 tr棚n b畉n 畉i di畛n c畛a th担ng i畛p g畛c), t動董ng 動董ng v畛i vi畛c gi畉m th畛i gian
truy畛n tin qua m畉ng.
Hm bm th動畛ng k畉t h畛p v畛i ch畛 k箪 s畛 畛 t畉o ra m畛t lo畉i ch畛 k箪 i畛n t畛 v畛a
an ton h董n (kh担ng th畛 c畉t/d叩n) v畛a c坦 th畛 d湛ng 畛 ki畛m tra t鱈nh ton v畉n c畛a
th担ng i畛p.
Hm bm 動畛c 畛ng d畛ng r畉t m畉nh trong v畉n 畛 an ton th担ng tin tr棚n 動畛ng
truy畛n. C叩c 畛ng d畛ng c坦 s畛 d畛ng hm bm kh担ng ch畛 畉m b畉o v畛 m畉t an ton
th担ng tin, m c嘆n t畉o 動畛c l嘆ng tin c畛a ng動畛i d湛ng v狸 h畛 c坦 th畛 d畛 dng ph叩t hi畛n
動畛c th担ng tin c畛a m狸nh c坦 c嘆n ton v畉n hay kh担ng, h畛 bi畉t r畉ng th担ng tin c畛a
m狸nh ch畉c ch畉n 動畛c b鱈 m畉t v畛i ph鱈a c叩c nh cung c畉p.
2. 畛nh ngh挑a hm bm
Hm bm l c叩c thu畉t to叩n kh担ng s畛 d畛ng kh坦a 畛 m達 h坦a (畛 但y ta d湛ng
thu畉t ng畛 bm thay cho m達 h坦a), n坦 c坦 nhi畛m v畛 l畛c (bm) th担ng i畛p 動畛c
動a vo theo m畛t thu畉t to叩n h m畛t chi畛u no 坦, r畛i 動a ra m畛t b畉n bm  vn b畉n
畉i di畛n  c坦 k鱈ch th動畛c c畛 畛nh. Do 坦 ng動畛i nh畉n kh担ng bi畉t 動畛c n畛i dung hay
畛 di ban 畉u c畛a th担ng i畛p 達 動畛c bm b畉ng hm bm.
Gi叩 tr畛 c畛a hm bm l duy nh畉t, v kh担ng th畛 suy ng動畛c l畉i 動畛c n畛i dung
th担ng i畛p t畛 gi叩 tr畛 bm ny.
3. 畉c tr動ng
Hm bm h l hm bm m畛t chi畛u (one-way hash) v畛i c叩c 畉c t鱈nh sau:


V畛i th担ng i畛p 畉u vo x thu 動畛c b畉n bm z = h(x) l duy nh畉t.



N畉u d畛 li畛u trong th担ng i畛p x thay 畛i hay b畛 x坦a 畛 thnh th担ng i畛p x th狸
h(x)  h(x). Cho d湛 ch畛 l m畛t s畛 thay 畛i nh畛 hay ch畛 l x坦a i 1 bit d畛 li畛u
c畛a th担ng i畛p th狸 gi叩 tr畛 bm c滴ng v畉n thay 畛i. i畛u ny c坦 ngh挑a l: hai
th担ng i畛p hon ton kh叩c nhau th狸 gi叩 tr畛 hm bm c滴ng kh叩c nhau.

N畛i dung c畛a th担ng i畛p g畛c kh担ng th畛 b畛 suy ra t畛 gi叩 tr畛 hm bm. Ngh挑a
l: v畛i th担ng i畛p x th狸 d畛 dng t鱈nh 動畛c z = h(x), nh動ng l畉i kh担ng th畛 (th畛c ch畉t
l kh坦) suy ng動畛c l畉i 動畛c x n畉u ch畛 bi畉t gi叩 tr畛 hm bm h
4. T鱈nh ch畉t
Vi畛c 動a hm bm h vo d湛ng trong s董 畛 ch畛 k箪 s畛 kh担ng lm gi畉m s畛 an
ton c畛a s董 畛 ch畛 k箪 s畛 v狸 n坦 l b畉n t坦m l動畛c th担ng b叩o  b畉n 畉i di畛n cho th担ng
i畛p  動畛c k箪 ch畛 kh担ng ph畉i l th担ng i畛p g畛c. i畛u c畉n thi畉t 畛i v畛i h l c畉n
th畛a m達n m畛t s畛 t鱈nh ch畉t sau 畛 tr叩nh b畛 gi畉 m畉o:
T鱈nh ch畉t 1: Hm bm h l kh担ng va ch畉m y畉u
X辿t m畛t ki畛u t畉n c担ng nh動 sau:
叩ng l畉: th担ng tin ph畉i 動畛c truy畛n 炭ng t畛 A 畉n B (H狸nh 1.9a)

H狸nh 1.9a: C叩ch i 炭ng c畛a th担ng tin
Nh動ng: tr棚n 動畛ng truy畛n, th担ng tin b畛 l畉y tr畛m v b畛 thay 畛i (H狸nh 1.9b)

H狸nh 1.9b: Th担ng tin b畛 l畉y tr畛m v b畛 thay 畛i tr棚n 動畛ng truy畛n
Ng動畛i A g畛i cho B (x, y) v畛i y = sigK(h(x)). Nh動ng tr棚n 動畛ng truy畛n, tin b畛
l畉y tr畛m. T棚n tr畛m, b畉ng c叩ch no 坦 t狸m 動畛c m畛t b畉n th担ng i畛p x c坦 h(x) =
h(x) m x  x. Sau 坦, h畉n 動a x thay th畉 x r畛i truy畛n ti畉p cho ng動畛i B. Ng動畛i B
nh畉n 動畛c v v畉n x叩c th畛c 動畛c th担ng tin 炭ng 畉n.
Do 坦, 畛 tr叩nh ki畛u t畉n c担ng nh動 H狸nh 1.9b, hm h ph畉i th畛a m達n t鱈nh
kh担ng va ch畉m y畉u: Hm bm h l kh担ng va ch畉m y畉u n畉u khi cho tr動畛c m畛t b畛c
i畛n x, kh担ng th畛 ti畉n hnh v畛 m畉t t鱈nh to叩n 畛 t狸m ra m畛t b畛c i畛n x  x m h(x)
= h(x).
T鱈nh ch畉t 2: Hm bm h l kh担ng va ch畉m m畉nh:
X辿t m畛t ki畛u t畉n c担ng nh動 sau: 畉u ti棚n, t棚n gi畉 m畉o t狸m ra 動畛c hai b畛c
th担ng i畛p x v x (x  x) m c坦 h(x) = h(x) (ta coi b畛c th担ng i畛p x l h畛p l畛,
c嘆n x l gi畉 m畉o). Ti畉p theo, h畉n 動a cho 担ng A v thuy畉t ph畛c 担ng ny k鱈 vo
b畉n t坦m l動畛c h(x) 畛 nh畉n 動畛c y. Khi 坦 (x, y) l b畛c i畛n gi畉 m畉o nh動ng h畛p
l畛.
畛 tr叩nh ki畛u t畉n c担ng ny, hm h ph畉i th畛a m達n t鱈nh kh担ng va ch畉m m畉nh:
Hm bm h l kh担ng va ch畉m m畉nh n畉u kh担ng c坦 kh畉 nng t鱈nh to叩n 畛 t狸m ra
hai b畛c th担ng i畛p x v x m x  x v h(x) = h(x).
T鱈nh ch畉t 3: Hm bm h l hm m畛t chi畛u:
X辿t m畛t ki畛u t畉n c担ng nh動 sau: Vi畛c gi畉 m畉o c叩c ch畛 k箪 tr棚n b畉n t坦m l動畛c z
th動畛ng x畉y ta v畛i c叩c s董 畛 ch畛 k箪 s畛. Gi畉 s畛 t棚n gi畉 m畉o t鱈nh ch畛 k箪 tr棚n b畉n
t坦m l動畛c z, sau 坦 h畉n t狸m m畛t b畉n th担ng i畛p x 動畛c t鱈nh ng動畛c t畛 b畉n 畉i di畛n
z, z = h(x). T棚n tr畛m thay th畉 b畉n th担ng i畛p x h畛p l畛 b畉ng b畉n th担ng i畛p x gi畉
m畉o, nh動ng l畉i c坦 z = h(x). V h畉n k箪 s畛 tr棚n b畉n 畉i di畛n cho x b畉ng 炭ng ch畛
k箪 h畛p l畛. N畉u lm 動畛c nh動 v畉y th狸 (x, y) l b畛c i畛n gi畉 m畉o nh動ng h畛p l畛.
畛 tr叩nh 動畛c ki畛u t畉n c担ng ny, h c畉n th畛a m達n t鱈nh ch畉t m畛t chi畛u: Hm
bm h l m畛t chi畛u n畉u khi cho tr動畛c m畛t b畉n t坦m l動畛c th担ng b叩o z th狸 kh担ng th畛
th畛c hi畛n v畛 m畉t t鱈nh to叩n 畛 t狸m ra th担ng i畛p ban 畉u x sao cho h(x) = z .
5. C叩c thu畉t to叩n bm
C叩c hm bm d嘆ng MD: MD2, MD4, MD5 動畛c Rivest 動a ra thu 動畛c k畉t
qu畉 畉u ra v畛i 畛 di l 128 bit. Hm bm MD4 動a ra vo nm 1990. M畛t nm
sau phi棚n b畉n m畉nh MD5 c滴ng 動畛c 動a ra. Chu畉n hm bm an ton: SHA, ph畛c
t畉p h董n nhi畛u c滴ng d畛a tr棚n c叩c ph動董ng ph叩p t動董ng t畛, 動畛c c担ng b畛 trong H畛 s董
Li棚n bang nm 1992 v 動畛c ch畉p nh畉n lm ti棚u chu畉n vo nm 1993 do Vi畛n
Ti棚u Chu畉n v C担ng Ngh畛 Qu畛c Gia (NIST), k畉t qu畉 畉u ra c坦 畛 di 160 bit.
Nh動 達 n棚u trong ph畉n 畉u, th担ng i畛p 畉u vo cho c叩c hm bm c坦 th畛 l:
d畉ng vn b畉n, d畉ng h狸nh 畉nh, d畉ng .exe .
a. Kh叩i ni畛m th担ng i畛p 畛m
Th担ng i畛p 畛m  messege padding - l m畛t x但u bit c坦 畛 di chia h畉t cho
512.
Th担ng i畛p 畛m 動畛c l動u trong m畉ng
M = M[0] M[1]  M[N-1].
Trong 坦 M[i] l x但u bit c坦 畛 di 32 bit, g畛i l word; N mod 16 = 0.
M 動畛c x但y d畛ng t畛 th担ng i畛p a b畉ng thu畉t to叩n:
B畉ng 1.7 : X但y d畛ng th担ng i畛p 畛m M t畛 a
1. d = 447  (|a| mod 512); (+ 512, tr動畛ng h畛p |a| mod 512 > 447).
2. Gi畉 s畛 l l k鱈 hi畛u bi畛u di畛n nh畛 ph但n c畛a |a| mod 264, tl: |l| = 64.
3. M = a || 1 || 0d || l

- 畛 di c畛a x但u a || 1 || 0d

l

|a| + 1 + d = 448 mod 512 .

- 畛 di c畛a Th担ng i畛p 畛m M l 448 mod 512 + 64 = 512 mod 512.
V鱈 d畛 : C坦 x但u 畉u vo a = ABC, ta c坦 k畉t qu畉 x但y d畛ng M nh動 sau:
a = ABC = "01000001 01000010 01000011"

- 畛 di t鱈nh theo bit c畛a x但u a:

|a| = 24 bit

=> d = 447  (|a| mod 512) = 423.
|a| + 1 + d = 24 + 1 + 423 = 448 mod 512.

- Bi畛u di畛n nh畛 ph但n c畛a 畛 di x但u a l l:
  00
 
l = |a| mod 264 = 24 mod 264 = 24 = 16 + 8 = ( 00..... 11000 )2
59 so

  00
 
=> 畛 di c畛a l l |l| = | 00..... 11000| = 59 + 5 = 64.
59 so

M = a || 1 || 0d || l
.....00   00
 

 
=> M = 01000001 01000010 01000011 || 1 || 00423 so || 00..... 11000
59 so

M = M[0] M[1]  M[N-1], N  0 mod 16
M[0] = 01000001 01000010 01000011 10000000
  00
 
M[1] = M[2] = .. = M[13] = M[14] = 00.....
32 so

M[15] = 00000000 00000000 00000000 00011000
Trong vi畛c x但y d畛ng M, ta g畉n s畛 1 董n l畉 vo sau a, sau 坦 th棚m ti畉p c叩c s畛
0 vo 畛 畛 畛 di c畛a M 畛ng d動 v畛i 448 modulo 512. Cu畛i c湛ng n畛i th棚m 64 bit
(ch鱈nh l |l|) ch畛a bi畛u di畛n nh畛 ph但n v畛 畛 di ban 畉u c畛a x (動畛c r炭t g畛n theo
modulo 264 n畉u c畉n).
X但u k畉t qu畉 M c坦 畛 di chia h畉t cho 512. V狸 th畉 khi ch畉t M thnh c叩c word
32 bit, s畛 word nh畉n 動畛c l N s畉 chia h畉t cho 16.
M畛c 鱈ch vi畛c t畉o ra m畉ng M  th担ng i畛p 畛m  l 畛 c叩c hm bm x畛 l箪
tr棚n t畛ng kh畛i (block) 512 bit, t畛c l 16 word, c湛ng m畛t l炭c.
b. Hm bm MD5
M畉c d湛 MD4 v畉n ch動a b畛 ph叩, song c叩c phi棚n b畉n y畉u cho ph辿p b畛 qua ho畉c
v嘆ng th畛 nh畉t hay th畛 ba 畛u c坦 th畛 b畛 ph叩 kh担ng kh坦 khn g狸. Ngh挑a l d畛 dng
t狸m th畉y c叩c va ch畉m 畛i v畛i c叩c phi棚n b畉n ch畛 c坦 hai v嘆ng. Phi棚n b畉n m畉nh c畛a
d嘆ng MD l MD5 動畛c c担ng b畛 nm 1991. MD5 d湛ng b畛n v嘆ng thay cho ba v
ch畉m h董n 30% so v畛i MD4 (kho畉ng 0,9 MB/gi但y tr棚n c湛ng m畛t m叩y).
Input

: Th担ng i畛p c坦 畛 di t湛y 箪.

Ouput : B畉n bm, 畉i di畛n cho th担ng i畛p g畛c, 畛 di c畛 畛nh 128 bit.
M担 t畉 thu畉t to叩n:
Gi畉 s畛 畉u vo l m畛t x但u a c坦 畛 di b bit (b c坦 th畛 b畉ng 0)
B動畛c 1: Kh畛i t畉o c叩c thanh ghi
C坦 4 thanh ghi 動畛c s畛 d畛ng 畛 t鱈nh to叩n nh畉m 動a ra c叩c o畉n m達: A, B, C,
D. B畉n t坦m l動畛c c畛a th担ng i畛p 動畛c x但y d畛ng nh動 s畛 k畉t n畛i c畛a c叩c thanh ghi.
M畛i thanh ghi c坦 畛 di 32 bit. C叩c thanh ghi ny 動畛c kh畛i t畉o gi叩 tr畛 hecxa.
word
word
word
word

A := 67 45 23 01
B := EF CD AB 89
C := 98 BA DC FE
D := 10 32 54 76

B動畛c 2:
X畛 l箪 th担ng i畛p a trong 16 kh畛i word, c坦 ngh挑a l x畛 l箪 c湛ng m畛t l炭c 16
word = 512 bit (chia m畉ng M thnh c叩c kh畛i 512 bit, 動a t畛ng kh畛i 512 bit 坦 vo
m畉ng T[j]). M畛i l畉n x畛 l箪 m畛t kh畛i 512 bit. L畉p l畉i N/16 l畉n.
G叩n gi叩 tr畛 cho b畛n bi畉n AA, BB, CC, DD l畉n l動畛t b畉ng gi叩 tr畛 c畛a 4 thanh
ghi A, B, C, D.
B動畛c 3:Th畛c hi畛n b畛n v嘆ng bm v畛i c叩c kh畛i c畉n x畛 l箪
M畛t s畛 ph辿p to叩n logic 動畛c s畛 d畛ng trong b畛n v嘆ng ny.


X  Y l ph辿p to叩n AND theo bit gi畛a X v Y



X  Y l ph辿p to叩n OR theo bit gi畛a X v Y



X  Y l ph辿p to叩n XOR theo bit gi畛a X v Y



測 X ch畛 ph辿p b湛 c畛a X



X + Y l ph辿p c畛ng theo modulo 232



X <<< s l ph辿p d畛ch v嘆ng tr叩i X i s v畛 tr鱈 (0  s  31)
B畛i s畛 c畛a 512 b鱈t
1512 bit

K b鱈t
Message
512 bit

Y1

512
ABCD

128

HMD5

512 bit


512
128

K mod 264

100  000

512 bit

Y0

Chi畛u di c畛a message

HMD5

Yp

512 bit


512
128

HMD5

YL-1
512

128

HMD5
Digest 128 bit

H狸nh 1.10 : Qu叩 tr狸nh t畉o b畉n bm c畛a MD5
C叩c v嘆ng 1, 2, 3 v 4 d湛ng t動董ng 畛ng ba hm F, G, H v I. M畛i hm ny l
m畛t hm boolean t鱈nh theo bit. Ch炭ng 動畛c x叩c 畛nh nh動 sau:
F(X, Y, Z) = (X  Y)  (( 測 X)  Z)
G(X, Y, Z) = (X  Z)  (Y  ( 測 Z))
H(X, Y, Z) = X  Y  Z
I(X, Y, Z) = Y  (X  ( 測 Z))

B畉ng 1.8: Thu畉t to叩n MD5
1.

A := 67 45 23 01
B := ef cd ab 89
C := 98 ba dc fe
D := 10 32 54 76
for i := 0 to n/16 - 1 do {
for j := 0 to 15 do T[j] = M[16i + j];
AA := A; M畛i l畉n x畛 l箪 16 t畛, m畛i t畛 32 bit, tl: 512 bit.
BB := B;
CC := C;
DD := D;
round_1();
round_2();
round_3();
round_4();
A = A + AA
B = B + BB
C = C + CC
D = D + DD

2.
3.
4.

5.
6.
7.
8.
9.

}
B畛n v嘆ng trong MD5 l hon ton kh叩c nhau. M畛i v嘆ng (5, 6, 7, 8) g畛m m畛t
trong 16 word trong T.
T = getFromM(i*16, 16)
AA = A
BB = B
CC = C
DD = D
round_1()
round_2()
round_3()
round_4()
A = A + AA
B = B + BB
C = C + CC
D = D + DD
i=i+1

a
M = getBufferMsg(a)
A = 67 45 23
B = ef cd ab
C = 98 ba dc
D = 10 32 54
n = length(M)

01
89
fe
76

i=0

DCBA

F

i > n div 16
-1

T

H狸nh 1.11: L動畛c 畛 thu畉t to叩n MD5
MD5 s畛 d畛ng th棚m m畛t m畉ng S[1  64] 動畛c x但y d畛ng t畛 hm sin. V畛i
S[i], gi叩 tr畛 c畛a ph畉n t畛 th畛 i trong m畉ng S, t動董ng 動董ng v畛i ph畉n nguy棚n c畛a
4294967296  abs(sin(i)), v畛i i t鱈nh theo radian.


V嘆ng 1 s畛 d畛ng gi叩 tr畛 trong m畉ng S[1  16]



V嘆ng 2 s畛 d畛ng gi叩 tr畛 trong m畉ng S[17  32]



V嘆ng 3 s畛 d畛ng gi叩 tr畛 trong m畉ng S[33  48]



V嘆ng 4 s畛 d畛ng gi叩 tr畛 trong m畉ng S[49  64]

Ta c坦 m畉ng S[1  64] nh動 sau (t畉t c畉 畛u 畛 畛 h畛 c董 s畛 16):
1. D76AA478

17. F61E2562

33. FFFA3942

49. F4292244

2. E8C7B756

18. D040B340

34. 8771F681

50. 432AFF97

3. 242070DB

19. 265E5A51

35. 6D9D6122

51. AB9423A7

4. C1BDCEEE

20. E9B6C7AA

36. FDE5390C

52. FC93A039

5. F57C0FAF

21. D62F105D

37. A4BEEA44

53. 655B59C3

6. 4787C62A

22. 02441453

38. 4BDECFA9

54. 8F0CCC92
7. A8304613

23. D8A1E681

39. F6BB4B60

55. FFEFF47D

8. FD469501

24. E7D3FBC

40. BEBFBC70

56. 85845DD1

9. 698098D8

25. 21E1CDE6

41. 289B7EC6

57. 6FA87E4F

10. 8B44F7AF

26. C33707D6

42. EAA127FA

58. FE2CE6E0

11. FFFF5BB1

27. F4D50D87

43. D4EF3085

59. A3014314

12. 895CD7BE

28. 455A14ED

44. 04881D05

60. 4E0811A1

13. 6B901122

29. A9E3E905

45. D9D4D039

61. F7537E82

14. FD987193

30. FCEFA3F8

46. E6DB99E5

62. BD3AF235

15. A679438E

31. 676F02D9

47. 1FA27CF8

63. 2AD7D2BB

16. 49B40821

32. 8D2A4C8A

48. D4AC5665

64. EB86D391

C叩c ph辿p to叩n 動畛c th畛c hi畛n trong b畛n v嘆ng t畉o ra c叩c gi叩 tr畛 m畛i trong b畛n
thanh ghi. Cu畛i c湛ng, b畛n thanh ghi 動畛c c畉p nh畉t 畛 3.5 b畉ng c叩ch c畛ng ng動畛c
c叩c gi叩 tr畛 l動u tr動畛c 坦 畛 2.3. Ph辿p c畛ng ny 動畛c x叩c 畛nh l c畛ng c叩c s畛 nguy棚n
d動董ng, 動畛c r炭t g畛n theo modulo 232.
V嘆ng 1 (round_1())

V嘆ng 2 (round_2())

1. A = (A + F(B, C, D) + T0] + S[1] <<< 7

1. A = (A + G(B, C, D) + T[1] + S[17] <<< 5

2. D = (D + F(A, B, C) + T[1] + S[2]) <<< 12
3. C = (C + F(D, A, B) + T[2] + S[3]) <<< 17
4. B = (B + F(C, D, A) + T[3] + S[4]) <<< 22
5. A = (A + F(B, C, D) + T[4] + S[5]) <<< 7
6. D = (D + F(A, B, C) + T[5] + S[6]) <<< 12
7. C = (C + F(D, A, B) + T[6] + S[7]) <<< 17
8. B = (B + F(C, D, A) + T[7] + S[8]) <<< 22
9. A = (A + F(B, C, D) + T[8] + S[9]) <<< 7
10. D = (D + F(A, B, C) + T[9] + S[10]) <<< 12
11. C = (C + F(D, A, B) + T[10] + S[11]) <<< 17
12. B = (B + F(C, D, A) + T[11] + S[12]) <<< 22
13. A = (A + F(B, C, D) + T[12] + S[13]) <<< 7
14. D = (D + F(A, B, C) + T[13] + S[14]) <<< 12
15. C = (C + F(D, A, B) + T[14] + S[15]) <<< 17
16. B = (B + F(C, D, A) + T[15] + S[16]) <<< 22

2. D = (D + G(A, B, C) + T[6] + S[18]) <<< 9
3. C = (C + G(D, A, B) + T[21] + S[19]) <<< 14
4. B = (B + G(C, D, A) + T[0] + S[20]) <<< 20
5. A = (A + G(B, C, D) + T[5] + S[21]) <<< 5
6. D = (D + G(A, B, C) + T[10] + S[22]) <<< 9
7. C = (C + G(D, A, B) + T[15] + S[23]) <<< 14
8. B = (B + G(C, D, A) + T[4] + S[24]) <<< 20
9. A = (A + G(B, C, D) + T[9] + S[25]) <<< 5
10.D = (D + G(A, B, C) + T[14] + S[26]) <<< 9
11.C = (C + G(D, A, B) + T[3] + S[27]) <<< 14
12.B = (B + G(C, D, A) + T[8] + S[28]) <<< 20
13.A = (A + G(B, C, D) + T[13] + S[29]) <<< 5
14.D = (D + G(A, B, C) + T[2] + S[30]) <<< 9
15.C = (C + G(D, A, B) + T[7] + S[31]) <<< 14
16.B = (B + G(C, D, A) + T[12] + S[32]) <<< 20

V嘆ng 3 (round_1())

V嘆ng 4 (round_4())

1. A = (A + H(B, C, D) + T[5] + S[33]) <<< 4

1. A = (A + I(B, C, D) + T[0] + S[49]) <<< 6

2. D = (D + H(A, B, C) + T[8] + S[34]) <<< 11
3. C = (C + H(D, A, B) + T[11] + S[35]) <<< 16
4. B = (B + H(C, D, A) + T[14] + S[36]) <<< 23
5. A = (A + H(B, C, D) + T[1] + S[37]) <<< 4
6. D = (D + H(A, B, C) + T[4] + S[38]) <<< 11
7. C = (C + H(D, A, B) + T[7] + S[39]) <<< 16
8. B = (B + H(C, D, A) + T[10] + S[40]) <<< 23
9. A = (A + H(B, C, D) + T[13] + S[41]) <<< 4
10. D = (D + H(A, B, C) + T[0] + S[42]) <<< 11
11. C = (C + H(D, A, B) + T[3] + S[43]) <<<16
12. B = (B + H(C, D, A) + T[6] + S[44]) <<< 23
13. A = (A + H(B, C, D) + T[9] + S[45]) <<< 4
14. D = (D + H(A, B, C) + T[12] + S[46]) <<<
11
15. C = (C + H(D, A, B) + T[15] + S[47]) <<< 16
16. B = (B + H(C, D, A) + T[2] + S[48]) <<< 23

2. D = (D + I(A, B, C) + T[7] + S[50]) <<< 10
3. C = (C + I(D, A, B) + T[14] + S[51]) <<< 15
4. B = (B + I(C, D, A) + T[5] + S[52]) <<< 21
5. A = (A + I(B, C, D) + T[12] + S[53]) <<< 6
6. D = (D + I(A, B, C) + T[3] + S[54]) <<< 10
7. C = (C + I(D, A, B) + T[10] + S[55]) <<< 15
8. B = (B + I(C, D, A) + T[1] + S[56]) <<< 21
9. A = (A + I(B, C, D) + T[8] + S[57]) <<< 6
10. D = (D + I(A, B, C) + T[15] + S[58]) <<< 10
11. C = (C + I(D, A, B) + T[6] + S[59]) <<< 15
12. B = (B + I(C, D, A) + T[13] + S[60]) <<< 21
13. A = (A + I(B, C, D) + T[4] + S[61]) <<< 6
14. D = (D + I(A, B, C) + T[11] + S[62]) <<< 10
15. C = (C + I(D, A, B) + T[2] + S[63]) <<< 15
16. B = (B + I(C, D, A) + T[9] + S[64]) <<< 21

B動畛c 5: Output
K畉t qu畉 ra l o畉n m達 c坦 畛 di 128 bit, 動畛c thu g畛n t畛 th担ng i畛p a c坦 畛
di b bit. o畉n m達 ny thu 動畛c t畛 4 thanh ghi A, B, C, D: b畉t 畉u t畛 byte th畉p
c畛a thanh ghi A cho 畉n byte cao c畛a thanh ghi D.
1.3.5. X叩c th畛c
X叩c th畛c l thu畉t ng畛 chung d湛ng 畛 ch畛 hai kh叩i ni畛m x叩c th畛c: X叩c th畛c
t鱈nh ton v畉n v x叩c th畛c ngu畛n g畛c d畛 li畛u. V畛 c董 b畉n th狸 c叩c x叩c th畛c ny 動畛c
gi畉i quy畉t b畉ng c叩c ph動董ng ph叩p kh叩c nhau.
1.3.5.1. X叩c th畛c ngu畛n g畛c d畛 li畛u
Nguy c董 m畉t kh畉u truy畛n qua k棚nh kh担ng an ton.
Nguy c董 kh担ng an ton khi m畉t kh畉u 動畛c l動u tr畛 trong m叩y ch畛.
D畛 li畛u c坦 th畛c s畛 炭ng l t畛 m畛t n董i g畛i x叩c 畛nh hay kh担ng.
1.3.5.2. X叩c th畛c t鱈nh ton v畉n d畛 li畛u
Ph叩t hi畛n c叩c l畛i bit do c叩c ph動董ng ti畛n truy畛n d畉n ho畉c do c叩c thi畉t b畛 l動u
tr畛. Ph叩t hi畛n nh畛ng b畉n tin 達 b畛 s畛a 畛i m畛t c叩ch b畉t h畛p ph叩p trong qu叩 tr狸nh
truy畛n d畉n.

More Related Content

Hambam

  • 1. 1.3.4.3. Hm bm v ch畛 k箪 s畛. 1. Gi畛i thi畛u hm bm Vi畛c s畛 d畛ng c叩c h畛 m畉t m達 v c叩c s董 畛 ch畛 k箪 s畛, th動畛ng l m達 h坦a v k箪 s畛 tr棚n t畛ng bit c畛a th担ng tin, s畉 t畛 l畛 v畛i th畛i gian 畛 m達 h坦a v dung l動畛ng c畛a th担ng tin. Th棚m vo 坦 c坦 th畛 x畉y ra tr動畛ng h畛p: V畛i nhi畛u b畛c th担ng i畛p 畉u vo kh叩c nhau, s畛 d畛ng h畛 m畉t m達, s董 畛 k箪 s畛 gi畛ng nhau (c坦 th畛 kh叩c nhau) th狸 cho ra k畉t qu畉 b畉n m達, b畉n k箪 s畛 gi畛ng nhau (叩nh x畉 N-1: nhi畛u m畛t), nh動 H狸nh 1-6. i畛u ny s畉 d畉n 畉n m畛t s畛 r畉c r畛i v畛 sau cho vi畛c x叩c th畛c th担ng tin. V畛i c叩c s董 畛 k箪 s畛, ch畛 cho ph辿p k箪 c叩c b畛c th担ng i畛p (th担ng tin) c坦 k鱈ch th動畛c nh畛 v sau khi k箪, b畉n k箪 s畛 c坦 k鱈ch th動畛c g畉p 担i b畉n th担ng i畛p g畛c v鱈 d畛 v畛i s董 畛 ch畛 k箪 chu畉n DSS ch畛 k箪 tr棚n c叩c b畛c th担ng i畛p c坦 k鱈ch th動畛c 160 bit, b畉n k箪 s畛 s畉 c坦 k鱈ch th動畛c 320 bit. Trong khi 坦 tr棚n th畛c t畉, ta c畉n ph畉i k箪 c叩c th担ng i畛p c坦 k鱈ch th動畛c l畛n h董n nhi畛u, ch畉ng h畉n vi ch畛c MegaByte. H董n n畛a, d畛 li畛u truy畛n qua m畉ng kh担ng ch畛 l b畉n th担ng i畛p g畛c, m c嘆n bao g畛m c畉 b畉n k箪 s畛 (c坦 dung l動畛ng g畉p 担i dung l動畛ng b畉n th担ng i畛p g畛c), 畛 叩p 畛ng vi畛c x叩c th畛c sau khi th担ng tin 畉n ng動畛i nh畉n. Th担ng i畛p x Th担ng i畛p y H畛 m畉t m達 hay S董 畛 k箪 s畛 B畉n m達 hay B畉n k箪 s畛 Th担ng i畛p z Ngu畛n 鱈ch
  • 2. H狸nh 1.6: Nhi畛u th担ng i畛p ngu畛n cho c湛ng m畛t k畉t qu畉 sau m達 h坦a/ k箪 s畛 M畛t c叩ch 董n gi畉n 畛 gi畉i bi to叩n (v畛i th担ng i畛p c坦 k鱈ch th動畛c vi ch畛c MB) ny l chia th担ng i畛p thnh nhi畛u o畉n 160 bit, sau 坦 k箪 l棚n c叩c o畉n 坦 畛c l畉p nhau. Nh動ng bi畛n ph叩p ny c坦 m畛t s畛 v畉n 畛 trong vi畛c t畉o ra c叩c ch畛 k箪 s畛: Th畛 nh畉t: v畛i m畛t th担ng i畛p c坦 k鱈ch th動畛c a, th狸 sau khi k箪 k鱈ch th動畛c c畛a ch畛 k箪 s畉 l 2a (trong tr動畛ng h畛p s畛 d畛ng DSS). Th畛 hai: v畛i c叩c ch畛 k箪 an ton th狸 t畛c 畛 ch畉m v狸 ch炭ng d湛ng nhi畛u ph辿p t鱈nh s畛 h畛c ph畛c t畉p nh動 s畛 m滴 modulo. Th畛 ba: v畉n 畛 nghi棚m tr畛ng h董n 坦 l k畉t qu畉 sau khi k箪, n畛i dung c畛a th担ng i畛p c坦 th畛 b畛 x叩o tr畛n c叩c o畉n v畛i nhau, ho畉c m畛t s畛 o畉n trong ch炭ng c坦 th畛 b畛 m畉t m叩t, trong khi ng動畛i nh畉n c畉n ph畉i x叩c minh l畉i th担ng i畛p. Ta c畉n ph畉i b畉o v畛 t鱈nh ton v畉n c畛a th担ng i畛p. Gi畉i ph叩p cho c叩c v畉n 畛 v動畛ng m畉c 畉n ch畛 k箪 s畛 l d湛ng hm bm 畛 tr畛 gi炭p cho vi畛c k箪 s畛. C叩c thu畉t to叩n bm v畛i 畉u vo l c叩c b畛c th担ng i畛p c坦 dung l動畛ng, k鱈ch th動畛c t湛y 箪 (vi KB 畉n vi ch畛c MB th畉m ch鱈 h董n n畛a) c叩c b畛c th担ng i畛p c坦 th畛 l d畉ng vn b畉n, h狸nh 畉nh, 但m thanh, file 畛ng d畛ng v.v - v v畛i c叩c thu畉t to叩n bm: MD2, MD4, MD5, SHA cho c叩c b畉n bm 畉u ra c坦 k鱈ch th動畛c c畛 畛nh: 128 bit v畛i d嘆ng MD, 160 bit v畛i SHA. Nh動 v畉y, b畛c th担ng i畛p k鱈ch th動畛c t湛y 箪 sau khi bm s畉 動畛c thu g畛n thnh nh畛ng b畉n bm 動畛c g畛i l c叩c vn b畉n 畉i di畛n c坦 k鱈ch th動畛c c畛 畛nh (128 bit ho畉c 160 bit). V畛i m畛i th担ng i畛p 畉u vo ch畛 c坦 th畛 t鱈nh ra 動畛c m畛t vn b畉n 畉i di畛n gi叩 tr畛 bm t動董ng 畛ng duy nh畉t. Gi叩 tr畛 bm 動畛c coi l 畉c th湛 c畛a th担ng i畛p, gi畛ng nh動 d畉u v但n tay c畛a m畛i ng動畛i. Hai th担ng i畛p kh叩c nhau ch畉c ch畉n c坦 hai vn b畉n 畉i di畛n kh叩c nhau. Khi 達 c坦 vn b畉n 畉i di畛n duy nh畉t cho b畛c th担ng i畛p, 叩p d畛ng c叩c s董 畛 ch畛 k箪 s畛 k箪 tr棚n vn b畉n 畉i di畛n 坦.
  • 3. C董 ch畉 g畛i th担ng tin s畛 d畛ng hm bm tr畛 gi炭p cho ch畛 k箪 s畛 動畛c m担 t畉 theo th畛 t畛 c叩c H狸nh 1.7(1.7a, 1.7b, 1.7c). 畛 di tu畛 箪 Th担ng i畛p(b畉n r探) x (vn b畉n, 但m thanh, h狸nh 畉nh,) Bm th担ng i畛p (s畛 d畛ng thu畉t to叩n MD5 ho畉c SHA) h(x) 畛 di c畛 畛nh 128 v畛i MD5 v 160 v畛i SHA B畉n bm (vn b畉n 畉i di畛n) z=h(x) H狸nh 1.7a: Bm th担ng i畛p. K箪 s畛 B畉n bm (vn b畉n 畉i di畛n) z (s畛 d畛ng c叩c s董 畛 k箪 s畛 RSA, DSS) SigK(z) B畉n k箪 s畛 y=SigK(z) Kho叩 b鱈 m畉t (c畛a ng動畛i d湛ng) H狸nh 1.7b: K箪 tr棚n b畉n bm. Ng動畛i g畛i (A) Th担ng i畛p, B畉n k箪 s畛 (x, y) Ng動畛i nh畉n (B) H狸nh 1.7c: Truy畛n d畛 li畛u th担ng tin c畉n g畛i. Gi畉 s畛 A mu畛n g畛i cho B th担ng i畛p x. A th畛c hi畛n c叩c b動畛c sau: 1. A bm th担ng i畛p x (H狸nh 1-7a), thu 動畛c b畉n 畉i di畛n z = h(x) c坦 k鱈ch th動畛c c畛 畛nh 128 bit ho畉c 160 bit. 2. A k箪 s畛 tr棚n b畉n 畉i di畛n z (H狸nh 1-7b), b畉ng kh坦a b鱈 m畉t c畛a m狸nh, thu 動畛c b畉n k箪 s畛 y = sig K1 (z). 3. A g畛i (x, y) cho B (H狸nh 1.7c). Khi B nh畉n 動畛c (x, y). B th畛c hi畛n c叩c b動畛c sau: 4. B ki畛m tra ch畛 k箪 s畛 畛 x叩c minh xem th担ng i畛p m m狸nh nh畉n 動畛c c坦 ph畉i 動畛c g畛i t畛 A hay kh担ng b畉ng c叩ch gi畉i m達 ch畛 k箪 s畛 y, b畉ng kh坦a c担ng khai c畛a A, 動畛c z. (H狸nh 1.8a) 5. B d湛ng m畛t thu畉t to叩n bm t動董ng 畛ng v畛i thu畉t to叩n bm m A d湛ng 畛 bm th担ng i畛p x i k竪m, nh畉n 動畛c h(x). (H狸nh 1.8b)
  • 4. 6. B so s叩nh 2 gi叩 tr畛 bm z v h(x), n畉u gi畛ng nhau th狸 ch畉c ch畉n r畉ng th担ng i畛p x m A mu畛n g畛i cho B c嘆n nguy棚n v畉n, b棚n c畉nh 坦 c滴ng x叩c th畛c 動畛c ng動畛i g畛i th担ng tin l ai. (H狸nh 1.8c) B畉n k箪 s畛 y X叩c minh ch畛 k箪 VerK(y,z) True y = SigK(z) False y SigK(z) Kho叩 c担ng khai c畛a ng動畛i A H狸nh 1.8a: X叩c minh ch畛 k箪 Bm th担ng i畛p Th担ng i畛p(b畉n r探) x (s畛 d畛ng thu畉t to叩n MD5 ho畉c SHA) h(x) B畉n bm (vn b畉n 畉i di畛n) h(x) H狸nh 1.8b: Ti畉n hnh bm th担ng i畛p x i k竪m H狸nh 1.8c: Ki畛m tra t鱈nh ton v畉n c畛a th担ng i畛p Hm bm 達 tr畛 gi炭p cho c叩c s董 畛 k箪 s畛 nh畉m gi畉m dung l動畛ng c畛a d畛 li畛u c畉n thi畉t 畛 truy畛n qua m畉ng (l炭c ny ch畛 c嘆n bao g畛m dung l動畛ng c畛a b畛c th担ng i畛p g畛c v 256 bit (s畛 d畛ng MD) hay 320 bit (s畛 d畛ng SHA) c畛a b畛c k箪 s畛 動畛c k箪 tr棚n b畉n 畉i di畛n c畛a th担ng i畛p g畛c), t動董ng 動董ng v畛i vi畛c gi畉m th畛i gian truy畛n tin qua m畉ng. Hm bm th動畛ng k畉t h畛p v畛i ch畛 k箪 s畛 畛 t畉o ra m畛t lo畉i ch畛 k箪 i畛n t畛 v畛a an ton h董n (kh担ng th畛 c畉t/d叩n) v畛a c坦 th畛 d湛ng 畛 ki畛m tra t鱈nh ton v畉n c畛a th担ng i畛p. Hm bm 動畛c 畛ng d畛ng r畉t m畉nh trong v畉n 畛 an ton th担ng tin tr棚n 動畛ng truy畛n. C叩c 畛ng d畛ng c坦 s畛 d畛ng hm bm kh担ng ch畛 畉m b畉o v畛 m畉t an ton th担ng tin, m c嘆n t畉o 動畛c l嘆ng tin c畛a ng動畛i d湛ng v狸 h畛 c坦 th畛 d畛 dng ph叩t hi畛n
  • 5. 動畛c th担ng tin c畛a m狸nh c坦 c嘆n ton v畉n hay kh担ng, h畛 bi畉t r畉ng th担ng tin c畛a m狸nh ch畉c ch畉n 動畛c b鱈 m畉t v畛i ph鱈a c叩c nh cung c畉p. 2. 畛nh ngh挑a hm bm Hm bm l c叩c thu畉t to叩n kh担ng s畛 d畛ng kh坦a 畛 m達 h坦a (畛 但y ta d湛ng thu畉t ng畛 bm thay cho m達 h坦a), n坦 c坦 nhi畛m v畛 l畛c (bm) th担ng i畛p 動畛c 動a vo theo m畛t thu畉t to叩n h m畛t chi畛u no 坦, r畛i 動a ra m畛t b畉n bm vn b畉n 畉i di畛n c坦 k鱈ch th動畛c c畛 畛nh. Do 坦 ng動畛i nh畉n kh担ng bi畉t 動畛c n畛i dung hay 畛 di ban 畉u c畛a th担ng i畛p 達 動畛c bm b畉ng hm bm. Gi叩 tr畛 c畛a hm bm l duy nh畉t, v kh担ng th畛 suy ng動畛c l畉i 動畛c n畛i dung th担ng i畛p t畛 gi叩 tr畛 bm ny. 3. 畉c tr動ng Hm bm h l hm bm m畛t chi畛u (one-way hash) v畛i c叩c 畉c t鱈nh sau: V畛i th担ng i畛p 畉u vo x thu 動畛c b畉n bm z = h(x) l duy nh畉t. N畉u d畛 li畛u trong th担ng i畛p x thay 畛i hay b畛 x坦a 畛 thnh th担ng i畛p x th狸 h(x) h(x). Cho d湛 ch畛 l m畛t s畛 thay 畛i nh畛 hay ch畛 l x坦a i 1 bit d畛 li畛u c畛a th担ng i畛p th狸 gi叩 tr畛 bm c滴ng v畉n thay 畛i. i畛u ny c坦 ngh挑a l: hai th担ng i畛p hon ton kh叩c nhau th狸 gi叩 tr畛 hm bm c滴ng kh叩c nhau. N畛i dung c畛a th担ng i畛p g畛c kh担ng th畛 b畛 suy ra t畛 gi叩 tr畛 hm bm. Ngh挑a l: v畛i th担ng i畛p x th狸 d畛 dng t鱈nh 動畛c z = h(x), nh動ng l畉i kh担ng th畛 (th畛c ch畉t l kh坦) suy ng動畛c l畉i 動畛c x n畉u ch畛 bi畉t gi叩 tr畛 hm bm h 4. T鱈nh ch畉t Vi畛c 動a hm bm h vo d湛ng trong s董 畛 ch畛 k箪 s畛 kh担ng lm gi畉m s畛 an ton c畛a s董 畛 ch畛 k箪 s畛 v狸 n坦 l b畉n t坦m l動畛c th担ng b叩o b畉n 畉i di畛n cho th担ng i畛p 動畛c k箪 ch畛 kh担ng ph畉i l th担ng i畛p g畛c. i畛u c畉n thi畉t 畛i v畛i h l c畉n th畛a m達n m畛t s畛 t鱈nh ch畉t sau 畛 tr叩nh b畛 gi畉 m畉o: T鱈nh ch畉t 1: Hm bm h l kh担ng va ch畉m y畉u X辿t m畛t ki畛u t畉n c担ng nh動 sau: 叩ng l畉: th担ng tin ph畉i 動畛c truy畛n 炭ng t畛 A 畉n B (H狸nh 1.9a) H狸nh 1.9a: C叩ch i 炭ng c畛a th担ng tin
  • 6. Nh動ng: tr棚n 動畛ng truy畛n, th担ng tin b畛 l畉y tr畛m v b畛 thay 畛i (H狸nh 1.9b) H狸nh 1.9b: Th担ng tin b畛 l畉y tr畛m v b畛 thay 畛i tr棚n 動畛ng truy畛n Ng動畛i A g畛i cho B (x, y) v畛i y = sigK(h(x)). Nh動ng tr棚n 動畛ng truy畛n, tin b畛 l畉y tr畛m. T棚n tr畛m, b畉ng c叩ch no 坦 t狸m 動畛c m畛t b畉n th担ng i畛p x c坦 h(x) = h(x) m x x. Sau 坦, h畉n 動a x thay th畉 x r畛i truy畛n ti畉p cho ng動畛i B. Ng動畛i B nh畉n 動畛c v v畉n x叩c th畛c 動畛c th担ng tin 炭ng 畉n. Do 坦, 畛 tr叩nh ki畛u t畉n c担ng nh動 H狸nh 1.9b, hm h ph畉i th畛a m達n t鱈nh kh担ng va ch畉m y畉u: Hm bm h l kh担ng va ch畉m y畉u n畉u khi cho tr動畛c m畛t b畛c i畛n x, kh担ng th畛 ti畉n hnh v畛 m畉t t鱈nh to叩n 畛 t狸m ra m畛t b畛c i畛n x x m h(x) = h(x). T鱈nh ch畉t 2: Hm bm h l kh担ng va ch畉m m畉nh: X辿t m畛t ki畛u t畉n c担ng nh動 sau: 畉u ti棚n, t棚n gi畉 m畉o t狸m ra 動畛c hai b畛c th担ng i畛p x v x (x x) m c坦 h(x) = h(x) (ta coi b畛c th担ng i畛p x l h畛p l畛, c嘆n x l gi畉 m畉o). Ti畉p theo, h畉n 動a cho 担ng A v thuy畉t ph畛c 担ng ny k鱈 vo b畉n t坦m l動畛c h(x) 畛 nh畉n 動畛c y. Khi 坦 (x, y) l b畛c i畛n gi畉 m畉o nh動ng h畛p l畛. 畛 tr叩nh ki畛u t畉n c担ng ny, hm h ph畉i th畛a m達n t鱈nh kh担ng va ch畉m m畉nh: Hm bm h l kh担ng va ch畉m m畉nh n畉u kh担ng c坦 kh畉 nng t鱈nh to叩n 畛 t狸m ra hai b畛c th担ng i畛p x v x m x x v h(x) = h(x). T鱈nh ch畉t 3: Hm bm h l hm m畛t chi畛u: X辿t m畛t ki畛u t畉n c担ng nh動 sau: Vi畛c gi畉 m畉o c叩c ch畛 k箪 tr棚n b畉n t坦m l動畛c z th動畛ng x畉y ta v畛i c叩c s董 畛 ch畛 k箪 s畛. Gi畉 s畛 t棚n gi畉 m畉o t鱈nh ch畛 k箪 tr棚n b畉n t坦m l動畛c z, sau 坦 h畉n t狸m m畛t b畉n th担ng i畛p x 動畛c t鱈nh ng動畛c t畛 b畉n 畉i di畛n
  • 7. z, z = h(x). T棚n tr畛m thay th畉 b畉n th担ng i畛p x h畛p l畛 b畉ng b畉n th担ng i畛p x gi畉 m畉o, nh動ng l畉i c坦 z = h(x). V h畉n k箪 s畛 tr棚n b畉n 畉i di畛n cho x b畉ng 炭ng ch畛 k箪 h畛p l畛. N畉u lm 動畛c nh動 v畉y th狸 (x, y) l b畛c i畛n gi畉 m畉o nh動ng h畛p l畛. 畛 tr叩nh 動畛c ki畛u t畉n c担ng ny, h c畉n th畛a m達n t鱈nh ch畉t m畛t chi畛u: Hm bm h l m畛t chi畛u n畉u khi cho tr動畛c m畛t b畉n t坦m l動畛c th担ng b叩o z th狸 kh担ng th畛 th畛c hi畛n v畛 m畉t t鱈nh to叩n 畛 t狸m ra th担ng i畛p ban 畉u x sao cho h(x) = z . 5. C叩c thu畉t to叩n bm C叩c hm bm d嘆ng MD: MD2, MD4, MD5 動畛c Rivest 動a ra thu 動畛c k畉t qu畉 畉u ra v畛i 畛 di l 128 bit. Hm bm MD4 動a ra vo nm 1990. M畛t nm sau phi棚n b畉n m畉nh MD5 c滴ng 動畛c 動a ra. Chu畉n hm bm an ton: SHA, ph畛c t畉p h董n nhi畛u c滴ng d畛a tr棚n c叩c ph動董ng ph叩p t動董ng t畛, 動畛c c担ng b畛 trong H畛 s董 Li棚n bang nm 1992 v 動畛c ch畉p nh畉n lm ti棚u chu畉n vo nm 1993 do Vi畛n Ti棚u Chu畉n v C担ng Ngh畛 Qu畛c Gia (NIST), k畉t qu畉 畉u ra c坦 畛 di 160 bit. Nh動 達 n棚u trong ph畉n 畉u, th担ng i畛p 畉u vo cho c叩c hm bm c坦 th畛 l: d畉ng vn b畉n, d畉ng h狸nh 畉nh, d畉ng .exe . a. Kh叩i ni畛m th担ng i畛p 畛m Th担ng i畛p 畛m messege padding - l m畛t x但u bit c坦 畛 di chia h畉t cho 512. Th担ng i畛p 畛m 動畛c l動u trong m畉ng M = M[0] M[1] M[N-1]. Trong 坦 M[i] l x但u bit c坦 畛 di 32 bit, g畛i l word; N mod 16 = 0. M 動畛c x但y d畛ng t畛 th担ng i畛p a b畉ng thu畉t to叩n: B畉ng 1.7 : X但y d畛ng th担ng i畛p 畛m M t畛 a 1. d = 447 (|a| mod 512); (+ 512, tr動畛ng h畛p |a| mod 512 > 447). 2. Gi畉 s畛 l l k鱈 hi畛u bi畛u di畛n nh畛 ph但n c畛a |a| mod 264, tl: |l| = 64. 3. M = a || 1 || 0d || l - 畛 di c畛a x但u a || 1 || 0d l |a| + 1 + d = 448 mod 512 . - 畛 di c畛a Th担ng i畛p 畛m M l 448 mod 512 + 64 = 512 mod 512. V鱈 d畛 : C坦 x但u 畉u vo a = ABC, ta c坦 k畉t qu畉 x但y d畛ng M nh動 sau:
  • 8. a = ABC = "01000001 01000010 01000011" - 畛 di t鱈nh theo bit c畛a x但u a: |a| = 24 bit => d = 447 (|a| mod 512) = 423. |a| + 1 + d = 24 + 1 + 423 = 448 mod 512. - Bi畛u di畛n nh畛 ph但n c畛a 畛 di x但u a l l: 00 l = |a| mod 264 = 24 mod 264 = 24 = 16 + 8 = ( 00..... 11000 )2 59 so 00 => 畛 di c畛a l l |l| = | 00..... 11000| = 59 + 5 = 64. 59 so M = a || 1 || 0d || l .....00 00 => M = 01000001 01000010 01000011 || 1 || 00423 so || 00..... 11000 59 so M = M[0] M[1] M[N-1], N 0 mod 16 M[0] = 01000001 01000010 01000011 10000000 00 M[1] = M[2] = .. = M[13] = M[14] = 00..... 32 so M[15] = 00000000 00000000 00000000 00011000 Trong vi畛c x但y d畛ng M, ta g畉n s畛 1 董n l畉 vo sau a, sau 坦 th棚m ti畉p c叩c s畛 0 vo 畛 畛 畛 di c畛a M 畛ng d動 v畛i 448 modulo 512. Cu畛i c湛ng n畛i th棚m 64 bit (ch鱈nh l |l|) ch畛a bi畛u di畛n nh畛 ph但n v畛 畛 di ban 畉u c畛a x (動畛c r炭t g畛n theo modulo 264 n畉u c畉n). X但u k畉t qu畉 M c坦 畛 di chia h畉t cho 512. V狸 th畉 khi ch畉t M thnh c叩c word 32 bit, s畛 word nh畉n 動畛c l N s畉 chia h畉t cho 16. M畛c 鱈ch vi畛c t畉o ra m畉ng M th担ng i畛p 畛m l 畛 c叩c hm bm x畛 l箪 tr棚n t畛ng kh畛i (block) 512 bit, t畛c l 16 word, c湛ng m畛t l炭c. b. Hm bm MD5 M畉c d湛 MD4 v畉n ch動a b畛 ph叩, song c叩c phi棚n b畉n y畉u cho ph辿p b畛 qua ho畉c v嘆ng th畛 nh畉t hay th畛 ba 畛u c坦 th畛 b畛 ph叩 kh担ng kh坦 khn g狸. Ngh挑a l d畛 dng t狸m th畉y c叩c va ch畉m 畛i v畛i c叩c phi棚n b畉n ch畛 c坦 hai v嘆ng. Phi棚n b畉n m畉nh c畛a d嘆ng MD l MD5 動畛c c担ng b畛 nm 1991. MD5 d湛ng b畛n v嘆ng thay cho ba v ch畉m h董n 30% so v畛i MD4 (kho畉ng 0,9 MB/gi但y tr棚n c湛ng m畛t m叩y).
  • 9. Input : Th担ng i畛p c坦 畛 di t湛y 箪. Ouput : B畉n bm, 畉i di畛n cho th担ng i畛p g畛c, 畛 di c畛 畛nh 128 bit. M担 t畉 thu畉t to叩n: Gi畉 s畛 畉u vo l m畛t x但u a c坦 畛 di b bit (b c坦 th畛 b畉ng 0) B動畛c 1: Kh畛i t畉o c叩c thanh ghi C坦 4 thanh ghi 動畛c s畛 d畛ng 畛 t鱈nh to叩n nh畉m 動a ra c叩c o畉n m達: A, B, C, D. B畉n t坦m l動畛c c畛a th担ng i畛p 動畛c x但y d畛ng nh動 s畛 k畉t n畛i c畛a c叩c thanh ghi. M畛i thanh ghi c坦 畛 di 32 bit. C叩c thanh ghi ny 動畛c kh畛i t畉o gi叩 tr畛 hecxa. word word word word A := 67 45 23 01 B := EF CD AB 89 C := 98 BA DC FE D := 10 32 54 76 B動畛c 2: X畛 l箪 th担ng i畛p a trong 16 kh畛i word, c坦 ngh挑a l x畛 l箪 c湛ng m畛t l炭c 16 word = 512 bit (chia m畉ng M thnh c叩c kh畛i 512 bit, 動a t畛ng kh畛i 512 bit 坦 vo m畉ng T[j]). M畛i l畉n x畛 l箪 m畛t kh畛i 512 bit. L畉p l畉i N/16 l畉n. G叩n gi叩 tr畛 cho b畛n bi畉n AA, BB, CC, DD l畉n l動畛t b畉ng gi叩 tr畛 c畛a 4 thanh ghi A, B, C, D. B動畛c 3:Th畛c hi畛n b畛n v嘆ng bm v畛i c叩c kh畛i c畉n x畛 l箪 M畛t s畛 ph辿p to叩n logic 動畛c s畛 d畛ng trong b畛n v嘆ng ny. X Y l ph辿p to叩n AND theo bit gi畛a X v Y X Y l ph辿p to叩n OR theo bit gi畛a X v Y X Y l ph辿p to叩n XOR theo bit gi畛a X v Y 測 X ch畛 ph辿p b湛 c畛a X X + Y l ph辿p c畛ng theo modulo 232 X <<< s l ph辿p d畛ch v嘆ng tr叩i X i s v畛 tr鱈 (0 s 31)
  • 10. B畛i s畛 c畛a 512 b鱈t 1512 bit K b鱈t Message 512 bit Y1 512 ABCD 128 HMD5 512 bit 512 128 K mod 264 100 000 512 bit Y0 Chi畛u di c畛a message HMD5 Yp 512 bit 512 128 HMD5 YL-1 512 128 HMD5 Digest 128 bit H狸nh 1.10 : Qu叩 tr狸nh t畉o b畉n bm c畛a MD5 C叩c v嘆ng 1, 2, 3 v 4 d湛ng t動董ng 畛ng ba hm F, G, H v I. M畛i hm ny l m畛t hm boolean t鱈nh theo bit. Ch炭ng 動畛c x叩c 畛nh nh動 sau: F(X, Y, Z) = (X Y) (( 測 X) Z) G(X, Y, Z) = (X Z) (Y ( 測 Z)) H(X, Y, Z) = X Y Z I(X, Y, Z) = Y (X ( 測 Z)) B畉ng 1.8: Thu畉t to叩n MD5 1. A := 67 45 23 01 B := ef cd ab 89 C := 98 ba dc fe D := 10 32 54 76 for i := 0 to n/16 - 1 do { for j := 0 to 15 do T[j] = M[16i + j]; AA := A; M畛i l畉n x畛 l箪 16 t畛, m畛i t畛 32 bit, tl: 512 bit. BB := B; CC := C; DD := D; round_1(); round_2(); round_3(); round_4(); A = A + AA B = B + BB C = C + CC D = D + DD 2. 3. 4. 5. 6. 7. 8. 9. }
  • 11. B畛n v嘆ng trong MD5 l hon ton kh叩c nhau. M畛i v嘆ng (5, 6, 7, 8) g畛m m畛t trong 16 word trong T. T = getFromM(i*16, 16) AA = A BB = B CC = C DD = D round_1() round_2() round_3() round_4() A = A + AA B = B + BB C = C + CC D = D + DD i=i+1 a M = getBufferMsg(a) A = 67 45 23 B = ef cd ab C = 98 ba dc D = 10 32 54 n = length(M) 01 89 fe 76 i=0 DCBA F i > n div 16 -1 T H狸nh 1.11: L動畛c 畛 thu畉t to叩n MD5 MD5 s畛 d畛ng th棚m m畛t m畉ng S[1 64] 動畛c x但y d畛ng t畛 hm sin. V畛i S[i], gi叩 tr畛 c畛a ph畉n t畛 th畛 i trong m畉ng S, t動董ng 動董ng v畛i ph畉n nguy棚n c畛a 4294967296 abs(sin(i)), v畛i i t鱈nh theo radian. V嘆ng 1 s畛 d畛ng gi叩 tr畛 trong m畉ng S[1 16] V嘆ng 2 s畛 d畛ng gi叩 tr畛 trong m畉ng S[17 32] V嘆ng 3 s畛 d畛ng gi叩 tr畛 trong m畉ng S[33 48] V嘆ng 4 s畛 d畛ng gi叩 tr畛 trong m畉ng S[49 64] Ta c坦 m畉ng S[1 64] nh動 sau (t畉t c畉 畛u 畛 畛 h畛 c董 s畛 16): 1. D76AA478 17. F61E2562 33. FFFA3942 49. F4292244 2. E8C7B756 18. D040B340 34. 8771F681 50. 432AFF97 3. 242070DB 19. 265E5A51 35. 6D9D6122 51. AB9423A7 4. C1BDCEEE 20. E9B6C7AA 36. FDE5390C 52. FC93A039 5. F57C0FAF 21. D62F105D 37. A4BEEA44 53. 655B59C3 6. 4787C62A 22. 02441453 38. 4BDECFA9 54. 8F0CCC92
  • 12. 7. A8304613 23. D8A1E681 39. F6BB4B60 55. FFEFF47D 8. FD469501 24. E7D3FBC 40. BEBFBC70 56. 85845DD1 9. 698098D8 25. 21E1CDE6 41. 289B7EC6 57. 6FA87E4F 10. 8B44F7AF 26. C33707D6 42. EAA127FA 58. FE2CE6E0 11. FFFF5BB1 27. F4D50D87 43. D4EF3085 59. A3014314 12. 895CD7BE 28. 455A14ED 44. 04881D05 60. 4E0811A1 13. 6B901122 29. A9E3E905 45. D9D4D039 61. F7537E82 14. FD987193 30. FCEFA3F8 46. E6DB99E5 62. BD3AF235 15. A679438E 31. 676F02D9 47. 1FA27CF8 63. 2AD7D2BB 16. 49B40821 32. 8D2A4C8A 48. D4AC5665 64. EB86D391 C叩c ph辿p to叩n 動畛c th畛c hi畛n trong b畛n v嘆ng t畉o ra c叩c gi叩 tr畛 m畛i trong b畛n thanh ghi. Cu畛i c湛ng, b畛n thanh ghi 動畛c c畉p nh畉t 畛 3.5 b畉ng c叩ch c畛ng ng動畛c c叩c gi叩 tr畛 l動u tr動畛c 坦 畛 2.3. Ph辿p c畛ng ny 動畛c x叩c 畛nh l c畛ng c叩c s畛 nguy棚n d動董ng, 動畛c r炭t g畛n theo modulo 232.
  • 13. V嘆ng 1 (round_1()) V嘆ng 2 (round_2()) 1. A = (A + F(B, C, D) + T0] + S[1] <<< 7 1. A = (A + G(B, C, D) + T[1] + S[17] <<< 5 2. D = (D + F(A, B, C) + T[1] + S[2]) <<< 12 3. C = (C + F(D, A, B) + T[2] + S[3]) <<< 17 4. B = (B + F(C, D, A) + T[3] + S[4]) <<< 22 5. A = (A + F(B, C, D) + T[4] + S[5]) <<< 7 6. D = (D + F(A, B, C) + T[5] + S[6]) <<< 12 7. C = (C + F(D, A, B) + T[6] + S[7]) <<< 17 8. B = (B + F(C, D, A) + T[7] + S[8]) <<< 22 9. A = (A + F(B, C, D) + T[8] + S[9]) <<< 7 10. D = (D + F(A, B, C) + T[9] + S[10]) <<< 12 11. C = (C + F(D, A, B) + T[10] + S[11]) <<< 17 12. B = (B + F(C, D, A) + T[11] + S[12]) <<< 22 13. A = (A + F(B, C, D) + T[12] + S[13]) <<< 7 14. D = (D + F(A, B, C) + T[13] + S[14]) <<< 12 15. C = (C + F(D, A, B) + T[14] + S[15]) <<< 17 16. B = (B + F(C, D, A) + T[15] + S[16]) <<< 22 2. D = (D + G(A, B, C) + T[6] + S[18]) <<< 9 3. C = (C + G(D, A, B) + T[21] + S[19]) <<< 14 4. B = (B + G(C, D, A) + T[0] + S[20]) <<< 20 5. A = (A + G(B, C, D) + T[5] + S[21]) <<< 5 6. D = (D + G(A, B, C) + T[10] + S[22]) <<< 9 7. C = (C + G(D, A, B) + T[15] + S[23]) <<< 14 8. B = (B + G(C, D, A) + T[4] + S[24]) <<< 20 9. A = (A + G(B, C, D) + T[9] + S[25]) <<< 5 10.D = (D + G(A, B, C) + T[14] + S[26]) <<< 9 11.C = (C + G(D, A, B) + T[3] + S[27]) <<< 14 12.B = (B + G(C, D, A) + T[8] + S[28]) <<< 20 13.A = (A + G(B, C, D) + T[13] + S[29]) <<< 5 14.D = (D + G(A, B, C) + T[2] + S[30]) <<< 9 15.C = (C + G(D, A, B) + T[7] + S[31]) <<< 14 16.B = (B + G(C, D, A) + T[12] + S[32]) <<< 20 V嘆ng 3 (round_1()) V嘆ng 4 (round_4()) 1. A = (A + H(B, C, D) + T[5] + S[33]) <<< 4 1. A = (A + I(B, C, D) + T[0] + S[49]) <<< 6 2. D = (D + H(A, B, C) + T[8] + S[34]) <<< 11 3. C = (C + H(D, A, B) + T[11] + S[35]) <<< 16 4. B = (B + H(C, D, A) + T[14] + S[36]) <<< 23 5. A = (A + H(B, C, D) + T[1] + S[37]) <<< 4 6. D = (D + H(A, B, C) + T[4] + S[38]) <<< 11 7. C = (C + H(D, A, B) + T[7] + S[39]) <<< 16 8. B = (B + H(C, D, A) + T[10] + S[40]) <<< 23 9. A = (A + H(B, C, D) + T[13] + S[41]) <<< 4 10. D = (D + H(A, B, C) + T[0] + S[42]) <<< 11 11. C = (C + H(D, A, B) + T[3] + S[43]) <<<16 12. B = (B + H(C, D, A) + T[6] + S[44]) <<< 23 13. A = (A + H(B, C, D) + T[9] + S[45]) <<< 4 14. D = (D + H(A, B, C) + T[12] + S[46]) <<< 11 15. C = (C + H(D, A, B) + T[15] + S[47]) <<< 16 16. B = (B + H(C, D, A) + T[2] + S[48]) <<< 23 2. D = (D + I(A, B, C) + T[7] + S[50]) <<< 10 3. C = (C + I(D, A, B) + T[14] + S[51]) <<< 15 4. B = (B + I(C, D, A) + T[5] + S[52]) <<< 21 5. A = (A + I(B, C, D) + T[12] + S[53]) <<< 6 6. D = (D + I(A, B, C) + T[3] + S[54]) <<< 10 7. C = (C + I(D, A, B) + T[10] + S[55]) <<< 15 8. B = (B + I(C, D, A) + T[1] + S[56]) <<< 21 9. A = (A + I(B, C, D) + T[8] + S[57]) <<< 6 10. D = (D + I(A, B, C) + T[15] + S[58]) <<< 10 11. C = (C + I(D, A, B) + T[6] + S[59]) <<< 15 12. B = (B + I(C, D, A) + T[13] + S[60]) <<< 21 13. A = (A + I(B, C, D) + T[4] + S[61]) <<< 6 14. D = (D + I(A, B, C) + T[11] + S[62]) <<< 10 15. C = (C + I(D, A, B) + T[2] + S[63]) <<< 15 16. B = (B + I(C, D, A) + T[9] + S[64]) <<< 21 B動畛c 5: Output K畉t qu畉 ra l o畉n m達 c坦 畛 di 128 bit, 動畛c thu g畛n t畛 th担ng i畛p a c坦 畛 di b bit. o畉n m達 ny thu 動畛c t畛 4 thanh ghi A, B, C, D: b畉t 畉u t畛 byte th畉p c畛a thanh ghi A cho 畉n byte cao c畛a thanh ghi D. 1.3.5. X叩c th畛c
  • 14. X叩c th畛c l thu畉t ng畛 chung d湛ng 畛 ch畛 hai kh叩i ni畛m x叩c th畛c: X叩c th畛c t鱈nh ton v畉n v x叩c th畛c ngu畛n g畛c d畛 li畛u. V畛 c董 b畉n th狸 c叩c x叩c th畛c ny 動畛c gi畉i quy畉t b畉ng c叩c ph動董ng ph叩p kh叩c nhau. 1.3.5.1. X叩c th畛c ngu畛n g畛c d畛 li畛u Nguy c董 m畉t kh畉u truy畛n qua k棚nh kh担ng an ton. Nguy c董 kh担ng an ton khi m畉t kh畉u 動畛c l動u tr畛 trong m叩y ch畛. D畛 li畛u c坦 th畛c s畛 炭ng l t畛 m畛t n董i g畛i x叩c 畛nh hay kh担ng. 1.3.5.2. X叩c th畛c t鱈nh ton v畉n d畛 li畛u Ph叩t hi畛n c叩c l畛i bit do c叩c ph動董ng ti畛n truy畛n d畉n ho畉c do c叩c thi畉t b畛 l動u tr畛. Ph叩t hi畛n nh畛ng b畉n tin 達 b畛 s畛a 畛i m畛t c叩ch b畉t h畛p ph叩p trong qu叩 tr狸nh truy畛n d畉n.