Kết luận: SHA-1 an toàn như mọi thứ chống lại các cuộc tấn công tiền giả, tuy nhiên nó rất dễ tính toán, điều đó có nghĩa là dễ dàng hơn để thực hiện một cuộc tấn công từ điển bruteforce hoặc từ điển. (Điều tương tự cũng đúng đối với những người kế nhiệm như SHA-256.) Tùy thuộc vào hoàn cảnh, hàm băm được thiết kế để có thể tính toán đắt tiền (như bcrypt) có thể là lựa chọn tốt hơn.
Một số người ném xung quanh những nhận xét như "SHA-1 bị hỏng" rất nhiều, vì vậy tôi đang cố gắng hiểu chính xác điều đó có nghĩa là gì. Giả sử tôi có một cơ sở dữ liệu băm mật khẩu SHA-1 và kẻ tấn công có thuật toán phá vỡ SHA-1 hiện đại và một mạng botnet với 100.000 máy được truy cập vào nó. (Có quyền kiểm soát hơn 100 nghìn máy tính gia đình có nghĩa là họ có thể thực hiện khoảng 10 ^ 15 thao tác mỗi giây.) Họ cần bao nhiêu thời gian để
- tìm ra mật khẩu của bất kỳ một người dùng nào?
- tìm ra mật khẩu của một người dùng nhất định?
- Tìm ra mật khẩu của tất cả người dùng?
- tìm cách đăng nhập như một trong những người dùng?
- tìm cách đăng nhập như một người dùng cụ thể?
Làm thế nào để thay đổi nếu mật khẩu được muối? Liệu phương pháp tạo muối (tiền tố, hậu tố, cả hai hoặc một cái gì đó phức tạp hơn như xor-ing) có quan trọng không?
Đây là sự hiểu biết hiện tại của tôi, sau một số googling. Hãy sửa trong câu trả lời nếu tôi hiểu nhầm điều gì đó.
- Nếu không có muối, một cuộc tấn công cầu vồng sẽ ngay lập tức tìm thấy tất cả mật khẩu (ngoại trừ những mật khẩu cực kỳ dài).
- Nếu có một muối ngẫu nhiên đủ dài, cách hiệu quả nhất để tìm ra mật khẩu là tấn công từ điển hoặc tấn công từ điển. Các cuộc tấn công va chạm cũng không phải là tiền đề đều không giúp ích gì trong việc tìm ra mật khẩu thực tế, vì vậy các cuộc tấn công bằng mật mã chống lại SHA-1 không giúp ích gì ở đây. Nó thậm chí không quan trọng bằng thuật toán nào được sử dụng - người ta thậm chí có thể sử dụng MD5 hoặc MD4 và mật khẩu sẽ an toàn (có một chút khác biệt vì tính toán hàm băm SHA-1 chậm hơn).
- Để đánh giá mức độ "an toàn" an toàn như thế nào, hãy giả sử rằng một lần chạy sha1 cần 1000 thao tác và mật khẩu chứa chữ hoa, chữ thường và chữ số (nghĩa là 60 ký tự). Điều đó có nghĩa là kẻ tấn công có thể kiểm tra 10 15 * 60 * 60 * 24/1000 ~ = 10 17 mật khẩu tiềm năng mỗi ngày. Đối với một cuộc tấn công vũ phu, điều đó có nghĩa là kiểm tra tất cả mật khẩu tối đa 9 ký tự trong 3 giờ, tối đa 10 ký tự trong một tuần, tối đa 11 ký tự trong một năm. (Mất 60 lần cho mỗi ký tự bổ sung.) Một cuộc tấn công từ điển nhanh hơn nhiều (thậm chí một kẻ tấn công với một máy tính có thể kéo nó ra trong vài giờ), nhưng chỉ tìm thấy mật khẩu yếu.
- Để đăng nhập với tư cách người dùng, kẻ tấn công không cần tìm ra mật khẩu chính xác; Nó là đủ để tìm một chuỗi kết quả trong cùng một hàm băm. Đây được gọi là một cuộc tấn công tiền giả đầu tiên. Theo như tôi có thể tìm thấy, không có cuộc tấn công tiền thân nào chống lại SHA-1. (Một cuộc tấn công bruteforce sẽ mất 2 160 hoạt động, có nghĩa là kẻ tấn công lý thuyết của chúng ta sẽ cần 10 30 năm để kéo nó đi. Giới hạn của khả năng lý thuyết là khoảng 2 60 hoạt động, mà tại đó các cuộc tấn công sẽ mất vài năm.) Có các cuộc tấn công preimage chống lại các phiên bản giảm của SHA-1 với hiệu quả không đáng kể (đối với SHA-1 giảm sử dụng 44 bước thay vì 80, thời gian tấn công giảm từ 2 160 hoạt động xuống còn 2 157). Có các cuộc tấn công va chạm chống lại SHA-1 nằm trong khả năng lý thuyết ( điều tốt nhất tôi tìm thấy làm giảm thời gian từ 2 80 xuống 2 52 ), nhưng chúng vô dụng đối với việc băm mật khẩu, thậm chí không cần muối.
Nói tóm lại, lưu trữ mật khẩu với SHA-1 có vẻ hoàn toàn an toàn. Tôi đã bỏ lỡ một cái gì đó?
Cập nhật: Marcelo đã chỉ ra một bài viết trong đó đề cập đến một cuộc tấn công tiền giả thứ hai trong 2 106 hoạt động . ( Chỉnh sửa: Như Thomas giải thích , cuộc tấn công này là một cấu trúc giả định không áp dụng cho các tình huống thực tế.) Tôi vẫn không thấy điều này gây nguy hiểm cho việc sử dụng SHA-1 như một chức năng phái sinh chính. Có những lý do chính đáng để nghĩ rằng một cuộc tấn công va chạm hoặc một cuộc tấn công tiền giả thứ hai cuối cùng có thể được biến thành một cuộc tấn công tiền giả đầu tiên?