Độ dài tối ưu cho muối mật khẩu người dùng là gì? [đóng cửa]


127

Bất kỳ loại muối nào rõ ràng sẽ giúp ích khi muối và băm mật khẩu của người dùng. Có thực hành tốt nhất trong bao lâu muối? Tôi sẽ lưu trữ muối trong bảng người dùng của mình, vì vậy tôi muốn có sự đánh đổi tốt nhất giữa kích thước lưu trữ và bảo mật. Là một muối 10 ký tự ngẫu nhiên là đủ? Hay tôi cần một cái gì đó lâu hơn?


10
Tôi không có khuyến nghị về độ dài của muối, nhưng câu trả lời hiển thị ở đây có nhiều thông tin xấu. Muối của bạn chắc chắn phải: - là ngẫu nhiên - là bí mật (không phải là một giá trị duy nhất được lưu trong tệp hình ảnh hoặc tệp cấu hình chương trình của bạn). Muối không phải là một bí mật mật mã, vì vậy lưu trữ nó trong bảng của bạn không có vấn đề gì. Mục đích duy nhất của muối là đảm bảo rằng khi các phiên bản khác nhau của cùng một mặt hàng được băm (hoặc được mã hóa) mà bạn nhận được một kết quả khác nhau.
Michael Burr

2
Đối với những người không biết muối là gì: <a href=" en.wikipedia.org/wiki/Salt_(cryptography)"> Muối (mật mã) </a> trên Wikipedia
David Koelle

1
Hoặc nếu có tỷ lệ tối ưu cho chiều dài của muối với chiều dài của sản lượng băm? Muối 8 byte có thể là đủ cho HMAC-SHA-256, nhưng có thể không phải là HMAC-SHA-512.
Vua Crend

1
Muối ngẫu nhiên bằng mật mã có cùng kích thước với đầu ra của hàm băm có nghĩa là một cuộc tấn công "thử tất cả các muối có thể" (cộng với một từ điển mật khẩu) đòi hỏi nhiều nỗ lực như một cuộc tấn công "thử tất cả các kết quả băm có thể" - đó là một lực lượng vũ phu tiêu chuẩn . Một muối ngắn hơn có nghĩa là bạn có thể có một từ điển muối cộng với một từ điển mật khẩu như một cuộc tấn công vũ phu.
Richard Gadsden

-1 Phải thừa nhận là không (thậm chí cố gắng) trả lời câu hỏi.
dùng359996

Câu trả lời:


70

Hầu hết các câu trả lời này là một chút sai lầm và chứng minh sự nhầm lẫn giữa muối và khóa mật mã. Mục đích của việc bao gồm các muối là sửa đổi chức năng được sử dụng để băm từng mật khẩu của người dùng để mỗi hàm băm mật khẩu được lưu trữ sẽ phải bị tấn công riêng lẻ. Yêu cầu bảo mật duy nhất là chúng là duy nhất cho mỗi người dùng, không có lợi ích gì trong việc chúng không thể đoán trước hoặc khó đoán.

Muối chỉ cần đủ dài để mỗi muối của người dùng sẽ là duy nhất. Muối 64 bit ngẫu nhiên rất khó có thể lặp lại ngay cả với một tỷ người dùng đã đăng ký, vì vậy điều này sẽ ổn. Một muối lặp đi lặp lại là một mối quan tâm bảo mật tương đối nhỏ, nó cho phép kẻ tấn công tìm kiếm hai tài khoản cùng một lúc nhưng trong tổng hợp sẽ không tăng tốc tìm kiếm nhiều trên toàn bộ cơ sở dữ liệu. Ngay cả muối 32 bit cũng được chấp nhận cho hầu hết các mục đích, trong trường hợp xấu nhất, tốc độ tìm kiếm của kẻ tấn công sẽ tăng khoảng 58%. Chi phí tăng muối vượt quá 64 bit không cao nhưng không có lý do bảo mật để làm như vậy.

