it-swarm-vi.com

Thuật toán băm mật khẩu an toàn nhất (s)?

Hiện tại/là thuật toán băm an toàn nhất về mật mã là gì? ( có sẵn trong PHP )

Tốc độ là không liên quan, bởi vì tôi đang lặp lại hàm băm trong một khoảng thời gian cố định (chứ không phải là số lần lặp cố định). Điều tôi quan tâm là sức mạnh toán học.

Trực giác của tôi cho tôi biết đó là xoáy nước , là lớn nhất và chậm nhất trong số đó. Đó hoặc SHA-512. Nhưng ở đâu trên mạng tôi có thể thấy những gì các chuyên gia khuyên?

41
Core Xii

Crypographers có thể chỉ ra rằng, khi bạn đọc bản in đẹp, không có bằng chứng nào cho thấy các hàm băm an toàn thực sự tồn tại. Điều duy nhất chúng ta có bây giờ là ứng cử viên mà chưa có điểm yếu nào được tìm thấy.

Vì vậy, điều tốt nhất bạn có thể hy vọng là một chức năng đã được nhiều nhà mật mã học kiểm tra trong một thời gian dài. Ngoài ra, bạn cần nó để có đầu ra đủ rộng (256 bit là đủ nếu bạn muốn đạt được "bảo mật 128 bit" và vượt ra ngoài điều đó có ý nghĩa rất nhỏ). Ngay bây giờ, vào mùa hè năm 2011, điều này chỉ ra SHA-256 hoặc SHA-512, không phải Whirlpool.

Dựa vào số lần lặp trên thời gian cần thiết cho một máy thông thường là một ý tưởng hay - nhưng dựa vào thời gian nó thực sự mất trên của bạn máy là không phải một ý tưởng hay. Mặt khác, bạn có thể kết thúc với số lần lặp thấp đối với một số mật khẩu vì máy đã xử lý nhiều yêu cầu ngay lúc đó (nhân tiện, kẻ tấn công có thể ép buộc). Sử dụng nhiều lần lặp có nghĩa là để ngăn chặn những kẻ tấn công bằng cách làm cho việc băm mật khẩu bị chậm trên kẻ tấn công máy tính - rằng nó cũng làm cho hệ thống của bạn chậm đi là một sản phẩm phụ đáng tiếc; nhưng mục tiêu thực sự là bất cứ thứ gì mà sức mạnh của kẻ tấn công có thể tập hợp được. Vì bạn không thể thực sự tạo điểm chuẩn trên máy của kẻ tấn công, bạn phải sử dụng các ước tính sơ bộ, do đó, một số lượng cố định, càng lâu càng tốt, miễn là gánh nặng trung bình có thể chịu được trên hệ thống của bạn (từ quan trọng ở đây là "trung bình", trong đó không đủ tiêu chuẩn cho một biện pháp năng động như bạn định thực hiện).

Ngoài ra, máy của kẻ tấn công không cần trông giống máy của bạn; nó có thể, ví dụ, một GPU hoặc a FPGA , cung cấp tính toán riêng biệt khả năng từ những gì bạn có thể nhận được trên một máy chủ điển hình. Bạn muốn một chức năng mà kẻ tấn công sẽ không thể tăng hiệu suất lớn bằng cách sử dụng phần cứng không phải của PC. Một lần nữa, điều này thúc đẩy SHA-256 hoặc SHA-512, có nghĩa là cho hiệu quả CPU (với các hoạt động số học 32 bit hoặc 64 bit), chứ không phải Whirlpool, có thể được hưởng lợi từ tối ưu hóa phần cứng tương tự như AES được thiết kế cho.

Cuối cùng, lặp đi lặp lại chỉ là một phần của công việc; bạn cũng cần một muối đủ dài, đủ độc đáo. Lặp lại và muối có thể là một chút khó khăn để làm cùng một lúc; bạn được khuyến khích sử dụng một cấu trúc tiêu chuẩn, chẳng hạn như PBKDF2 (mặc dù nó có nghĩa là một hàm phái sinh chính, không phải là mật khẩu, PBKDF2 cũng khá tốt về điều đó).

33
Thomas Pornin

Từ bình luận của OP:

"Bảo mật" như trong, dựa trên một vấn đề toán học chưa có giải pháp nhanh được biết đến. "An toàn nhất" như trong, dựa trên sự phức tạp nhất của các vấn đề như vậy. Một thuật toán băm được coi là "mạnh" khi phá vỡ nó sẽ đòi hỏi một đóng góp lớn cho tiền điện tử/toán học.

Nghe có vẻ như bạn đã đọc "Đủ với Bàn cầu vồng: Những gì bạn cần biết về Lược đồ mật khẩu an toàn" , và bây giờ bạn đang tự hỏi băm mật mã hiện đại nào được tối ưu hóa cho việc lưu trữ mật khẩu là được coi là "an toàn nhất".

Tôi không nghĩ rằng có một câu trả lời rõ ràng. Theo như tôi biết, một số mục yêu thích hiện tại trong cộng đồng lập trình (scrypt & bcrypt) chưa được xem xét nghiêm ngặt như các chức năng băm mật khẩu. Ít nhất, chúng chưa được đánh giá ngang hàng bởi một số lượng lớn các nhà mật mã có thể so sánh với cách các mục cạnh tranh hàm băm của NIST được hiệu đính.

