2012-07-02 40 views
8

Sau khi băm mật khẩu liên kết bị rò rỉ, tôi đã nhìn vào băm mật khẩu của chúng tôi. Chúng tôi sử dụng Django 1.4 trong đó sử dụng PBKDF2, đó là tuyệt vời và một bước lên từ SHA1 trước.Làm thế nào nhanh chóng bạn có thể brute force PBKDF2?

Tuy nhiên, tôi rất tò mò về việc người ta có thể dễ dàng cưỡng bức như thế nào. Tôi đang xem xét các quy tắc phức tạp về mật khẩu của chúng tôi và tôi tự hỏi sẽ phải mất bao nhiêu thời gian để thực hiện (ví dụ) 8 chữ cái ascii có độ dài thấp hơn.

Hướng dẫn này để băm mật khẩu băm mật khẩu LinkedIn, có người làm 430 triệu băm sha1 mỗi giây trên GPU. http://erratasec.blogspot.ie/2012/06/linkedin-vs-password-cracking.html Bạn sẽ nhận được tốc độ nào cho PBKDF2?

Có ai có bất kỳ số liệu thô/lưng-phong bì/ballpark nào về tốc độ nhanh như thế nào có thể gây bạo lực PBKDF2 không?

+0

Nó được cho là một trong những khó khăn nhất nếu không phải là khó nhất để gây sức mạnh vũ phu. (* và nó được thiết kế như vậy *) Tôi không có con số tiện dụng, mặc dù. – ZJR

+0

Related http://security.stackexchange.com/questions/12114/aes-encryption-choice-of-password – CodesInChaos

+0

@ZJR PBKDF2 rẻ hơn nhiều so với sức mạnh vũ phu hơn là mã hóa. – CodesInChaos

Trả lời

9

Có một số writeup over at agilebits từ tháng 2 để tính toán khăn ăn. Phiên bản rút gọn:

Như một nhân vật công viên bóng, tôi sẽ nói 10.000 PBKDF2 lặp dẫn tới hàng chục hoặc hàng trăm mili giây để kiểm tra mật khẩu cho một hệ thống tiêu dùng rất cao cấp. Những gì chúng tôi đang làm với PBKDF2 đang giảm điều từ một triệu bài kiểm tra mỗi giây đến vài trăm. Đây là tính đến phần mềm chuyên dùng để sử dụng nhiều lõi và nhiều GPU.

Vì vậy, việc bài báo erratasec bạn mà benchmarks 430 triệu SHA-1 băm mỗi giây trên một gpu làm cơ sở - bài viết agilebits cho thấy số liệu đó cho thấy PBKDF2 với 10k lặp sẽ mang lại đó xuống còn khoảng 100k kiểm tra mỗi giây.

Cách xa khoa học, nhưng giúp chúng tôi ở công viên ...

+1

Bạn đã bỏ lỡ phần mà họ nói về nứt GPU và ước tính là ~ 1 triệu/giây trên GPU. https://blog.agilebits.com/2012/07/31/1password-is-ready-for-john-the-ripper/ dự đoán rằng mô-đun sẽ sớm được sửa đổi để có thể sử dụng Đồ họa Bộ xử lý (GPU). Điều này, ông ước tính, sẽ làm tăng tốc độ đoán hơn 100 lần. Trong bảng dưới đây, tôi đã sử dụng tốc độ tăng gấp 200 lần đối với GPU. Vì vậy, nơi mà tôi đã có khoảng 5000 đoán mỗi giây trên Mac Pro của tôi, tôi giả định rằng với khả năng tăng tốc GPU, sẽ có một triệu đoán mỗi giây. –

3

PBKDF2 có thể điều chỉnh được. Bạn luôn có thể tăng giá trị chi phí để giảm số lần đoán/giây có thể cho kẻ tấn công. Đề xuất của tôi là quyết định tốc độ bạn muốn nó chạy trên nền tảng của bạn và đặt giá trị chi phí cho phù hợp. Ví dụ: Nếu bạn nghĩ 200 băm/giây là một sự cân bằng lý tưởng trong hiệu suất/bảo mật, thì hãy tăng giá trị chi phí và kiểm tra mất bao lâu để băm vài nghìn mật khẩu kiểm tra cho đến khi bạn lấy trung bình khoảng 200/giây.

PBKDF2 cũng sử dụng "muối" ngăn chặn các cuộc tấn công từ việc mở rộng quy mô bằng cách buộc kẻ tấn công phải tấn công riêng từng tài khoản cá nhân. Kết hợp với việc kéo dài (tức là làm chậm thuật toán), điều này làm cho việc khôi phục nhiều hơn một số lượng tài khoản rất khó khăn. Kẻ tấn công có thể tập trung vào một tài khoản và hy vọng tốt nhất hoặc dành một lượng thời gian (một giờ, một ngày) cho mỗi tài khoản và sau đó chuyển sang tài khoản tiếp theo nếu anh ta không thành công.

Với băm LinkedIn, mọi người đã có thể bẻ khóa hơn một triệu băm trong một ngày hoặc ít hơn. Với PBKDF2 chạy ở ~ 200 lần/giây, sẽ mất khoảng 9 giờ để tìm ra tài khoản 6.5M nào được sử dụng "linkedin" làm mật khẩu của chúng. Nếu bạn muốn chạy một danh sách 1.000 mật khẩu phổ biến đối với tất cả các mật khẩu đó, sẽ mất khoảng một năm.

3

Hãy nhớ rằng bcrypt, scrypt và PBKDF2/PKCS # 5/RFC 2898 tất cả hỗ trợ các số lần lặp lại khác nhau; không có gì là "nhanh" hoặc "chậm". Một số có nhiều RAM hơn (PBKDF2 không không mất nhiều RAM), nhưng đó là về nó.

