Như Johannes Gorset đã chỉ ra, bài đăng của Thomas Ptacek từ Matasano Security giải thích tại sao các hàm băm đơn giản, đa năng như MD5, SHA1, SHA256 và SHA512 là những lựa chọn băm mật khẩu kém .
Tại sao? Chúng quá nhanh - bạn có thể tính toán ít nhất 1.000.000 MD5 băm một giây trên một lõi với một máy tính hiện đại, do đó, sức mạnh vũ phu là khả thi đối với hầu hết mật khẩu mọi người sử dụng. Và đó là ít hơn nhiều so với một cụm máy chủ bẻ khóa dựa trên GPU!
Ướp muối mà không kéo dài khóa chỉ có nghĩa là bạn không thể tính toán trước bảng cầu vồng, bạn cần xây dựng nó một cách đặc biệt cho loại muối cụ thể đó. Nhưng nó sẽ không thực sự làm cho mọi thứ khó khăn hơn nhiều.
Người dùng @Will nói:
Mọi người đang nói về điều này giống như họ có thể bị hack qua internet. Như đã nêu, việc giới hạn các nỗ lực khiến không thể bẻ khóa mật khẩu qua Internet và không liên quan gì đến hàm băm.
Họ không cần. Rõ ràng, trong trường hợp LinkedIn, họ đã sử dụng lỗ hổng SQL tiêm phổ biến để lấy bảng DB đăng nhập và bẻ khóa hàng triệu mật khẩu ngoại tuyến.
Sau đó, anh ta quay lại kịch bản tấn công ngoại tuyến:
Bảo mật thực sự phát huy tác dụng khi toàn bộ cơ sở dữ liệu bị xâm phạm và sau đó một hacker có thể thực hiện 100 triệu lần thử mật khẩu mỗi giây so với băm md5. SHA512 chậm hơn khoảng 10.000 lần.
Không, SHA512 không chậm hơn 10000 lần so với MD5 - nó chỉ mất khoảng gấp đôi. Mặt khác, Crypt / SHA512 là một quái thú rất khác, giống như đối tác BCrypt của nó, thực hiện việc kéo dài khóa , tạo ra một hàm băm rất khác với một muối ngẫu nhiên tích hợp và sẽ mất khoảng 500 đến 999999 lần để tính toán (kéo dài là điều chỉnh).
SHA512 => aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
Crypt/SHA512 => $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
Vì vậy, sự lựa chọn cho PHP là Crypt / Blowfish (BCrypt), Crypt / SHA256 hoặc Crypt / SHA512. Hoặc ít nhất là Tiền điện tử / MD5 (PHK). Xem www.php.net/manual/en/feft.crypt.php