Chương <br />
5. <br />
Hàm <br />
băm <br />
và <br />
xác <br />
thực <br />
<br />
thông <br />
điệp <br />
<br />
Hashes <br />
and <br />
Message <br />
Authentication <br />
<br />
Lương <br />
Ánh <br />
Hoàng <br />
<br />
<br />
hoangla@soict.hut.edu.vn <br />
<br />
<br />
Nội <br />
dung <br />
<br />
5.1 <br />
Các <br />
loại <br />
hàm <br />
băm <br />
và <br />
MAC <br />
thông <br />
dụng <br />
<br />
5.2 <br />
Băm <br />
với <br />
OpenSSL <br />
<br />
<br />
5.3 <br />
Băm <br />
dữ <br />
liệu <br />
với <br />
CryptoAPI <br />
<br />
<br />
5.4 <br />
Xác <br />
thực <br />
thông <br />
điệp <br />
với <br />
HMAC <br />
<br />
5.5 <br />
Salt <br />
<br />
<br />
82 <br />
<br />
<br />
5.1 <br />
Các <br />
hàm <br />
băm <br />
và <br />
MAC <br />
thông <br />
dụng <br />
<br />
• Hàm <br />
băm <br />
(hashes) <br />
<br />
<br />
– Nhận <br />
đầu <br />
vào <br />
là <br />
một <br />
xâu <br />
và <br />
đầu <br />
ra <br />
là <br />
một <br />
chuỗi <br />
bit <br />
có <br />
chiều <br />
dài <br />
xác <br />
<br />
định. <br />
<br />
– Tỉ <br />
lệ <br />
đụng <br />
độ <br />
rất <br />
nhỏ. <br />
<br />
<br />
– Dùng <br />
để <br />
kiểm <br />
tra <br />
tính <br />
toàn <br />
vẹn <br />
của <br />
dữ <br />
liệu <br />
nhưng <br />
không <br />
đảm <br />
bảo <br />
<br />
tính <br />
xác <br />
thực <br />
của <br />
dữ <br />
liệu. <br />
<br />
– Thường <br />
kết <br />
hợp <br />
với <br />
mô <br />
hình <br />
mã <br />
hóa <br />
công <br />
khai <br />
chứ <br />
không <br />
sử <br />
dụng <br />
<br />
một <br />
mình. <br />
<br />
– Các <br />
giải <br />
thuật <br />
băm <br />
thông <br />
dụng: <br />
MD5, <br />
SHA1 <br />
<br />
<br />
83 <br />
<br />
<br />
5.1 <br />
Các <br />
hàm <br />
băm <br />
và <br />
MAC <br />
thông <br />
dụng <br />
<br />
• Hàm <br />
băm <br />
(hashes) <br />
<br />
Algorithm <br />
<br />
<br />
Digest <br />
size <br />
<br />
<br />
Small <br />
message <br />
<br />
Security <br />
conqidence <br />
speed <br />
(64 <br />
bytes), <br />
in <br />
<br />
cycles <br />
per <br />
byte[2] <br />
<br />
<br />
Large <br />
message <br />
<br />
speed <br />
(8K), <br />
in <br />
<br />
cycles <br />
per <br />
byte <br />
<br />
<br />
Uses <br />
block <br />
cipher <br />
<br />
<br />
Davies-‐Meyer-‐<br />
AES-‐128 <br />
<br />
<br />
128 <br />
bits <br />
(same <br />
length <br />
<br />
Good <br />
<br />
as <br />
cipher <br />
block <br />
size) <br />
<br />
<br />
46.7 <br />
cpb <br />
<br />
<br />
57.8 <br />
cpb <br />
<br />
<br />
Yes <br />
<br />
<br />
MD2 <br />
<br />
<br />
128 <br />
bits <br />
<br />
<br />
Good <br />
to <br />
low <br />
<br />
<br />
392 <br />
cpb <br />
<br />
<br />
184 <br />
cpb <br />
<br />
<br />
No <br />
<br />
<br />
MD4 <br />
<br />
<br />
128 <br />
bits <br />
<br />
<br />
Insecure <br />
<br />
<br />
32 <br />
cpb <br />
<br />
<br />
5.8 <br />
cpb <br />
<br />
<br />
No <br />
<br />
<br />
MD5 <br />
<br />
<br />
128 <br />
bits <br />
<br />
<br />
Very <br />
low, <br />
may <br />
be <br />
<br />
insecure <br />
<br />
<br />
40.9 <br />
cpb <br />
<br />
<br />
7.7 <br />
cpb <br />
<br />
<br />
No <br />
<br />
<br />
MDC-‐2-‐AES-‐128 <br />
<br />
<br />
256 <br />
bits <br />
<br />
<br />
Very <br />
high <br />
<br />
<br />
93 <br />
cpb <br />
<br />
<br />
116 <br />
cpb <br />
<br />
<br />
Yes <br />
<br />
<br />
MDC-‐2-‐DES <br />
<br />
<br />
128 <br />
bits <br />
<br />
<br />
Good <br />
<br />
<br />
444 <br />
cpb <br />
<br />
<br />
444 <br />
cpb <br />
<br />
<br />
Yes <br />
<br />
<br />
RIPEMD-‐160 <br />
<br />
<br />
160 <br />
bits <br />
<br />
<br />
High <br />
<br />
<br />
62.2 <br />
cpb <br />
<br />
<br />
20.6 <br />
cpb <br />
<br />
<br />
No <br />
<br />
<br />
SHA1 <br />
<br />
<br />
160 <br />
bits <br />
<br />
<br />
High <br />
<br />
<br />
53 <br />
cpb <br />
<br />
<br />
15.9 <br />
cpb <br />
<br />
<br />
No <br />
<br />
<br />
SHA-‐256 <br />
<br />
<br />
256 <br />
bits <br />
<br />
<br />
Very <br />
high <br />
<br />
<br />
119 <br />
cpb <br />
<br />
<br />
116 <br />
cpb <br />
<br />
<br />
No <br />
<br />
<br />
SHA-‐384 <br />
<br />
<br />
384 <br />
bits <br />
<br />
<br />
Very <br />
high <br />
<br />
<br />
171 <br />
cpb <br />
<br />
<br />
166 <br />
cpb <br />
<br />
<br />
No <br />
<br />
<br />
SHA-‐512 <br />
<br />
<br />
512 <br />
bits <br />
<br />
<br />
Very <br />
high <br />
<br />
<br />
171 <br />
cpb <br />
<br />
<br />
166 <br />
cpb <br />
<br />
<br />
No <br />
<br />
<br />
84 <br />
<br />
<br />
5.1 <br />
Các <br />
hàm <br />
băm <br />
và <br />
MAC <br />
thông <br />
dụng <br />
<br />
• Xác <br />
thực <br />
thông <br />
điệp <br />
(Message <br />
Authentication <br />
Code) <br />
<br />
<br />
– Nhận <br />
đầu <br />
vào <br />
là <br />
một <br />
xâu <br />
và <br />
một <br />
khóa <br />
bí <br />
mật, <br />
đầu <br />
ra <br />
là <br />
một <br />
mã <br />
có <br />
<br />
chiều <br />
dài <br />
xác <br />
định. <br />
<br />
– Dùng <br />
để <br />
kiểm <br />
tra <br />
tính <br />
toàn <br />
vẹn <br />
và <br />
xác <br />
thực <br />
của <br />
dữ <br />
liệu. <br />
<br />
– Các <br />
giải <br />
thuật <br />
thông <br />
dụng: <br />
OMAC, <br />
CMAC, <br />
HMAC <br />
<br />
<br />
85 <br />
<br />
<br />