Mỗi lần bạn đăng nhập, mỗi giao dịch Bitcoin được xác nhận, mỗi tệp bạn tải về được kiểm tra tính toàn vẹn, đều có một hàm băm đang vận hành phía sau. SHA-256 là một trong những hàm băm phổ biến nhất thế giới, biến bất kỳ dữ liệu nào, từ một ký tự đến một tệp hàng gigabyte, thành chuỗi 256 bit cố định. Bài viết này phân tích cách nó hoạt động theo từng bước.
Cấu trúc Merkle-Damgård: chia để trị
SHA-256 không xử lý toàn bộ dữ liệu cùng lúc. Nó dùng cấu trúc Merkle-Damgård, đặt tên theo hai nhà toán học Ralph Merkle và Ivan Damgård, để chia nhỏ bài toán. Bước đầu tiên là padding: thêm bit 1, tiếp theo là các bit 0, rồi mã hóa độ dài dữ liệu gốc vào 64 bit cuối, sao cho tổng chiều dài chia hết cho 512. Cách này được gọi là cơ chế tăng cường Merkle-Damgård, đảm bảo hai thông điệp khác nhau không thể tạo ra cùng một chuỗi đầu vào sau padding.
Sau đó, dữ liệu được chia thành các khối 512 bit. Mỗi khối được đưa qua một hàm nén (compression function) cùng với kết quả của khối trước đó. Khối đầu tiên dùng một giá trị khởi tạo (IV) gồm 8 số 32 bit, lấy từ phần thập phân của căn bậc hai của 8 số nguyên tố đầu tiên. Kết quả cuối cùng sau khi xử lý khối cuối chính là giá trị băm 256 bit.
Hàm nén: 64 vòng biến đổi
Mỗi khối 512 bit đi qua 64 vòng tính toán. Đầu tiên, 16 từ 32 bit của khối được mở rộng thành 48 từ nữa thông qua bảng mở rộng thông điệp, sử dụng phép dịch bit và XOR. Mỗi vòng lấy một từ trong bảng mở rộng thông điệp cùng một hằng số (64 hằng số lấy từ căn bậc ba của 64 số nguyên tố đầu tiên), kết hợp với trạng thái hiện tại qua các phép toán: xoay bit, AND, XOR và cộng modulo 2^32. Kết quả sau 64 vòng được cộng với trạng thái đầu vào của khối, tạo nên đầu ra cho khối tiếp theo.
Hiệu ứng tuyết lở và kháng va chạm
Thay đổi một bit duy nhất trong dữ liệu đầu vào sẽ khiến khoảng một nửa số bit đầu ra thay đổi, hoàn toàn không thể dự đoán được. Đây là hiệu ứng tuyết lở, và nó khiến SHA-256 trở thành hàm một chiều: biết đầu ra, bạn không thể tính ngược đầu vào nhanh hơn việc thử từng giá trị. Tính kháng va chạm nghĩa là gần như không thể tìm được hai đầu vào khác nhau cho ra cùng một đầu ra trong thời gian khả thi. Với 2^256 giá trị có thể, con số này lớn hơn số nguyên tử trong vũ trụ quan sát được.
SHA-256 là nền tảng của công nghệ hiện đại: từ chữ ký số TLS bảo vệ kết nối web, lưu trữ mật khẩu dưới dạng giá trị băm thay vì văn bản gốc, đến cơ chế bằng chứng công việc trong blockchain Bitcoin. Merkle và Damgård chỉ ra rằng nếu hàm nén kháng va chạm thì toàn bộ hàm băm cũng giữ được tính chất này. Đó là lý do thiết kế này đã tồn tại hơn 20 năm và vẫn chưa bị phá vỡ.