Cũng có một số lợi ích khi sử dụng muối trên toàn bộ trang web trên đầu muối của mỗi người dùng, điều này sẽ ngăn các va chạm có thể xảy ra với băm mật khẩu được lưu trữ tại các trang web khác và ngăn việc sử dụng các bảng cầu vồng đa năng, mặc dù thậm chí là 32 bit muối là đủ để làm cho bàn cầu vồng trở thành một cuộc tấn công không thực tế.

Thậm chí đơn giản hơn - và các nhà phát triển luôn bỏ qua điều này - nếu bạn có ID người dùng hoặc tên đăng nhập duy nhất, những cái đó phục vụ hoàn toàn tốt như một muối. Nếu bạn làm điều này, bạn nên thêm một loại muối trên toàn trang web để đảm bảo bạn không chồng chéo với người dùng của một hệ thống khác có cùng ý tưởng sáng giá.


16
Có một lợi ích trong muối là không thể đoán trước. Một muối có thể dự đoán có thể được dự đoán và sử dụng trong một cuộc tấn công bảng băm. Chẳng hạn, nếu muối của bạn chỉ là ID người dùng, thì bảng băm alpha đơn giản đủ dài sẽ bao gồm không chỉ tất cả mật khẩu, mà tất cả các kết hợp tên người dùng + mật khẩu.
Richard Gadsden

6
Lưu ý liên quan đến đoạn cuối cùng của bạn, nếu bạn sử dụng muối trên toàn trang web, thì đó phải chính xác là: toàn trang web. Không phải toàn ứng dụng, tức là mỗi phiên bản mới mà bạn cài đặt ứng dụng sẽ tạo ra một loại muối mới trên toàn trang web. Chẳng hạn, nếu Windows sử dụng cùng một loại muối trên mọi cơ sở dữ liệu xác thực của Windows, thì việc tạo một bảng cầu vồng cho muối đó sẽ rất đáng giá, nhưng nếu mỗi lần cài đặt Windows tạo ra một loại muối mới thì sẽ không có.
Richard Gadsden

5
Vấn đề không thực sự là muối cần phải khó đoán. Kẻ tấn công không cần đoán muối: bất kỳ ai có quyền truy cập vào hàm băm đều đã có muối. Vấn đề là nếu muối của bạn rất phổ biến (như tên người dùng), thì chúng có thể giống như ở các trang web khác, và tại thời điểm đó, kẻ tấn công cần một bộ bảng cầu vồng nhỏ hơn nhiều để khả năng tấn công. Đây là lý do tại sao ý tưởng muối trên mỗi trang web được đề cập, để tránh loại va chạm với các trang web khác.
Nate CK

3
Lưu ý nhanh: Nếu sử dụng tên người dùng làm muối, đây có thể là một vấn đề nếu tên người dùng thay đổi. Thực tế, (bất chấp những gì được nói trong tài liệu thiết kế của khách hàng) Tôi thấy rằng người dùng thường muốn thay đổi tên người dùng.
SilentSteel

5
@ NateC-K, Ý tưởng muối trên mỗi trang web mà bạn đang nói đến được gọi là hạt tiêu.
Pacerier

35

Các tiêu chuẩn hiện được chấp nhận để băm mật khẩu tạo ra một muối dài 16 ký tự mới cho mỗi mật khẩu và lưu trữ muối với hàm băm mật khẩu.

Tất nhiên chăm sóc mật mã thích hợp để tạo ra muối thực sự ngẫu nhiên nên được thực hiện.


6
Nhân vật là một chút bệnh xác định. Bạn nên nói byte .
CodeInChaos

10
@CodesInChaos Tôi tin rằng bạn có nghĩa là octet ;-)
user2864740

1
Chào! Có vẻ như bài viết trên wikipedia đã thay đổi - có lẽ bạn nên tham khảo en.wikipedia.org/wiki/PBKDF2 hoặc một cái gì đó?
Boris Treukhov


24

Chỉnh sửa: Câu trả lời dưới đây của tôi trả lời câu hỏi khi được hỏi, nhưng câu trả lời "thực" là: chỉ cần sử dụng bcrypt , scrypt hoặc Argon2 . Nếu bạn đang đặt câu hỏi như thế này, bạn gần như chắc chắn đang sử dụng các công cụ ở mức quá thấp.

