Không, không thể đảo ngược hàm băm như MD5: với giá trị băm đầu ra, không thể tìm thấy thông báo đầu vào trừ khi biết đủ thông tin về thông báo đầu vào.
Giải mã không phải là một hàm được định nghĩa cho hàm băm; mã hóa và giải mã là các chức năng của một mật mã như AES trong chế độ CBC; hàm băm không mã hóa cũng không giải mã . Các hàm băm được sử dụng để tiêu hóa một thông điệp đầu vào. Như tên ngụ ý, không có thuật toán đảo ngược có thể theo thiết kế .
MD5 đã được thiết kế dưới dạng hàm băm một chiều , an toàn về mật mã . Giờ đây thật dễ dàng để tạo ra các xung đột cho MD5 - ngay cả khi một phần lớn của thông báo đầu vào được xác định trước. Vì vậy, MD5 chính thức bị phá vỡ và MD5 không nên được coi là một hàm băm bảo mật bằng mật mã nữa. Tuy nhiên, vẫn không thể tìm thấy một thông báo đầu vào dẫn đến giá trị băm: tìm X khi chỉ biết H (X) (và X không có cấu trúc được tính toán trước với ít nhất một khối dữ liệu được tính toán trước 128 byte) . Không có cuộc tấn công tiền ảnh nào được biết đến chống lại MD5.
Nhìn chung, cũng có thể đoán mật khẩu bằng cách sử dụng các cuộc tấn công từ điển vũ phu hoặc (tăng cường), để so sánh các cơ sở dữ liệu hoặc thử và tìm băm mật khẩu trong cái gọi là bảng cầu vồng. Nếu một kết quả khớp được tìm thấy thì chắc chắn tính toán rằng đầu vào đã được tìm thấy. Hàm băm cũng được bảo vệ chống lại các cuộc tấn công va chạm: tìm kiếm X'
để H(X') = H(X)
đưa H(X)
. Vì vậy, nếu một X
được tìm thấy, chắc chắn tính toán rằng đó thực sự là thông điệp đầu vào. Nếu không, bạn sẽ thực hiện một cuộc tấn công va chạm sau khi tất cả. Các bảng cầu vồng có thể được sử dụng để tăng tốc các cuộc tấn công và có các tài nguyên internet chuyên dụng ngoài đó sẽ giúp bạn tìm một mật khẩu được cung cấp một hàm băm cụ thể.
Tất nhiên có thể sử dụng lại giá trị bămH(X)
để xác minh mật khẩu đã được tạo trên các hệ thống khác. Điều duy nhất mà hệ thống nhận phải làm là lưu trữ kết quả của hàm xác định F
lấy H(X)
làm đầu vào. Khi X
được đưa cho hệ thống sau đó H(X)
và do đó F
có thể được tính toán lại và kết quả có thể được so sánh. Nói cách khác, không bắt buộc phải giải mã giá trị băm để chỉ xác minh rằng mật khẩu là chính xác và bạn vẫn có thể lưu trữ băm dưới dạng giá trị khác.
Thay vì MD5, điều quan trọng là sử dụng hàm băm mật khẩu hoặc PBKDF (chức năng dẫn xuất khóa dựa trên mật khẩu) để thay thế. Hàm như vậy chỉ định cách sử dụng muối cùng với hàm băm. Bằng cách đó, băm giống hệt nhau sẽ không được tạo cho mật khẩu giống hệt nhau (từ người dùng khác hoặc trong các cơ sở dữ liệu khác). Băm mật khẩu vì lý do đó cũng không cho phép sử dụng bảng cầu vồng miễn là muối đủ lớn và ngẫu nhiên đúng cách.
Băm mật khẩu cũng chứa một yếu tố công việc (đôi khi được định cấu hình bằng cách sử dụng số lần lặp ) có thể làm chậm đáng kể các cuộc tấn công cố gắng tìm mật khẩu được cung cấp giá trị băm và muối. Điều này rất quan trọng vì cơ sở dữ liệu có muối và giá trị băm có thể bị đánh cắp. Cuối cùng, hàm băm mật khẩu cũng có thể bị cứng bộ nhớ do đó cần một lượng bộ nhớ đáng kể để tính toán hàm băm. Điều này khiến cho không thể sử dụng phần cứng đặc biệt (GPU, ASIC, FPGA, v.v.) để cho phép kẻ tấn công tăng tốc tìm kiếm. Các đầu vào hoặc tùy chọn cấu hình khác như tiêu hoặc số lượng song song cũng có thể có sẵn cho hàm băm mật khẩu.
Tuy nhiên, nó vẫn sẽ cho phép bất cứ ai xác minh mật khẩu được cung cấp H(X)
ngay cả khi H(X)
là mật khẩu băm. Băm mật khẩu vẫn còn mang tính xác định, vì vậy nếu bất kỳ ai biết tất cả đầu vào và thuật toán băm thì X
có thể được sử dụng để tính toán H(X)
và - một lần nữa - kết quả có thể được so sánh.
Băm mật khẩu thường được sử dụng là bcrypt , scrypt và PBKDF2 . Ngoài ra còn có Argon2 dưới nhiều hình thức khác nhau, là người chiến thắng trong cuộc thi băm mật khẩu hợp lý gần đây. Ở đây trên CrackStation là một bài đăng blog tốt về bảo mật mật khẩu ngay.
Có thể làm cho các đối thủ không thể thực hiện phép tính băm xác minh rằng mật khẩu là chính xác. Đối với điều này, một hạt tiêu có thể được sử dụng làm đầu vào cho mật khẩu băm. Ngoài ra, giá trị băm dĩ nhiên có thể được mã hóa bằng mật mã như AES và chế độ hoạt động như CBC hoặc GCM. Tuy nhiên, điều này đòi hỏi phải lưu trữ bí mật / khóa một cách độc lập và với yêu cầu truy cập cao hơn hàm băm mật khẩu.