0
0
Lập trình
NM

Hàm Băm Trong Mật Mã Học: Định Nghĩa, Tính Chất và Ứng Dụng

Đăng vào 3 tuần trước

• 4 phút đọc

I. Định Nghĩa Hàm Băm

Trong bối cảnh mật mã học, hàm băm được định nghĩa là một phép toán thiết lập mối quan hệ giữa một thông điệp đầu vào (gồm chuỗi ký tự có độ dài tùy ý) và một bản mã đầu ra là một chuỗi ký tự có độ dài cố định. Điều này giúp cho việc xử lý dữ liệu trở nên đơn giản và đồng nhất hơn.

Cụ thể, ký hiệu H() là hàm băm, với thông điệp M thu được bản mã C:

C = H(M)

Các thuật toán băm cần đảm bảo tính chất một chiều, có nghĩa rằng không thể phục hồi thông điệp gốc M từ bản mã C. Nói cách khác, không tồn tại hàm giải mã D() sao cho:

M = D(C)

II. Xung Đột và Kháng Xung Đột

Xung đột băm xảy ra khi có hai đầu vào khác nhau x và y, nhưng chúng lại cho ra kết quả giống nhau khi trải qua hàm băm: H(x) = H(y). Một hàm băm an toàn cần đảm bảo tính kháng xung đột, tức là cần không cho phép tồn tại một cặp khác nhau x ≠ y sao cho H(x) = H(y). Mặc dù lý thuyết cho thấy khó có hàm băm hoàn hảo, việc giảm thiểu xác suất xảy ra xung đột là điểm quan trọng trong việc đảm bảo tính an toàn cho thuật toán băm.

III. Đặc Điểm Của Hàm Băm

Một hàm băm H() cần có các đặc điểm sau:

  • H() có thể áp dụng cho khối dữ liệu với độ dài tuỳ ý.
  • Kết quả đầu ra từ H() luôn có độ dài cố định.
  • Việc thực hiện hàm băm phải dễ dàng và thuận tiện cho việc cài đặt.
  • Hàm băm phải là hàm một chiều.
  • H() có tính bền xung đột yếu (weak collision resistance): không thể tìm y ≠ x sao cho H(y) = H(x).
  • H() có tính bền xung đột mạnh (strong collision resistance): không thể tìm một cặp (x, y) sao cho H(x) = H(y).

IV. Một Số Hàm Băm Thông Dụng

1. MD5

MD5 (Message-Digest Algorithm 5) là một hàm băm được thiết kế bởi Ronald Rivest vào năm 1991. MD5 tạo ra bản mã dài 128 bit, thường được biểu diễn bằng 32 ký tự thập lục phân. Thuật toán này chia thông điệp đầu vào thành các khối 512 bit và xử lý qua nhiều vòng tròn, mỗi vòng thực hiện nhiều tác vụ giống nhau.

MD5 hiện đã không còn an toàn do sự xuất hiện của các phương thức tấn công khác nhau. Dưới đây là cách cài đặt hàm băm MD5 trong Python:

python Copy
import hashlib

data = b'viblo security'
md5_hash = hashlib.md5(data)

print(md5_hash.hexdigest())

Một thử thách cho độc giả: Hãy tìm giá trị data sao cho md5_hash.hexdigest() bắt đầu bằng tiền tố 0e.

2. SHA256

SHA-2 (Secure Hash Algorithm 2) được phát triển bởi NSA và phát hành năm 2001. SHA256 có đầu ra dài 256 bit, biểu diễn bằng 64 ký tự thập lục phân. Thuật toán này vẫn được xem là an toàn và tin cậy. Cách cài đặt cũng tương tự như MD5:

python Copy
import hashlib

data = b'viblo security'
sha256_hash = hashlib.sha256(data)

print(sha256_hash.hexdigest())

V. Ứng Dụng Của Hàm Băm

Hàm băm trong mật mã được ứng dụng rộng rãi trong các lĩnh vực sau:

1. Đảm Bảo Tính Toàn Vẹn

Hàm băm giúp đảm bảo tính toàn vẹn của thông điệp. Ví dụ, Alice gửi thông điệp cho Bob và Bob sử dụng cùng thuật toán băm để kiểm tra tính nguyên vẹn của thông điệp mà không cần đảm bảo tính bí mật.

2. Đảm Bảo Tính Bí Mật Cho Dữ Liệu Lưu Trữ

Trong một hệ thống lưu trữ tài khoản người dùng, để đảm bảo an toàn, thay vì lưu trữ mật khẩu bản rõ, server lưu trữ giá trị băm của mật khẩu. Khi người dùng nhập mật khẩu, server sẽ so sánh giá trị băm để xác thực.

3. Ứng Dụng Khác

Hàm băm cũng rất hữu ích trong việc giúp quản lý dữ liệu và tạo chỉ mục, đồng thời đóng vai trò quan trọng trong công nghệ blockchain để đảm bảo tính toàn vẹn dữ liệu và thực hiện chữ ký số cho xác minh giao dịch.

VI. Luyện Tập

Mặc dù hàm băm cho thấy tính một chiều và không thể quay ngược, nhưng công nghệ tấn công như brute force attack vẫn tồn tại. Kẻ tấn công có thể tầm soát các bản rõ và giá trị băm trong cơ sở dữ liệu để tìm bản rõ tương ứng. Sau đây là một số chuỗi băm, hãy sử dụng các dịch vụ online để tìm ra bản rõ của chúng nhé:

Copy
e10adc3949ba59abbe56e057f20f883e
6c9b8b27dea1ddb845f96aa2567c6754
5f4dcc3b5aa765d61d8327deb882cf99
25f9e794323b453885f5181f1b624d0b

Tài Liệu Tham Khảo

source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào