2009-05-06 65 views
18

Một article mà tôi stumbled khi ở đây trong các liên kết SO cung cấp cho other articles do đó cung cấp các liên kết đến evenmorearticles, vvLàm cách nào để lưu trữ mật khẩu * chính xác *?

Và cuối cùng tôi đã rời hoàn toàn bối rối - như vậy là gì các cách tốt nhất để lưu trữ mật khẩu trong DB? Từ những gì tôi có thể đặt lại với nhau, bạn nên:

  • Sử dụng một muối dài (ít nhất 128 bit ngẫu nhiên), được lưu trữ trong bản rõ bên cạnh mật khẩu;
  • Sử dụng nhiều lần lặp lại SHA-256 (hoặc mức SHA lớn hơn) trên mật khẩu muối.

Nhưng ... tôi càng đọc về mật mã càng hiểu rằng tôi không thực sự hiểu bất cứ điều gì và những điều tôi nghĩ là đúng trong nhiều năm thực sự là không đúng. Có chuyên gia nào về đề tài này ở đây không?

Đã thêm: Dường như một số người thiếu điểm. Tôi lặp lại liên kết cuối cùng ở trên. Điều đó sẽ làm rõ mối quan tâm của tôi.

https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2007/july/enough-with-the-rainbow-tables-what-you-need-to-know-about-secure-password-schemes/

+0

Bạn đã hiểu chính xác. Không lưu trữ mật khẩu - lưu trữ băm mật khẩu. Câu hỏi thực sự của bạn là gì? Phần nào của muối và băm là khó hiểu? Hay bạn không hài lòng vì điều này mới mẻ đối với bạn? Bạn đã tìm thấy lời khuyên mâu thuẫn nào? –

+0

là điều này để xác thực người dùng trong chương trình của riêng bạn hoặc bạn đang tìm cách tạo trình quản lý mật khẩu mà bạn cần trả lại mật khẩu? – Audioillity

+2

Không có câu trả lời 'chính xác'. Mức độ bảo mật phụ thuộc rất nhiều vào ngữ cảnh của ứng dụng. Một máy bị cô lập (không kết nối vật lý với mạng) có thể có ít mật khẩu hơn so với cơ sở dữ liệu trên web. Sau đó, một lần nữa, cơ sở dữ liệu của bạn sẽ không bao giờ được truy cập trực tiếp vào mạng, nên luôn có một lớp truy cập giữa người dùng và cơ sở dữ liệu. Và băm/mật khẩu của mật khẩu là vô ích nếu mật khẩu được gửi đến cơ sở dữ liệu/lớp truy cập ở định dạng văn bản thuần túy. – Skizz

Trả lời

12

bạn đã nhận nó đúng. Chỉ có hai gợi ý:

  1. Nếu một ngày SHA1 trở nên quá yếu và bạn muốn sử dụng cái gì khác, nó là không thể để unhash các mật khẩu cũ và rehash chúng với các chương trình mới. Vì lý do này, tôi đề nghị rằng gắn liền với mỗi mật khẩu một số "phiên bản" cho bạn biết sơ đồ bạn đã sử dụng (độ dài muối, băm, bao nhiêu lần). Nếu một ngày bạn cần chuyển từ SHA sang một thứ gì đó mạnh hơn, bạn có thể tạo mật khẩu kiểu mới trong khi vẫn có mật khẩu kiểu cũ trong cơ sở dữ liệu và vẫn phân biệt chúng. Việc di chuyển người dùng sang sơ đồ mới sẽ dễ dàng hơn.

  2. Mật khẩu vẫn chuyển từ người dùng sang hệ thống mà không cần mã hóa. Nhìn vào SRP nếu đó là một vấn đề. SRP quá mới nên bạn nên có một chút hoang tưởng về việc triển khai nó, nhưng cho đến nay có vẻ đầy hứa hẹn.

Chỉnh sửa: Tắt bcrypt đánh bại tôi trên ý tưởng số 1. Thông tin được lưu trữ là (chi phí, muối, băm), trong đó chi phí là bao nhiêu lần băm đã được thực hiện. Có vẻ như bcrypt đã làm điều gì đó đúng. Tăng số lần bạn băm có thể được thực hiện mà không cần sự can thiệp của người dùng.

+1

+1 cho ý tưởng ghi lại phiên bản cho mật khẩu. Tôi có thể thấy rằng hữu ích trong tương lai .... – Matt

+1

Đó thực sự là một ý tưởng tồi vì nó không nhất thiết làm phức tạp giải pháp bằng cách tính toán một vấn đề chưa tồn tại. Vi phạm cổ điển nguyên tắc YAGNI. –

+1

+1 để xử lý sự cố thực sự. Sự từ chối sâu rộng của Kiff có thể dễ dàng bác bỏ bằng các ví dụ về vấn đề được hỏi về vấn đề này trên SO. Là một người đã phải yêu cầu hàng chục ngàn người dùng chọn mật khẩu mới trong một khoảng thời gian ngắn, tôi ước tôi có thể có một con đường di chuyển mượt mà hơn. – erickson

0

Tôi nghĩ rằng không có sự lặp lại thêm vào mật khẩu cần, Juste chắc chắn có một muối và một Complexe một;) tôi personnaly sử dụng SHA-1 kết hợp với 2 keyphrases muối.

+0

Erm ... http://www.schneier.com/blog/archives/2005/02/sha1_broken.html – chaos

+1

Băm 1 vượt qua có lỗ hổng.Bạn có thể liệt kê một nhóm ứng cử viên rất có khả năng dẫn đến băm. Nhiều đường chuyền gây ra các bảng cầu vồng phát triển nhanh chóng, do đó băm 256x. http://en.wikipedia.org/wiki/Rainbow_table –

+0

Tôi sử dụng SHA-512, vì không gian (và thời gian thuật toán) không phải là một vấn đề, và có một bài báo cho thấy va chạm trong SHA-1 ... tuy nhiên tôi chỉ hoang tưởng. – MichaelICE

2

Sự thật tùy thuộc vào mật khẩu của bạn. Bạn nên lưu trữ bất kỳ mật khẩu nào cẩn thận, nhưng đôi khi cần nhiều sự chăm sóc hơn những người khác. Theo nguyên tắc chung, tất cả mật khẩu sẽ được băm và mỗi mật khẩu phải có một muối duy nhất.

Thực sự, muối không cần phải phức tạp, ngay cả những người nhỏ có thể gây ra một cơn ác mộng thực sự cho bánh quy giòn cố gắng để đạt được nhập cảnh vào hệ thống. Chúng được thêm vào một mật khẩu để ngăn chặn việc sử dụng các bảng Rainbow để hack nhiều mật khẩu của tài khoản. Tôi sẽ không thêm một chữ cái duy nhất của bảng chữ cái vào một mật khẩu và gọi nó là một muối, nhưng bạn không cần phải làm cho nó một guid duy nhất được mã hóa ở một nơi khác trong cơ sở dữ liệu hoặc.

Một thứ khác liên quan đến muối. Chìa khóa để tạo mật khẩu + công việc muối khi băm là sự phức tạp của sự kết hợp của cả hai. Nếu bạn có một mật khẩu 12 ký tự và thêm một muối 1 ký tự vào nó, muối không làm nhiều, nhưng nứt mật khẩu vẫn là một kỳ công hoành tráng. Điều ngược lại cũng đúng.

0

Độ dài của muối không thực sự quan trọng, miễn là nó là duy nhất cho người dùng. Lý do cho một muối là để một nỗ lực tạo ra tại một trận đấu băm chỉ hữu ích cho một hàng duy nhất của bảng người dùng của bạn trong DB.

+3