Theo các bước PBKDF2 cụ thể, một chương trình bẻ khóa dựa trên GPU phổ biến có thể xử lý với máy tính để bàn hiện đại kitted + 8 GPU với tốc độ 1 triệu lần thử thứ hai so với WPA2.Vì WPA2 về cơ bản là PBKDF2 (HMAC − SHA1, cụm từ mật khẩu, ssid, 4096, 256), cho chúng ta biết rằng một máy có thể thử nghiệm hơn 4 tỷ lần lặp HMAC-SHA1 PBKDF2 mỗi giây. Mười máy như vậy, tất nhiên, sẽ thử nghiệm trên 40 tỷ lần lặp như vậy mỗi giây.

OWASP Mật khẩu Cheat Sheet (https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet) khuyến cáo ít nhất 64.000 lần lặp trong năm 2012, tăng gấp đôi mỗi hai năm, hoặc 90.510 lặp trong năm 2013.

3

phần cứng chuyên dụng, chẳng hạn như được sử dụng trong khai thác Bitcoin, có thể thực hiện lên tới 50 tỷ băm mỗi giây (tính đến đầu năm 2013. Đó là một mục tiêu di động khi phần cứng trở nên nhanh hơn).

Nếu bạn thực hiện 1.000 lần lặp PBKDF2 thì điều đó sẽ cắt giảm cuộc tấn công xuống từ 50 tỷ mỗi giây xuống còn 50 triệu mỗi giây. 10.000 lần lặp sẽ là 5 triệu mỗi giây.

Một máy chủ web điển hình tuy nhiên sẽ không ở bất kỳ nơi nào gần nhanh như vậy. Nó sẽ là số nhiều hơn chậm hơn cho bạn. Bạn cần thực hiện một số thử nghiệm trên máy chủ sản xuất của riêng bạn và có thể tìm thấy 10.000 lần lặp lại quá chậm.

Vì vậy, nó không thực sự về cách nhanh chóng PBKDF2 có thể được brute buộc, đó là về nhanh máy chủ của bạn có thể xác minh một mật khẩu PBKDF2. Bạn cần phải quyết định bao lâu bạn nghĩ rằng nó nên mất (nửa giây? Một phần mười của một giây? Một phần trăm của một giây?) Và sau đó điều chỉnh số lượng vòng PBKDF2 cho phù hợp với điều đó.

Đồng thời xem xét sức mạnh của mật khẩu mà khách hàng của bạn sử dụng. Nếu tất cả đều có mật khẩu tuyệt vời, thì thực sự không quan trọng bạn sử dụng hệ thống băm nào. Nếu tất cả chúng đều sử dụng mật khẩu khủng khiếp thì PBKDF2 không đủ tốt để bảo vệ chúng - bạn sẽ cần phải kỳ lạ hơn như phần mềm băm mà Apple sử dụng trong iPhone để thử và biến số có 4 chữ số thành thứ gì đó có ít nhất một số bảo mật (về cơ bản chúng buộc tất cả băm phải được thực hiện bởi một chip phần cứng chuyên dụng, cố tình làm chậm. di chuyển dữ liệu đến bất kỳ phần cứng nào khác và không thể giải mã được).

Giả sử mật khẩu không có trong từ điển (hầu hết mật khẩu), thì cường độ của mật khẩu được tính bằng cách nhân số ký tự có thể có trong bảng chữ cái với chính một ký tự cho mỗi ký tự. Vì vậy, nếu một mật khẩu có chữ cái (26 ký tự chữ cái) và chữ số (10 ký tự khác) thì bạn có một bảng chữ cái 36 ký tự, và nếu nó dài 6 ký tự, bạn nhân nó 6 lần.

Vì vậy, mật khẩu gồm 6 chữ số và chữ số là 36 * 36 * 36 * 36 * 36 * 36 hoặc nếu bạn thích: 36^6. Điều đó cung cấp cho bạn khoảng 2,1 tỷ mật khẩu có thể ... nói chung chúng tôi giả định rằng hacker sẽ tìm thấy mật khẩu thực sự khoảng một nửa thông qua, vì vậy hãy gọi nó là 1 tỷ.

Nếu bạn đang sử dụng PBKDF2 và có 1.000 lần lặp, thì một hacker có phần cứng chuyên dụng sẽ đoán 1 tỷ mật khẩu trong khoảng 20 giây. Đó không phải là bảo mật tốt lắm.

Bạn có thể cải thiện bảo mật bằng cách sử dụng nhiều vòng PBKDF2 hơn (làm chậm trang web của bạn xuống) hoặc bằng cách thuyết phục người dùng của bạn có mật khẩu tốt hơn. Chỉ đơn giản bằng cách chuyển sang 7 chữ số thay vì 6, hoặc bằng cách thêm chữ hoa hoặc thậm chí là ký hiệu, chúng sẽ cải thiện đáng kể tính bảo mật của chúng.

Wolfram Alpha hữu ích khi thực hiện phép tính: ((36^6)/50 million) seconds trong đó 36 là kích thước của bảng chữ cái và 6 là độ dài của mật khẩu và 50 triệu là số lần đoán mỗi giây mà hacker có thể sử dụng (50 triệu là kẻ tấn công nghiêm trọng sẽ theo sau PBKDF2 với 1.000 viên đạn).

Có bao nhiêu mật khẩu trong cơ sở dữ liệu của bạn? Nếu nó mất 20 giây để crack mật khẩu cá nhân, tôi sẽ 30 ngày của toán học hoặc 30 năm? Nó phụ thuộc vào số lượng khách hàng bạn có.