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