I. Tấn Công Hàm Băm
Trong lĩnh vực an toàn thông tin, việc sử dụng thuật toán băm cực kỳ quan trọng, đặc biệt là trong việc bảo mật thông tin. Một thuật toán băm tốt sẽ đảm bảo rằng không thể thu hồi lại thông điệp gốc từ hash đã được tạo ra. Tuy nhiên, vấn đề nảy sinh khi chúng ta xem xét việc tấn công hàm băm không phải là việc cố gắng tìm ra thuật toán băm ngược, mà là tìm ra thông điệp tương ứng với một kết quả băm cụ thể.
1. Tấn Công Vét Cạn (Brute Force Attack)
Phương pháp vét cạn là một trong những cách tiếp cận đơn giản nhất để tìm ra thông điệp tương ứng với một hash. Mặc dù phương pháp này yêu cầu một khối lượng tính toán khổng lồ, vì nó cần kiểm tra mọi khả năng của chuỗi đầu vào. Đối với một mật khẩu dài n ký tự, cấu tạo từ các chữ cái và số, số lượng chuỗi có thể tạo ra sẽ là:
(26 + 26 + 10)^n = 62^n
Dưới đây là ví dụ về cách sử dụng Python để crack hash MD5:
python
import hashlib
import itertools
def md5_hash(input_string):
md5 = hashlib.md5()
md5.update(input_string.encode())
return md5.hexdigest()
def crack_md5_hash(target_hash, charset, max_length):
for length in range(1, max_length + 1):
for candidate in itertools.product(charset, repeat=length):
candidate_password = ''.join(candidate)
candidate_hash = md5_hash(candidate_password)
if candidate_hash == target_hash:
return candidate_password
return None
# Ví dụ: Crack một hash MD5 cụ thể
# Đây là hash MD5 của mật khẩu "123456"
target_md5_hash = "e10adc3949ba59abbe56e057f20f883e"
character_set = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
max_password_length = 6
cracked_password = crack_md5_hash(target_md5_hash, character_set, max_password_length)
if cracked_password:
print(f"Cracked password: {cracked_password}")
else:
print("Password not cracked.")
Mặc dù phương pháp vét cạn rất đơn giản, nhưng nó không thực tế cho các mật khẩu phức tạp và dài.
2. Tấn Công Vét Cạn Theo Từ Điển (Dictionary Attack)
Phương pháp này giảm bớt việc tính toán bằng cách sử dụng một không gian lưu trữ để lưu trữ các mật khẩu đã được băm và kết quả của chúng. Thay vì tấn công từng mật khẩu một cách ngẫu nhiên, tấn công từ điển chỉ tập trung vào những mật khẩu phổ biến hoặc dễ đoán. Phương pháp này yêu cầu một đợt vét cạn ban đầu để tạo ra từ điển, nhưng sau đó có thể tra cứu một cách nhanh chóng.
3. Bảng Cầu Vồng (Rainbow Table)
Phương pháp bảng cầu vồng kết hợp giữa tấn công vét cạn và tấn công từ điển để cân bằng giữa thời gian tính toán và không gian lưu trữ. Phương pháp này lưu trữ các cặp giá trị băm và mật khẩu dựa trên sự kết hợp của các hàm băm và hàm đảo ngược để xác định các thông điệp gốc một cách nhanh chóng mà không cần phải lưu trữ toàn bộ thông điệp.
II. Tấn Công Xung Đột Băm
1. Khái Niệm Về Xung Đột Băm
Xung đột băm xảy ra khi hai hoặc nhiều đầu vào khác nhau tạo ra cùng một giá trị băm. Dù các thuật toán băm hiện tại cố gắng giảm thiểu xác suất xảy ra xung đột, nhưng điều này không thể tránh khỏi hoàn toàn vì số lượng đầu vào vô hạn so với không gian đầu ra có giới hạn.
2. Xung Đột Băm MD5
MD5 là thuật toán băm phổ biến, nhưng đã được chứng minh là không an toàn khi các nhà nghiên cứu tìm ra cách để tạo ra xung đột một cách dễ dàng. Năm 2005, Xiaoyun Wang và Hongbo Yu đã phát triển phương pháp cho phép việc tìm ra các cặp thông điệp tương ứng với cùng một hash chỉ bằng cách kiểm tra một số lượng lớn đầu vào mac thái. Họ phát hiện rằng có thể tìm ra xung đột trong MD5 một cách hiệu quả, điều này đã dẫn đến việc MD5 bị coi là không an toàn cho các ứng dụng yêu cầu bảo mật cao.
Một ví dụ cụ thể về hai chuỗi với cùng một giá trị hash MD5 là:
4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2
4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2
Bạn đọc có thể tham gia vào các thử thách CTF về chủ đề Xung Đột Băm tại cryptohack.org để hiểu thêm về xung đột MD5.