Thành thật mà nói, không có lý do phòng thủ nào để không có muối có cùng độ dài với mật khẩu băm. Nếu bạn đang sử dụng SHA-256, thì bạn có hàm băm 256 bit. Không có lý do gì để không sử dụng muối 256 bit.

Hơn 256 bit sẽ không giúp bạn cải thiện về mặt bảo mật, về mặt toán học. Nhưng đi với một loại muối ngắn hơn có thể luôn luôn kết thúc với tình huống một bàn cầu vồng bắt kịp chiều dài muối của bạn - đặc biệt là với các loại muối ngắn hơn.


10
Đó không phải một vấn đề lớn; người dùng sẽ hầu như không nhận thấy sự khác biệt giữa băm mili giây và băm nửa giây, cộng với băm mật khẩu thực sự sẽ mất nhiều thời gian hơn để làm chậm các cuộc tấn công vũ phu - mặc dù ba lần tấn công điển hình bị khóa trong 15 phút là tốt hơn. Bạn đang "lãng phí" chu kỳ CPU để làm điều này? Ừ gì cũng được. CPU dành nhiều thời gian nhàn rỗi hơn không phải trên hầu hết các trang web, vì vậy nó có vấn đề gì? Nếu bạn đang gặp vấn đề về hiệu suất, hãy mở rộng ra.
Randolpho

14
Muối bảo vệ chống lại bàn cầu vồng. Một muối 512 bit với hàm băm 256 bit sẽ vẫn chỉ dẫn đến 256 bit entropy trong mật khẩu cuối cùng.
Stephen Touset

8
Băm chậm là một tính năng, không phải là một lỗi.
outis

7
Nếu bạn có hàm băm 3 bit, muối 9999 bit của bạn sẽ vẫn chỉ băm xuống còn 3 bit entropy có thể. Một bảng cầu vồng sẽ chỉ phải tìm ba muối cho mỗi mật khẩu dẫn đến một đầu ra khác nhau, đó là một yếu tố nhân liên tục và do đó bị loại bỏ khỏi big-O.
Stephen Touset

2
.................................................. .................................... hệ thống cụ thể. Các mục đích của muối là để ngăn chặn các cuộc tấn công tính toán trước để băm không thể tìm kiếm và ngay lập tức đảo ngược vào bản rõ . Với muối 9999 bit, mật khẩu của bạn vẫn là một bí mật , trong khi với muối 3 bit, mật khẩu của bạn hiện được cả thế giới biết đến (và họ có thể sử dụng nó để đăng nhập vào tài khoản khác của bạn vì nhiều người thường sử dụng lại mật khẩu). Tôi thấy thật thú vị khi 5 người ở đây đã thực sự nâng cao nhận xét của bạn do từ "entropy" trong đó.
Pacerier

7

Wikipedia :

Các phương thức mã hóa và bcrypt SHA2 được sử dụng trong Linux, BSD Unix và Solaris, có muối 128 bit. Các giá trị muối lớn hơn này tạo ra các cuộc tấn công tiền mã hóa cho hầu hết mọi độ dài mật khẩu không thể thực hiện được đối với các hệ thống này trong tương lai gần.

Muối 128 bit (16 byte) sẽ là đủ. Bạn có thể biểu diễn nó như một chuỗi các 128 / 4 = 32chữ số thập lục phân.


Dường như với tôi rằng một ví dụ về những gì các hệ thống an toàn khác sử dụng là một ví dụ tuyệt vời về cách thực hành tốt nhất.
cjbarth

1
@ mkuity0 Cảm ơn, tôi đã cập nhật câu trả lời.
Andrii Nemchenko

2

Một câu trả lời có thể là sử dụng kích thước của muối với giá trị mà hàm băm bạn sẽ sử dụng cung cấp về mặt bảo mật.

Ví dụ: Nếu bạn định sử dụng SHA-512, hãy sử dụng muối 256 bit vì bảo mật được cung cấp bởi SHA-512 là 256 bit.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.