Điều đó nói rằng, sự đồng thuận hiện tại của Hacker News là thứ tự là:

  1. tiền điện tử . Bởi vì nó vừa tốn bộ nhớ và vừa tốn CPU, scrypt được cho là có mức an toàn cao nhất trong các băm mật khẩu hiện tại . Bạn có thể xem thêm về thiết kế của nó ở đây .
  2. bcrypt là nhà vô địch trước đó, như đã đề cập trong bài đăng trên blog của Thomas Ptacek ở trên .
  3. PBKDF2 và nhiều vòng SHA2 (fx nix Crypt với SHA256 ) được cho là tốt nhất thứ ba (một trong số đó là 'tốt nhất' phụ thuộc phần lớn vào số lần lặp đã sử dụng).

(Lưu ý rằng "Tin tức Hacker" chủ yếu là một cộng đồng lập trình và không phải là cái tên có thể ám chỉ một số cộng đồng chuyên gia bảo mật (mặc dù một số trong số đó cũng đi chơi ở đó).)

Nếu bạn nhìn xung quanh trên trang web này, dưới mật mãmật khẩbăm thẻ fx, thì bạn sẽ thấy rằng thường không có một Mật khẩu 'tốt nhất' được đề cập. Tôi đoán đó là một phần bởi vì các nhà mật mã thực sự không có sự đồng thuận rõ ràng về cái nào là 'mạnh nhất', do đánh giá ngang hàng tương đối hạn chế.

Đây là một so sánh khá so sánh thuận tay và dễ đọc (không bao gồm tiền điện tử, có lẽ vì nó vẫn còn quá mới).

Tốc độ là không liên quan, bởi vì tôi đang lặp lại hàm băm trong một thời gian cố định (chứ không phải là số lần lặp cố định).

Với một số băm này, bạn thực sự không thể làm điều đó. Bạn cung cấp một "yếu tố công việc" khi bạn gọi thư viện và thư viện sẽ giải quyết phần còn lại.

20
Jesper M

CRYPT_BLOWFISH (OpencD bcrypt, dựa trên mật mã đối xứng blowfish, nhưng là một thuật toán băm thực tế, dường như có rất nhiều nhầm lẫn về điều này) và CRYPT_SHA512 là tốt nhất. Cả hai đều cung cấp tùy chọn để chia tỷ lệ số 'vòng' được sử dụng, cho phép bạn chọn một sự đánh đổi an ninh/hiệu suất.

Ví dụ: số vòng mặc định cho blowfish là 7 (phạm vi giá trị là 4-31). Giá trị này là logarit, do đó, mỗi lần tăng sẽ dẫn đến thuật toán được chạy hơn 10 lần. Giá trị là 13, mất gần 1 phút cho mỗi lần băm trên Core2Duo 2.4ghz

Điều chỉnh này cao như hiệu suất có thể chấp nhận được, sẽ dẫn đến bảo mật mạnh nhất.

lưu ý: gần đây đã tìm thấy một lỗi trong một số triển khai bcrypt và do đó, bạn có thể muốn sử dụng SHA-512 thay thế.

Lưu ý: SHA-512 tính toán nhanh hơn SHA-256 trên bộ xử lý 64 bit (đặc biệt nếu được tối ưu hóa w/SSE2_64. Cụ thể, bạn nên xem xét điều này và sử dụng các vòng bổ sung để đảm bảo băm của bạn đủ mạnh cho mục đích của chúng.

Ứng dụng mã nguồn mở hashkill , đã công bố một số điểm chuẩn hiệu năng về việc GPU hiện đại có thể bẻ khóa nhanh chóng như thế nào thông qua các thuật toán băm hiện đại. Cụ thể, Radeon HD 6990 có thể thực hiện: 11001 Megahash/giây MD5 thẳng (CRYPT_MD5 được muối và triển khai FreeBSD sử dụng 100 vòng). SHA1 thẳng ở tốc độ 3444 Megahash/s.

7
Allan Jude

Tôi khuyên bạn nên sử dụng phpass

Đây là khung băm mật khẩu miền công cộng di động để sử dụng trong PHP. Nó có nghĩa là hoạt động với PHP 3 trở lên và thực tế đã được thử nghiệm với ít nhất PHP 3.0,18 đến 5,3.0 cho đến nay.

Phương thức băm ưa thích (an toàn nhất) được phpass hỗ trợ là bcrypt dựa trên kiểu Kickfish theo kiểu OpenBSD, cũng được hỗ trợ với gói crypt_blowfish trong miền công cộng của chúng tôi (cho các ứng dụng C) và được biết đến trong PHP với tên CRYPT_BLOWFISH , với một dự phòng cho các băm dựa trên DES được mở rộng theo kiểu BSDI, được biết đến trong PHP với tên CRYPT_EXT_DES, và là một biện pháp dự phòng cuối cùng đối với các hàm băm đếm mật khẩu và biến đổi dựa trên MD5 được thực hiện trong chính phpass ( còn được gọi là băm di động).

Giống như trang web nói rằng bcrypt dựa trên Blowfish là băm an toàn nhất. Tôi tin rằng điều này là đúng bởi vì nó là " bằng chứng luật của Moore " trong khi hầu hết những người khác thì không.

0
Alfred