Nó không quan trọng. Những gì muối của bạn có hiệu quả làm là tăng kích thước của bảng cầu vồng đã được sử dụng để crack băm của bạn. Muối ngắn không làm theo cách đó. (Một trong những vấn đề chính của muối là khắc phục được rằng người dùng chọn mật khẩu ngắn.) – chaos

+0

Nó không quan trọng, nhưng chỉ đến một điểm. Đối với mỗi bit muối bạn thêm vào, bạn tăng gấp đôi yêu cầu về không gian cần thiết cho một cuộc tấn công từ điển (hoặc kẻ tấn công phải cắt từ điển của mình làm đôi). Nếu có chính sách lựa chọn mật khẩu tốt (độ dài tối thiểu, yêu cầu đối với trường hợp hỗn hợp, chữ số, dấu chấm câu), có thể bạn sẽ an toàn với các muối 12 bit cũ. Tuy nhiên, cũng có thể sử dụng 64 bit và được an toàn ở khắp mọi nơi. Không ai thực sự có chỗ cho 10^19 bộ từ điển, ngay cả khi chúng thực sự nhỏ bé. – erickson

0

Nói một cách đơn giản, sử dụng thuật toán băm mật mã an toàn và một số muối cho mật khẩu, điều đó đủ tốt cho 99,99% tất cả các trường hợp sử dụng. Liên kết yếu sẽ là mã kiểm tra mật khẩu cũng như nhập mật khẩu.

+0

Miễn là việc bảo mật tốt hơn cũng phức tạp như 5 dòng mã nhỏ hơn, tôi muốn có tùy chọn tốt hơn trong tất cả các trường hợp sử dụng. –

+0

Tôi không nghĩ rằng bạn sẽ nhận được điều đó trong "5 dòng mã nhỏ hơn" ... nhưng tôi cũng sẽ đọc các câu trả lời và nhận xét khác ở đây, có thể họ sẽ chứng minh cho tôi sai. – Lucero

+0

Năm dòng mã và cột cơ sở dữ liệu khác. – chaos

1

Sử dụng:

  1. lưu trữ mật khẩu băm
  2. Một 128+ chút dùng cấp muối, ngẫu nhiên, tái sinh (ví dụ:bạn tạo ra các muối mới khi bạn tạo các băm mật khẩu mới, bạn không liên tục giữ cùng một muối cho một người dùng nhất định)
  3. Phương pháp băm mạnh, tính toán tốn kém
  4. Phương pháp khác biệt một chút lặp bạn sử dụng, những gì đặt các muối được nối vào, một cái gì đó) từ cả hai bất kỳ 'hướng dẫn thực hiện tiêu chuẩn' như thế này và từ bất kỳ thực hiện lưu trữ mật khẩu khác mà bạn đã viết
+1

128 bit là quá mức cần thiết. Ngay cả 64-bit là quá mức cần thiết, vì vậy đó là những gì tôi sử dụng. Cũng không cần một "muối mức hệ thống" trừ khi "muối mức người dùng" có thể dự đoán được bằng cách nào đó cho người dùng (như sử dụng tên của họ). Nó dễ dàng hơn và an toàn hơn chỉ để sử dụng một RNG mật mã cho muối. – erickson

+0

Overkill? Tôi thích quá mức. Muối mức hệ thống là bảo vệ chuyên sâu cho sự kiện rằng nội dung cơ sở dữ liệu của bạn bị xâm phạm mà không có mã nguồn của bạn bị xâm phạm. Đồng ý rằng muối nên là tiếng ồn, không phải thông tin người dùng. – chaos

+0

Tôi không hiểu. Thực hiện đúng, các tiêu hóa, muối, và mã nguồn có thể được tiết lộ, nó vẫn sẽ là không khả thi cho kẻ tấn công để khám phá mật khẩu. Khi bạn nói rằng cơ sở dữ liệu có thể bị xâm nhập, bạn có ý gì? Bạn có ý nghĩa gì khi bị xâm phạm? – erickson

Các vấn đề liên quan