TRƯỜNG ĐẠI HỌC KHOA HỌC HUẾ
KHOA CÔNG NGHỆ THÔNG TIN
TIỂU LUẬN
LÝ THUYẾT MẬT MÃ
Đề tài:
TÌM HIỂU VỀ HÀM BĂM MẬT MÃ
Giáo viên hướng dẫn:
GS. TSKH. Phạm Huy Điển
Nhóm 5:
Trương Khánh Duy
Dương Phước Đạt
Phạm Anh Đức
Phạm Trung Đức
Hoàng Thị Thu Hằng
Lớp: Khoa Học Máy Tính B – K2010
Tìm hiểu về hàm băm mật mã
2/7
1. Giới thiệu sơ lược về hàm băm mật mã
Hiểu theo nghĩa đơn giản, hàm băm là hàm cho tương ứng một mảng dữ
liệu lớn với một mảng dữ liệu nhỏ hơn mà được dùng rộng rãi trong nhiều ứng
dụng tin học, không chỉ thuộc phạm vi mật mã. Ở đây, chúng ta chỉ xét đến các
hàm băm trong phạm vi các hàm băm mật mã, xem xét cụ thể đến các ứng dụng
của chúng trong việc đảm bảo tính toàn vẹn của dữ liệu.
Các hàm băm nhận đầu vào là một chuỗi bit có chiều dài hữu hạn tùy ý và
tạo ra một chuỗi bit có chiều dài cố định bằng n bit (n > 0) gọi là mã băm (hash
code).
Trong mã hóa, mã băm được xem như là ảnh đại diện thu gọn (compact
representative image) của một chuỗi bit có độ dài hữu hạn tùy ý và được dùng
để nhận diện cho chuỗi bit đó. Kết hợp với công cụ tạo chữ ký số, các hàm băm
được dùng cho việc đảm bảo tính toàn vẹn của dữ liệu. Trong lược đồ chữ ký số,
mã băm của chuỗi bit được tính ở thời điểm T
1
và được bảo vệ để chống lại mọi
sự thay đổi bất hợp pháp. Tại thời điểm T
2
sau đó, để kiểm tra xem chuỗi bit x có
bị thay đổi hay không, người ta thường tính giá trị hàm băm của chuổi bit này tại
thời điểm T
2
, mà ta ký hiệu là x
T2
, sau đó so sánh giá trị vừa tính với mã băm tại
thời điểm T1. Nếu 2 giá trị bằng nhau thì người ta chấp nhận chuổi bit tại thời
điểm T2 trùng khớp với chuổi bit tại thời điểm T1, tức chuỗi bit x vẫn chưa bị
thay đổi. Như vậy vấn đề bảo đảm tính toàn vẹn của chuỗi bit có chiều dài tùy ý
được thay bằng việc bảo vệ sự toàn vẹn của chuỗi bit có chiều dài cố định.
2. Định nghĩa tổng quát của hàm băm
Hàm h(x) được gọi là một hàm băm nếu nó thoã mãn hai tính chất sau:
Nén gọn (Compression): Hàm h(x) tương ứng chuỗi bit đầu vào x có
chiều dài hữu hạn tuỳ ý vào chuỗi bit y = h(x) có chiều dài cố định n >
0 cho trước.
Dễ tính toán (Easy of computation): Với mọi chuỗi bit đầu vào x có
chiều dài hữu hạn tuỳ ý, h(x) được tính toán dễ dàng.
3. Các tính chất của hàm băm mật mã
Một hàm băm mật mã lý tưởng có các tính chất sau :
3.1. Tính kháng tiền ảnh (Preimage resistance)
Tìm hiểu về hàm băm mật mã
3/7
Với mọi đầu ra y cho trước, không thể tìm được bất kỳ dữ liệu đầu vào x
sao cho h(x) = y (hay không thể tìm được một thông điệp từ một giá trị băm cho
trước).
3.2. Tính kháng tiền ảnh thứ hai (2
nd
- Preimage resistance)
Với mọi dữ liệu đầu vào x cho trước và y = h(x), không thể tính toán để
tìm ra được giá trị x’
x sao cho h(x’)=h(x) (hay không thể tìm ra 2 thông điệp
khác nhau mà có cùng giá trị băm).
3.3. Tính kháng xung đột (Collision resistance)
Không thể tính toán để tìm được hai dữ liệu đầu vào x và x’ phân biệt sao
cho chúng có cùng giá trị băm h(x)=h(x’) (hay không thể sửa được một thông
điệp mà không làm thay đổi giá trị băm của nó).
4. Phân loại hàm băm mật mã
Dựa trên tham biến đầu vào của các hàm băm, các hàm băm mật mã được
phân thành hai lớp:
Lớp các hàm băm sử dụng khoá (keyed hash functions), chẳng hạn như
MAC (Message Authentication Codes): nhận hai giá trị đầu vào
o Thông điệp cần tính giá trị băm
o Khoá bí mật để băm văn bản theo đúng chuẩn quy định
Lớp các hàm băm không sử dụng khoá (unkeyed hash functions): chỉ
nhận duy nhất một giá trị đầu vào là Thông điệp (message).
Trong lớp các hàm băm không sử dụng khoá thì MDCs (Modification
Detection Codes – mã nhận diện sự thay đổi) là lớp con của lớp này. Lớp hàm
này lại tiếp tục phân thành các lớp con nhỏ hơn
- Hàm băm một chiều (One-Way Hash Functions - OWHFs): các
hàm trong lớp này đều thoã tính chất là với mọi mã băm biết trước,
không thể tính toán để tìm được chuỗi bit đầu vào có mã băm bằng với
mã băm đã cho.
- Hàm băm kháng xung đột (Collision Resistant Hash Functions -
CRHFs): các hàm trong lớp này thoã mãn tính chất không thể tính
toán để tìm ra hai chuỗi bit có cùng giá trị băm.
5. Cấu trúc của thuật toán hàm băm
Khối dữ liệu đầu vào x có chiều dài tuỳ ý sẽ được phân thành các khối
con liên tiếp x
1
, x
2
, …, x
m
(với x
i
có chiều dài cố định là r). Tuy nhiên do chiều
Tìm hiểu về hàm băm mật mã
4/7
dài khối ban đầu là tùy ý nên ta cần thêm vào dữ liệu ban đầu một số bit phụ sao
cho tổng số bit của khối dữ liệu x sau khi thêm vào sẽ là bội số của r. Ngoài ra
số bit phụ thêm vào thường chứa một khối bit xác định chiều dài thực sự của
khối dữ liệu khi chưa thêm các bit phụ. Sau đó ta lần lượt cắt từng khối con r bit
từ khối x.
Mỗi khối con r bit x
i
ta thực hiện một hàm nén của hàm băm h(x) được ký
hiệu là f. Tại bước thứ i, hàm nến f nhận dữ liệu đầu vào là x
i
và kết quả trung
gian của bước trước đó để tạo đầu ra là kết quả trung gian bước thứ i, ký hiệu là
H
i
. Kết quả trung gian tại mỗi bước H
i
là một chuổi bit có độ dài cố định bằng
n>0. Nếu ký hiệu IV (init value) là giá trị khởi tạo ban đầu cho H
0
, thì quá trình
lặp xử lý dãy các khối con x
1
,x
2
,…, x
m
được mô tả như sau:
H
0
=IV
H
1
= f(H
i-1,
x
i
), (i=1,…,m)
h(x) = g(H
m
)
H
i
là kết quả trung gian sau bước thứ i, là các biến dây chuyền. Hàm g(x)
ánh xạ biến dây chuyền cuối cùng để tạo ra mã băm kết quả. Và thông thường,
g(x) được chọn là ánh xạ đồng nhất: g(H
m
)
o
H
m
. Khâu then chốt trong xây dựng
hàm băm là thiết kế hàm nén f.
6. Ứng dụng của các hàm băm mật mã
Một ứng dụng điển hình của một hàm băm mật mã học như sau: Alice đưa
cho Bob một câu đố khó và tuyên bố rằng cô ấy đã giải được rồi. Bob muốn tự
giải, nhưng cũng muốn chắc chắn là Alice đúng là đã giải được. Do đó, Alice
viết đáp án, gắn thêm một nonce ngẫu nhiên, tính giá trị băm của nó, và đưa kết
quả băm cho Bob (trong khi vẫn giữ bí mật đáp án và nonce). Bằng cách này,
khi Bob tự giải xong, Alice có thể chứng minh rằng cô đã có đáp án từ trước
bằng cách đưa nonce cho Bob. Trong thực tiễn, Alice và Bob thường là các
chương trình máy tính, và bí mật thường là cái gì đó không dễ lừa bằng một lời
giải cho câu đó. Ứng dụng trên được gọi là một hệ thống tin cậy (commitment
scheme).
Một ứng dụng quan trọng khác của các hàm băm bảo mật là sự kiểm tra
tính toàn vẹn của thông điệp. Ví dụ, việc xác định xem một file hay một thông
điệp có bị sửa đổi hay không có thể thực hiện bằng cách so sánh tóm tắt được
Tìm hiểu về hàm băm mật mã
5/7
tính trước và sau khi gửi (hoặc một sự kiện bất kỳ nào đó). Còn có thể dùng tóm
tắt thông điệp làm một phương tiện đáng tin cậy cho việc nhận dạng file.
Một ứng dụng có liên quan là kiểm tra mật khẩu. Mật khẩu thường không
được lưu dưới dạng văn bản rõ (clear text), mà ở dạng tóm tắt. Để xác thực một
người dùng, mật khẩu do người đó nhập vào được băm và so sánh với kết quả
băm được lưu trữ.
Do các lý do cả về bảo mật và hiệu năng chương trình, đa số các thuật
toán chữ ký số nói rằng chỉ có tóm lược của thông điệp, chứ không phải toàn
văn thông điệp, được "ký". Các hàm băm còn có thể được dùng để tạo các bit
giả ngẫu nhiên (pseudorandom).
7. Các hàm băm mật mã hiện nay
Thuật toán Kích thước đầu ra Kích
thước
trạng
thái
trong
Kích
thước
khối
Thông
điệp tối
đa
Kích
thước
word
Xung
đột
HAVAL 256/224/192/160/128
256 1024 64 32 Có
MD2 128 384 128 No 8
Khả
năng
lớn
MD4 128 128 512 64 32 Có
MD5 128 128 512 64 32 Có
PANAMA 256 8736 256 No 32 Có lỗi
RIPEMD 128 128 512 64 32 Có
RIPEMD-
128/256
128/256 128 512 64 32 Không
RIPEMD-
160/320
160/320 160/320
512 64 32 Không
Tìm hiểu về hàm băm mật mã
6/7
SHA-0 160 160 512 64 32 Có
SHA-1 160 160 512 64 32 Có lỗi
SHA-256/224 256/224 256 512 64 32 Không
SHA-512/384 512/384 512 1024 128 64 Không
Tiger(2)-
192/160/128
192/160/128 192 512 64 64 Không
VEST-4/8 160/256 256/384
8 80/128 1 Không
VEST-16/32 320/512 512/768
8 160/256
1 Không
WHIRLPOOL
512 512 512 256 8 Không
Trong danh sách dài các hàm băm mật mã trên, có một số hàm băm được
cho là dễ bị tổn thương và không nên sử dụng. Ngay cả khi một hàm băm chưa
bị phá vỡ, một tấn công thành công đối với một biến thể yếu đó có thể làm giảm
sự tự tin của các chuyên gia và dẫn đến loại bỏ nó. Ví dụ, vào tháng 8 năm 2004
người ta đã tìm ra những điểm yếu của một vài hàm băm phổ biến vào thời đó,
bao gồm SHA-0, RIPEMD, và MD5. Điều này đã đặt ra câu hỏi an ninh lâu dài
của các thuật toán sau này được bắt nguồn từ những hàm băm này - đặc biệt,
SHA-1 (một phiên bản mạnh của SHA-0), RIPEMD-128, và RIPEMD-160 (cả
hai phiên bản mạnh của RIPEMD). Vì vậy, cả SHA-0 và RIPEMD đều không
được sử dụng rộng rãi kể từ khi chúng được thay thế bởi các phiên bản mạnh.
Đến năm 2009, hai hàm băm mật mã được sử dụng thông dụng nhất vẫn
là MD5 và SHA-1. Tuy nhiên, MD5 đã bị phá vỡ do có một tấn công lên nó để
phá vỡ SSL trong năm 2008.
SHA-0 và SHA-1 là các thành viên của họ hàm băm SHA được phát triển
bởi NSA. Vào tháng 2 năm 2005, đã tấn công thành công trên SHA-1, việc tìm
kiếm va chạm trong khoảng 269 phép toán băm, thay vì 280 theo dự kiến cho
hàm băm 160-bit. Vào tháng 8 năm 2005, có một tấn công thành công trên
SHA-1 trong đó việc tìm kiếm va chạm chỉ cần 263 phép toán băm. Điểm yếu lý
Tìm hiểu về hàm băm mật mã
7/7
thuyết của SHA-1 tồn tại vốn có, nhưng về mặt thực tế để phá vỡ nó cũng phải
mất vài năm. Các ứng dụng mới có thể tránh được những vấn đề này bằng cách
sử dụng thêm các thành viên tiên tiến của họ SHA, như SHA-2, hoặc sử dụng
các kỹ thuật như băm ngẫu nhiên hóa sẽ không quan tâm đến kháng va chạm.
Tuy nhiên, để đảm bảo tính chất mạnh lâu dài của các ứng dụng có sử dụng hàm
băm, hiện có một cuộc thi nhằm thiết kế hàm băm thay thế cho SHA-2, nó sẽ có
tên là SHA-3 và trở thành một tiêu chuẩn FIPS vào năm 2012.
8. Kết luận
Trong tiểu luận này, chúng ta đã tìm hiểu tổng quan về hàm băm mật mã,
cấu trúc của thuật toán hàm băm, các ứng dụng của nó. Đồng thời cũng giới
thiệu sơ lược các hàm băm mật mã hiện nay.
9. Tài liệu tham khảo
[1] Antoine Joux. Multicollisions in Iterated Hash Functions. Application to
Cascaded Constructions. LNCS 3152/2004, pages 306-316 Full text.
[2] Alexander Sotirov, Marc Stevens, Jacob Appelbaum, Arjen Lenstra, David
Molnar, Dag Arne Osvik, Benne de Weger, MD5 considered harmful today:
Creating a rogue CA certificate, accessed March 29, 2009
[3] Bart PRENEEL, Analysis and Design of Cryptographic Hash Functions,
2003
[4] Diplomarbeit, Christian Knopf, Cryptographic Hash Functions, 2007.
[5] Xiaoyun Wang, Yiqun Lisa Yin, and Hongbo Yu, Finding Collisions in the
Full SHA-1