Làm thế nào tôi nên tiếp cận một cách đạo đức việc lưu trữ mật khẩu người dùng để lấy lại bản rõ sau này?


1344

Khi tôi tiếp tục xây dựng ngày càng nhiều trang web và ứng dụng web, tôi thường được yêu cầu lưu trữ mật khẩu của người dùng theo cách mà họ có thể được truy xuất nếu / khi người dùng gặp sự cố (để gửi email liên kết quên mật khẩu, hãy duyệt qua điện thoại, v.v.) Khi tôi có thể đấu tranh gay gắt với thực tiễn này và tôi thực hiện nhiều chương trình 'phụ' để đặt lại mật khẩu và hỗ trợ quản trị mà không cần lưu trữ mật khẩu thực tế của họ.

Khi tôi không thể chiến đấu với nó (hoặc không thể thắng) thì tôi luôn mã hóa mật khẩu theo cách nào đó để nó, ít nhất, không được lưu trữ dưới dạng văn bản gốc trong cơ sở dữ liệu, mặc dù tôi biết rằng nếu DB của tôi bị hack Sẽ không mất nhiều thời gian để thủ phạm bẻ khóa mật khẩu, điều đó khiến tôi không thoải mái.

Trong một thế giới hoàn hảo, mọi người sẽ cập nhật mật khẩu thường xuyên và không sao chép chúng trên nhiều trang web khác nhau. Thật không may, tôi biết NHIỀU người có cùng mật khẩu công việc / nhà / email / ngân hàng và thậm chí còn tự do cung cấp cho tôi khi họ cần hỗ trợ. Tôi không muốn trở thành người chịu trách nhiệm cho sự sụp đổ tài chính của họ nếu các thủ tục bảo mật DB của tôi không thành công vì một số lý do.

Về mặt đạo đức và đạo đức tôi cảm thấy có trách nhiệm bảo vệ những gì có thể, đối với một số người dùng, sinh kế của họ ngay cả khi họ đối xử với nó ít tôn trọng hơn. Tôi chắc chắn rằng có nhiều cách để tiếp cận và lập luận được thực hiện cho băm muối và các tùy chọn mã hóa khác nhau, nhưng có một 'cách thực hành tốt nhất' khi bạn phải lưu trữ chúng không? Trong hầu hết các trường hợp tôi đang sử dụng PHP và MySQL nếu điều đó tạo ra bất kỳ sự khác biệt nào trong cách tôi nên xử lý các chi tiết cụ thể.

Thông tin bổ sung cho Bounty

Tôi muốn làm rõ rằng tôi biết đây không phải là điều bạn muốn làm và trong hầu hết các trường hợp từ chối làm như vậy là tốt nhất. Tôi, tuy nhiên, không tìm kiếm một bài giảng về giá trị của việc thực hiện phương pháp này Tôi đang tìm kiếm các bước tốt nhất để thực hiện nếu bạn thực hiện phương pháp này.

Trong một lưu ý dưới đây, tôi đã đưa ra quan điểm rằng các trang web chủ yếu hướng đến người già, bị thách thức về tinh thần hoặc rất trẻ có thể trở nên khó hiểu đối với mọi người khi họ được yêu cầu thực hiện thói quen khôi phục mật khẩu an toàn. Mặc dù chúng tôi có thể thấy nó đơn giản và trần tục trong những trường hợp đó, một số người dùng cần sự hỗ trợ thêm của việc có một công nghệ dịch vụ giúp họ vào hệ thống hoặc gửi email / hiển thị trực tiếp cho họ.

Trong các hệ thống như vậy, tỷ lệ tiêu hao từ các nhân khẩu học này có thể làm hỏng ứng dụng nếu người dùng không được cung cấp mức hỗ trợ truy cập này, vì vậy hãy trả lời với thiết lập như vậy trong tâm trí.

Cảm ơn mọi người

Đây là một câu hỏi thú vị với nhiều cuộc tranh luận và tôi rất thích nó. Cuối cùng tôi đã chọn một câu trả lời là cả hai đều giữ bảo mật mật khẩu (tôi sẽ không phải giữ văn bản đơn giản hoặc mật khẩu có thể khôi phục được), nhưng cũng có thể cho cơ sở người dùng mà tôi đã chỉ định đăng nhập vào hệ thống mà không gặp phải nhược điểm lớn nào tôi tìm thấy phục hồi mật khẩu bình thường.

Như mọi khi, có khoảng 5 câu trả lời mà tôi muốn đánh dấu là đúng vì những lý do khác nhau, nhưng tôi phải chọn câu trả lời hay nhất - tất cả những câu trả lời còn lại có +1. Cảm ơn mọi người!

Ngoài ra, cảm ơn tất cả mọi người trong cộng đồng Stack đã bình chọn cho câu hỏi này và / hoặc đánh dấu nó là một mục yêu thích. Tôi nhận được 100 phiếu bầu như một lời khen và hy vọng rằng cuộc thảo luận này đã giúp đỡ người khác có cùng mối quan tâm mà tôi có.


155
Tôi nghĩ rằng anh ấy biết rằng nó không tốt. Anh ấy vẫn đang tìm kiếm giải pháp tốt nhất theo các yêu cầu đã nêu.
stefanw

33
Vào cuối ngày, tất cả những gì bạn sẽ làm là cẩn thận thực hiện một lỗ hổng có thể tránh được.
rook

20
@Michael Brooks - Tôi muốn bạn biết rằng tôi hoàn toàn đồng ý với CWE-257 và rất thích chỉ trích dẫn nguyên văn đó mỗi lần tôi được yêu cầu tạo mật khẩu có thể phục hồi dưới dạng bản rõ. Tuy nhiên, trong thực tế, khách hàng và người dùng hiếm khi quan tâm đến các quy định của NIST và chỉ muốn tôi làm điều đó. 90% thời gian tôi có thể thuyết phục họ bằng cách khác nhưng trong 10% thời gian đó tôi không thể cố gắng xác định hướng hành động tốt nhất - trong những trường hợp đó CWE-257 là tro bụi trong tay tôi (thật không may).
Shane

81
@AviD: "Giá trị thấp" của hệ thống hoàn toàn không ảnh hưởng đến vấn đề này vì mọi người sử dụng lại mật khẩu của họ . Tại sao mọi người không thể hiểu được sự thật đơn giản này? Nếu bạn bẻ khóa mật khẩu trên một số hệ thống "giá trị thấp", bạn có thể sẽ có một số mật khẩu hợp lệ cho các hệ thống "giá trị cao" khác.
Aaronaught

20
Một điểm khác cũng đã được làm sáng tỏ, mà tôi vừa đề cập trong luồng bình luận cho câu trả lời của tôi: Làm thế nào để bạn biết rằng người yêu cầu những yêu cầu này là đáng tin cậy? Điều gì sẽ xảy ra nếu cái cớ "khả năng sử dụng" chỉ là một mặt tiền che giấu một ý định thực sự để đánh cắp mật khẩu tại một thời điểm nào đó trong tương lai? Naiveté của bạn có thể chỉ có chi phí hàng triệu khách hàng và cổ đông. Các chuyên gia bảo mật phải lặp lại điều này bao nhiêu lần trước khi cuối cùng chìm vào: Các mối đe dọa bảo mật phổ biến nhất và nghiêm trọng nhất luôn luôn là NỘI BỘ.
Aaronaught

Câu trả lời:


1037

Làm thế nào về việc thực hiện một cách tiếp cận hoặc góc độ khác trong vấn đề này? Hỏi lý do tại sao mật khẩu bắt buộc phải có trong văn bản gốc: nếu đó là để người dùng có thể truy xuất mật khẩu, thì nói đúng ra bạn không thực sự cần lấy lại mật khẩu họ đã đặt (dù sao họ cũng không nhớ đó là mật khẩu nào) cần có thể cung cấp cho họ mật khẩu mà họ có thể sử dụng .

Hãy nghĩ về nó: nếu người dùng cần lấy lại mật khẩu, thì đó là vì họ đã quên nó. Trong trường hợp đó, mật khẩu mới cũng tốt như mật khẩu cũ. Tuy nhiên, một trong những nhược điểm của các cơ chế đặt lại mật khẩu phổ biến được sử dụng hiện nay là mật khẩu được tạo trong hoạt động đặt lại nói chung là một loạt các ký tự ngẫu nhiên, do đó người dùng khó có thể nhập chính xác trừ khi chúng sao chép-n- dán. Đó có thể là một vấn đề cho người dùng máy tính ít hiểu biết.

Một cách xung quanh vấn đề đó là cung cấp mật khẩu được tạo tự động là văn bản ngôn ngữ tự nhiên ít nhiều. Mặc dù các chuỗi ngôn ngữ tự nhiên có thể không có entropy mà một chuỗi các ký tự ngẫu nhiên có cùng độ dài có, không có gì cho biết mật khẩu được tạo tự động của bạn chỉ cần có 8 (hoặc 10 hoặc 12) ký tự. Nhận một cụm mật khẩu được tạo tự động có độ ngẫu nhiên cao bằng cách xâu chuỗi một số từ ngẫu nhiên (để lại một khoảng trắng giữa chúng, vì vậy chúng vẫn có thể nhận ra và đánh máy được bởi bất kỳ ai có thể đọc). Sáu từ ngẫu nhiên có độ dài khác nhau có thể dễ dàng nhập chính xác và có độ tin cậy cao hơn 10 ký tự ngẫu nhiên và chúng cũng có thể có một entropy cao hơn. Ví dụ: entropy của mật khẩu 10 ký tự được rút ngẫu nhiên từ chữ hoa, chữ thường, chữ số và 10 ký hiệu dấu chấm câu (với tổng số 72 ký hiệu hợp lệ) sẽ có entropy là 61,7 bit. Sử dụng từ điển 7776 từ (như Diceware sử dụng) có thể được chọn ngẫu nhiên cho cụm mật khẩu sáu từ, cụm mật khẩu sẽ có entropy 77,4 bit. XemFAQ Diceware để biết thêm.

  • một cụm mật khẩu với khoảng 77 bit của entropy: "thừa nhận văn xuôi bùng lên sự tinh tế cấp tính"

  • một mật khẩu với khoảng 74 bit entropy: "K: & $ R ^ tt ~ qkD"

Tôi biết tôi muốn gõ cụm từ đó và với copy-n-paste, cụm từ này cũng dễ sử dụng mật khẩu đó, vì vậy không mất gì ở đó. Tất nhiên, nếu trang web của bạn (hoặc bất kể tài sản được bảo vệ là gì) không cần entropy 77 bit cho cụm mật khẩu được tạo tự động, hãy tạo ra ít từ hơn (mà tôi chắc chắn rằng người dùng của bạn sẽ đánh giá cao).

Tôi hiểu các lập luận rằng có những tài sản được bảo vệ bằng mật khẩu thực sự không có giá trị cao, vì vậy việc vi phạm mật khẩu có thể không phải là kết thúc của thế giới. Ví dụ: tôi có thể không quan tâm nếu 80% mật khẩu tôi sử dụng trên các trang web khác nhau bị vi phạm: tất cả những gì có thể xảy ra là một người nào đó đang spam hoặc đăng dưới tên của tôi trong một thời gian. Điều đó sẽ không tuyệt vời, nhưng nó không giống như họ sẽ xâm nhập vào tài khoản ngân hàng của tôi. Tuy nhiên, do thực tế là nhiều người sử dụng cùng một mật khẩu cho các trang web diễn đàn web của họ như họ làm cho tài khoản ngân hàng của họ (và có thể là cơ sở dữ liệu bảo mật quốc gia), tôi nghĩ tốt nhất nên xử lý ngay cả những mật khẩu 'giá trị thấp' như không -có thể phục hồi.


93
+1 cho cụm mật khẩu, dường như cung cấp sự cân bằng tốt nhất về độ mạnh của mật khẩu và thu hồi người dùng.
Aaronaught

197
Ngoài ra, bạn có thể tạo một câu đầy đủ, ví dụ <Tính từ> <danh từ> là <động từ> <trạng từ>. Con mèo xanh đang nhảy điên cuồng. có danh sách cho các danh mục. với 1024 lựa chọn cho mỗi bạn có 40 bit entropy.
Dominik Weber

28
+1 để xem việc sử dụng lại mật khẩu là một vấn đề quan trọng để tránh nó
lurscher

57
"Hãy suy nghĩ về nó - nếu người dùng cần lấy lại mật khẩu, đó là vì họ đã quên nó" - không nhất thiết là đúng! Tôi thường muốn lấy mật khẩu của mình vì tôi đang ở trên máy tính xách tay và tôi BIẾT máy của mình ở nhà đã lưu mật khẩu của mình hoặc nó được ghi ở đâu đó an toàn và tôi không muốn phá vỡ nó bằng cách cấp một cái mới .
joachim

5
Câu hỏi có điểm cao nhất trên trang web IT Security SE mới liên quan đến tính hợp lệ của phép tính entropy này. (Chà, về mặt kỹ thuật, nó liên quan đến xkcd mà @Pieter đã liên kết.)
Pops

592

Hãy tưởng tượng ai đó đã ủy thác một tòa nhà lớn sẽ được xây dựng - một quán bar, giả sử - và cuộc trò chuyện sau đây diễn ra:

Kiến trúc sư: Đối với một tòa nhà có kích thước và công suất này, bạn sẽ cần lối thoát lửa ở đây, đây và đây.
Khách hàng: Không, điều đó quá phức tạp và tốn kém để duy trì, tôi không muốn bất kỳ cửa phụ hoặc cửa sau.
Kiến trúc sư: Thưa ông, lối thoát lửa không phải là tùy chọn, chúng được yêu cầu theo mã lửa của thành phố.
Khách hàng: Tôi không trả tiền cho bạn để tranh luận. Chỉ cần làm những gì tôi yêu cầu.

Kiến trúc sư sau đó hỏi làm thế nào để xây dựng tòa nhà này một cách có đạo đức mà không có lối thoát lửa?

Trong ngành xây dựng và kỹ thuật, cuộc trò chuyện rất có thể kết thúc như thế này:

Kiến trúc sư: Tòa nhà này không thể được xây dựng mà không có lối thoát lửa. Bạn có thể đi đến bất kỳ chuyên gia được cấp phép khác và anh ta sẽ nói với bạn điều tương tự. Tôi đi ngay bây giờ đây; gọi lại cho tôi khi bạn sẵn sàng hợp tác.

Lập trình máy tính có thể không phải là một nghề được cấp phép , nhưng mọi người dường như thường tự hỏi tại sao nghề nghiệp của chúng ta không có được sự tôn trọng như một kỹ sư dân dụng hoặc cơ khí - tốt, đừng tìm đâu xa. Những ngành nghề đó, khi yêu cầu rác thải (hoặc hoàn toàn nguy hiểm), sẽ từ chối. Họ biết đó không phải là một cái cớ để nói, "tốt, tôi đã làm hết sức, nhưng anh ấy khăng khăng, và tôi phải làm theo những gì anh ấy nói." Họ có thể mất giấy phép cho lý do đó.

Tôi không biết liệu bạn hoặc khách hàng của bạn có phải là một phần của bất kỳ công ty giao dịch công khai nào hay không, nhưng việc lưu trữ mật khẩu dưới bất kỳ hình thức có thể phục hồi nào sẽ khiến bạn thất bại trong một số loại kiểm toán bảo mật khác nhau. Vấn đề không phải là khó khăn như thế nào đối với một số "hacker" có quyền truy cập vào cơ sở dữ liệu của bạn để khôi phục mật khẩu. Phần lớn các mối đe dọa an ninh là nội bộ. Những gì bạn cần để bảo vệ chống lại là một số nhân viên bất mãn bỏ đi với tất cả mật khẩu và bán chúng cho người trả giá cao nhất. Sử dụng mã hóa bất đối xứng và lưu trữ khóa riêng trong cơ sở dữ liệu riêng biệt hoàn toàn không có gì để ngăn chặn tình huống này; luôn luôn có người có quyền truy cập vào cơ sở dữ liệu riêng tư và đó là một rủi ro bảo mật nghiêm trọng.

Không có cách đạo đức hoặc trách nhiệm để lưu trữ mật khẩu ở dạng có thể phục hồi. Giai đoạn = Stage.


124
@Aaronaught - Tôi nghĩ rằng đó là một điểm công bằng và hợp lệ, nhưng hãy để tôi thay đổi điều đó với bạn. Bạn đang làm việc trong một dự án cho một công ty với tư cách là một nhân viên và sếp của bạn nói rằng 'đây là một yêu cầu của hệ thống của chúng tôi' (vì bất kỳ lý do gì). Bạn có bỏ đi công việc đầy phẫn nộ? Tôi biết rằng có trách nhiệm khi tôi có toàn quyền chịu trách nhiệm - nhưng nếu một công ty chọn rủi ro thất bại trong kiểm toán hoặc trách nhiệm pháp lý thì đó là nhiệm vụ của tôi là hy sinh công việc của mình để chứng minh quan điểm, hoặc tôi tìm kiếm TỐT NHẤT và cách SAFEST để làm những gì họ nói? Chỉ chơi trò bênh vực của quỷ ..
Shane

44
Tôi không phải là một luật sư, nhưng xem xét điều này. Nếu người giám sát của bạn yêu cầu bạn làm điều gì đó trái với lợi ích của công ty, chẳng hạn như bằng cách đưa họ ra một trách nhiệm dễ tránh, thì đó là công việc của bạn phải tuân theo hay từ chối một cách lịch sự? Vâng, họ là ông chủ của bạn, nhưng họ có một ông chủ của riêng họ, ngay cả khi đó là nhà đầu tư. Nếu bạn không vượt qua đầu họ, ai sẽ quay đầu khi lỗ hổng bảo mật của bạn bị khai thác? Chỉ cần một cái gì đó để xem xét.
Steven Sudit

68
Các nhà phát triển luôn cố gắng nói rằng công việc của chúng tôi khó khăn hơn nhiều so với những người khác như thế nào bởi vì chúng tôi nhận được các yêu cầu rác thay đổi mọi lúc. Vâng, đây là một ví dụ hoàn hảo về lý do tại sao; nghề nghiệp của chúng tôi rất cần một xương sống. Nghề nghiệp của chúng tôi rất cần có thể nói "không, đây không phải là một yêu cầu chấp nhận được, đây không phải là điều mà tôi có thể phát triển một cách thiện chí, bạn có thể là khách hàng / chủ lao động của tôi nhưng tôi có trách nhiệm nghề nghiệp đối với khách hàng và công chúng, và nếu bạn muốn điều này được thực hiện thì bạn sẽ phải tìm nơi khác. "
Aaronaught

36
@sfussalanger: Bạn không cần biết lai lịch. Không thể chấp nhận được. Bạn đang cho rằng khách hàng đáng tin cậy 100% - điều gì sẽ xảy ra nếu anh ta yêu cầu cụ thể yêu cầu này để anh ta có thể thực hiện với mật khẩu sau này? An ninh là một trong số ít vật phẩm đang được phát triển được chạm khắc trên đá. Có một số điều bạn không nên làm và lưu trữ mật khẩu có thể phục hồi là mười trong số đó.
Aaronaught

37
OK, chúng ta hãy đánh giá rủi ro, ngay tại đây và ngay bây giờ. "Nếu bạn lưu trữ mật khẩu ở dạng có thể phục hồi, bạn đang tạo ra một nguy cơ không đáng kể về mật khẩu bị đánh cắp. Cũng có khả năng ít nhất một số người dùng sẽ sử dụng cùng một mật khẩu cho email và tài khoản ngân hàng của họ. và các tài khoản ngân hàng bị rút cạn, nó có thể sẽ trở thành tiêu đề, không ai sẽ làm việc với bạn nữa và bạn có thể sẽ bị kiện ra khỏi sự tồn tại. " Chúng ta có thể cắt crap bây giờ không? Việc bạn mang từ "Đức quốc xã" vào đây cho thấy rõ ràng rằng bạn không có ý thức về lý trí.
Aaronaught

206

Bạn có thể mã hóa mật khẩu + muối bằng khóa chung. Đối với thông tin đăng nhập, chỉ cần kiểm tra xem giá trị được lưu bằng giá trị được tính từ đầu vào của người dùng + muối. Nếu có một thời gian, khi mật khẩu cần được khôi phục trong bản rõ, bạn có thể giải mã thủ công hoặc bán tự động bằng khóa riêng. Khóa riêng có thể được lưu trữ ở nơi khác và ngoài ra có thể được mã hóa đối xứng (sẽ cần có sự tương tác của con người để giải mã mật khẩu sau đó).

Tôi nghĩ rằng đây thực sự là loại tương tự như cách Windows Recovery Agent hoạt động.

  • Mật khẩu được lưu trữ được mã hóa
  • Mọi người có thể đăng nhập mà không cần giải mã vào bản rõ
  • Mật khẩu có thể được phục hồi thành bản rõ, nhưng chỉ với một khóa riêng, có thể được lưu trữ bên ngoài hệ thống (trong một ngân hàng an toàn, nếu bạn muốn).

34
-1 mật khẩu không bao giờ được "mã hóa" Đó là vi phạm CWE-257 cwe.mitre.org/data/def địnhs / 572.html
rook

100
1. Câu hỏi nói rằng mật khẩu nên được phục hồi thành bản rõ, vì vậy đây là một yêu cầu. 2. Tôi đang sử dụng mã hóa bất đối xứng ở đây và không mã hóa đối xứng. Chìa khóa để giải mã là không cần thiết cho hoạt động hàng ngày và có thể được giữ trong ngân hàng an toàn. Đối số trong liên kết là hợp lệ, nhưng không áp dụng cho tình huống này.
stefanw

57
Đúng, nhưng bạn có thể đồng ý rằng đưa ra các yêu cầu đây là cách làm có trách nhiệm nhất? Bạn có thể đánh tôi cả ngày với CWE-257 của bạn, điều đó sẽ không thay đổi vấn đề thú vị của việc lưu trữ và làm việc an toàn với thông tin đăng nhập và có thể khôi phục chúng về dạng ban đầu nếu cần.
stefanw

10
Windows Recovery Agent cũng là một ví dụ tồi ở đây, vì nó liên quan đến mã hóa thực tế chứ không phải quản lý mật khẩu. Khóa mã hóa không giống như mật khẩu; các quy tắc và thực hành xung quanh mỗi là hoàn toàn khác nhau. Mã hóa và xác thực không giống nhau. Mã hóa là để bảo mật - một khóa được sử dụng để bảo vệ dữ liệu . Xác thực là để nhận dạng , trong đó khóa là dữ liệu (nó là một yếu tố trong quy trình xác thực). Vì vậy, tôi nhắc lại, mã hóa và xác thực không giống nhau. Bạn không thể áp dụng hợp lệ các nguyên tắc của cái này với cái kia.
Aaron

16
+1 Đâu là điểm nhấn một cách ám ảnh trên CWE-257? Đó là một điểm yếu (CWE), không phải là một lỗ hổng (CVE). So sánh mật khẩu có thể phục hồi với tràn bộ đệm là so sánh táo và cam. Đơn giản chỉ cần đảm bảo khách hàng hiểu được vấn đề (hãy để anh ấy ký một cái gì đó nói như vậy - nếu không anh ấy có thể không nhớ bất cứ điều gì nếu có vấn đề) và tiếp tục. Ngoài ra, các biện pháp bảo mật bắt buộc phụ thuộc vào giá trị của hệ thống và nguy cơ tiềm ẩn của một cuộc tấn công. Nếu một kẻ tấn công thành công chỉ có thể hủy bỏ một số đăng ký bản tin, không có lý do để tranh luận về bất kỳ vấn đề.
sfussalanger

133

Đừng bỏ cuộc. Vũ khí bạn có thể sử dụng để thuyết phục khách hàng của mình là không từ chối. Nếu bạn có thể xây dựng lại mật khẩu người dùng thông qua bất kỳ cơ chế nào, bạn đã cung cấp cho khách hàng của họ một cơ chế không thoái thác hợp pháp và họ có thể từ chối bất kỳ giao dịch nào phụ thuộc vào mật khẩu đó, bởi vì không có cách nào nhà cung cấp có thể chứng minh rằng họ không tái tạo mật khẩu và đặt giao dịch thông qua chính họ. Nếu mật khẩu được lưu trữ chính xác dưới dạng các bản tóm tắt thay vì bản mã, thì điều này là không thể, do đó, khách hàng cuối sẽ tự thực hiện giao dịch hoặc vi phạm nghĩa vụ chăm sóc của mình để lấy mật khẩu. Trong cả hai trường hợp đó để lại trách nhiệm thẳng thắn với anh ta. Tôi đã làm việc trong những trường hợp có thể lên tới hàng trăm triệu đô la. Không phải cái gì bạn muốn nhận sai.


2
Nhật ký máy chủ web không được tính vào một tòa án? Hoặc trong trường hợp này họ cũng sẽ được coi là giả mạo?
Vinko Vrsalovic

10
@Vinko Vrsalovic, Nhật ký máy chủ web NÊN đếm số NÊN tại tòa án, để làm như vậy, bạn cần chứng minh không thoái thác, bằng chứng xác thực, chuỗi bằng chứng, v.v ... mà nhật ký máy chủ web rõ ràng là không.
AviD

7
Chính xác. Nhà cung cấp phải chứng minh rằng chỉ khách hàng mới có thể thực hiện giao dịch đó. Nhật ký máy chủ web không làm điều đó.
Hầu tước Lorne

Không phải tất cả mật khẩu thực sự cần thiết cho "giao dịch", có thể nói như vậy. Nói rằng trang web là để phát triển một danh sách đánh dấu trang web. Trong trường hợp này, giới hạn trách nhiệm pháp lý (thường được gọi ra trong T & C khi đăng ký vào trang web) là bằng 0, vì không có giao dịch tài chính. Nếu trang web không có hành động nào ảnh hưởng đến người khác thì nhiều nhất, dữ liệu sẽ bị mất cho người dùng bị hack. Công ty được bảo vệ bởi T & C.
Sablefoste

1
@Sablefoste Trên trang web đó. Nếu người dùng sử dụng cùng một mật khẩu ở nơi khác, bạn sẽ có nguy cơ rò rỉ thông tin cá nhân của mình. Nếu bạn không bao giờ tham gia thực hành, bạn không thể gây ra vấn đề.
Hầu tước Lorne

94

Về mặt đạo đức, bạn không thể lưu trữ mật khẩu để truy xuất văn bản gốc. Nó đơn giản như vậy. Ngay cả Jon Skeet cũng không thể lưu trữ mật khẩu về mặt đạo đức để phục hồi sau này. Nếu người dùng của bạn có thể truy xuất mật khẩu bằng văn bản đơn giản bằng cách này hay cách khác, thì có khả năng là một hacker cũng có thể tìm thấy lỗ hổng bảo mật trong mã của bạn. Và đó không chỉ là mật khẩu của một người dùng bị xâm phạm, mà là tất cả chúng.

Nếu khách hàng của bạn gặp vấn đề với điều đó, hãy nói với họ rằng lưu trữ mật khẩu có thể phục hồi là vi phạm pháp luật. Ở Anh, với bất kỳ giá nào, Đạo luật Bảo vệ Dữ liệu 1998 (đặc biệt là Mục 1, Phần II, Đoạn 9) yêu cầu các bộ điều khiển dữ liệu sử dụng các biện pháp kỹ thuật phù hợp để giữ an toàn cho dữ liệu cá nhân, trong số những điều khác, tác hại có thể gây ra nếu dữ liệu bị xâm phạm - có thể đáng kể đối với người dùng chia sẻ mật khẩu giữa các trang web. Nếu họ vẫn gặp khó khăn trong việc tìm hiểu thực tế rằng đó là một vấn đề, hãy chỉ cho họ một số ví dụ trong thế giới thực, chẳng hạn như ví dụ này .

Cách đơn giản nhất để cho phép người dùng khôi phục thông tin đăng nhập là gửi email cho họ một liên kết một lần tự động đăng nhập chúng và đưa họ thẳng đến một trang nơi họ có thể chọn mật khẩu mới. Tạo một nguyên mẫu và hiển thị nó trong hành động với họ.

Dưới đây là một vài bài viết trên blog tôi đã viết về chủ đề này:

Cập nhật: chúng tôi hiện đang bắt đầu thấy các vụ kiện và truy tố đối với các công ty không bảo mật mật khẩu của người dùng của họ đúng cách. Ví dụ: LinkedIn tát với vụ kiện hành động hạng 5 triệu đô la ; Sony đã phạt 250.000 bảng vì hack dữ liệu PlayStation . Nếu tôi nhớ lại một cách chính xác, LinkedIn thực sự đã mã hóa mật khẩu của người dùng, nhưng mã hóa mà nó đang sử dụng quá yếu để không hiệu quả.


8
@jimmycakes - Đây là một điều tốt để làm trên một hệ thống bảo mật thấp, nhưng nếu bạn đang lưu trữ bất kỳ dữ liệu nào có giá trị cao thì bạn phải cho rằng email của người đó đã bị xâm phạm và việc gửi cho họ liên kết đăng nhập trực tiếp làm tổn hại hệ thống của bạn. +1 để trả lời câu hỏi của tôi bằng một phương án khả thi, nhưng chỉ ra một lỗ hổng trong logic nói chung. Tôi không muốn Payppal gửi liên kết đăng nhập trực tiếp EVER. Nghe có vẻ hoang tưởng nhưng tôi luôn cho rằng tài khoản email của mình bị hỏng - nó giữ cho tôi trung thực. ;)
Shane

Hoàn toàn - Tôi mong muốn ngân hàng của mình ít nhất sẽ gọi cho tôi và xác minh danh tính của tôi trước khi cho phép tôi đặt lại ( không khôi phục) mật khẩu của mình. Những gì tôi đã phác thảo ở đây là tiêu chuẩn bảo mật mật khẩu tối thiểu tuyệt đối mà tôi mong đợi từ bất kỳ trang web nào, bất cứ nơi nào.
jammycakes

1
Bỏ qua ngân hàng hoặc paypal, người sẽ không có hạn chế nào bạn đặt ra; Nếu bạn cho rằng email của họ bị xâm phạm, làm thế nào có thể có phương pháp trực tuyến? Nếu bạn gửi email một mật khẩu được tạo, làm thế nào an toàn hơn?
Peter Coulton

Tôi không nói về việc lấy mật khẩu của một cá nhân, tôi đang nói về việc lấy nhiều mật khẩu từ cơ sở dữ liệu. Nếu một hệ thống lưu trữ mật khẩu có thể phục hồi thành văn bản thuần túy, tin tặc có khả năng viết một tập lệnh để trích xuất tất cả mật khẩu từ cơ sở dữ liệu của bạn.
jammycakes

Tôi đang tự hỏi về việc gửi liên kết / mật khẩu trong email, đi qua mạng ở dạng đơn giản thông qua các nút mạng không xác định ...
Jakub

55

Sau khi đọc phần này:

Trong một lưu ý dưới đây, tôi đã đưa ra quan điểm rằng các trang web chủ yếu hướng đến người già, bị thách thức về tinh thần hoặc rất trẻ có thể trở nên khó hiểu đối với mọi người khi họ được yêu cầu thực hiện thói quen khôi phục mật khẩu an toàn. Mặc dù chúng tôi có thể thấy nó đơn giản và trần tục trong những trường hợp đó, một số người dùng cần sự hỗ trợ thêm của việc có một công nghệ dịch vụ giúp họ vào hệ thống hoặc gửi email / hiển thị trực tiếp cho họ.

Trong các hệ thống như vậy, tỷ lệ tiêu hao từ các nhân khẩu học này có thể làm hỏng ứng dụng nếu người dùng không được cung cấp mức hỗ trợ truy cập này, vì vậy hãy trả lời với thiết lập như vậy trong tâm trí.

Tôi sẽ tự hỏi nếu bất kỳ yêu cầu nào trong số này yêu cầu một hệ thống mật khẩu có thể truy xuất được. Ví dụ: Dì Mabel gọi điện và nói rằng "Chương trình internet của bạn không hoạt động, tôi không biết mật khẩu của mình". "OK" nói rằng dịch vụ khách hàng không người lái "hãy để tôi kiểm tra một vài chi tiết và sau đó tôi sẽ cung cấp cho bạn mật khẩu mới . Khi bạn đăng nhập lần sau, nó sẽ hỏi bạn nếu bạn muốn giữ mật khẩu đó hoặc thay đổi nó thành một cái gì đó bạn có thể nhớ dễ dàng hơn."

Sau đó, hệ thống được thiết lập để biết khi nào việc đặt lại mật khẩu đã xảy ra và hiển thị thông báo "bạn muốn giữ mật khẩu mới hay chọn mật khẩu mới".

Làm thế nào điều này tồi tệ hơn cho những người ít biết chữ hơn là được nói với mật khẩu cũ của họ? Và trong khi nhân viên dịch vụ khách hàng có thể gặp rắc rối, thì cơ sở dữ liệu sẽ an toàn hơn nhiều trong trường hợp nó bị vi phạm.

Nhận xét những gì xấu về đề xuất của tôi và tôi sẽ đề xuất một giải pháp thực sự làm những gì bạn muốn ban đầu.


4
@john - Tôi nghĩ đó là một giải pháp hoàn toàn khả thi. Chuẩn bị để có được ngọn lửa trên các mối đe dọa nội bộ mặc dù! Bạn biết đấy, nếu tôi thực hiện việc này với thiết lập lại mật khẩu trung gian (tech đặt mật khẩu theo cách thủ công là tạm thời và bảo Mabel nhập 1234 làm mật khẩu của cô ấy) thì có lẽ nó sẽ hoạt động tốt trên một hệ thống không chứa dữ liệu quan trọng. Nếu đó là một môi trường bảo mật cao mặc dù sau đó chúng tôi gặp sự cố khi dịch vụ lưu ký có thể đặt mật khẩu của CEO thành 1234 và đăng nhập trực tiếp. Không có giải pháp hoàn hảo nhưng cái này hoạt động trong rất nhiều trường hợp. (+1)
Shane

5
Tôi chỉ nhận thấy câu trả lời này. @Shane, tôi không hiểu tại sao bạn dự đoán rực lửa vì "mối đe dọa nội bộ". Khả năng thay đổi mật khẩu không phải là điểm yếu đáng chú ý; vấn đề là khả năng khám phá một mật khẩu có khả năng được sử dụng cho các dịch vụ khác - e-mail, ngân hàng của cô, các trang web mua sắm trực tuyến có lưu trữ thông tin CC của cô. Điểm yếu đó không được biểu hiện ở đây; nếu Bob đặt lại mật khẩu của Mabel và nói với cô ấy qua điện thoại, điều đó không cho phép anh ta truy cập vào bất kỳ tài khoản nào khác của cô. Tuy nhiên, tôi sẽ buộc phải "đề nghị" thiết lập lại mật khẩu khi đăng nhập.
Aaronaught

@Aaronaught - Tôi thấy quan điểm của bạn, nhưng những gì tôi nghĩ đến là những lúc mà ngay cả những người làm dịch vụ khách hàng cũng bị khóa trong một số khu vực nhất định của hệ thống (như bảng lương, kế toán, v.v.) và cho phép họ trực tiếp đặt mật khẩu một vấn đề bảo mật trong và của chính nó. Tôi thấy quan điểm của bạn mặc dù loại hệ thống tôi đã hỏi câu hỏi này khác với phần lớn hệ thống kế toán nội bộ. Chúng tôi có thể có một cuộc thảo luận hoàn toàn khác về hệ thống nội bộ độc quyền và bảo mật mật khẩu trong đó.
Shane

1
@Shane: Sau đó, câu hỏi thậm chí còn ít ý nghĩa hơn. Tôi giả sử rằng bạn muốn ai đó đọc mật khẩu cho họ qua điện thoại. Nếu bạn muốn gửi email cho người dùng mật khẩu của họ thông qua một số hệ thống tự phục vụ tự động thì bạn cũng có thể phân phối hoàn toàn với mật khẩu vì nó được "bảo vệ" với thứ gì đó yếu hơn nhiều. Có lẽ bạn cần phải cụ thể hơn rất nhiều về chính xác loại kịch bản khả dụng nào bạn đang cố gắng hỗ trợ. Có thể phân tích đó sau đó sẽ cho bạn thấy rằng mật khẩu có thể phục hồi thậm chí không cần thiết.
Aaronaught

4
Mã được cung cấp bởi người hỗ trợ không nhất thiết phải là mật khẩu mới. Nó chỉ có thể là mã một lần để mở khóa chức năng đặt lại mật khẩu.
kgilpin

42

Michael Brooks đã nói khá nhiều về CWE-257 - thực tế là dù bạn sử dụng phương pháp nào, bạn (quản trị viên) vẫn có thể khôi phục mật khẩu. Vậy làm thế nào về các tùy chọn này:

  1. Mã hóa mật khẩu với một ai đó khác khóa công khai - một số cơ quan bên ngoài. Bằng cách đó, bạn không thể tái cấu trúc nó một cách cá nhân và người dùng sẽ phải đến cơ quan bên ngoài đó và yêu cầu khôi phục mật khẩu của họ.
  2. Mã hóa mật khẩu bằng khóa được tạo từ cụm mật khẩu thứ hai. Thực hiện mã hóa phía máy khách này và không bao giờ truyền nó rõ ràng đến máy chủ. Sau đó, để khôi phục, hãy thực hiện lại phía máy khách giải mã bằng cách tạo lại khóa từ đầu vào của chúng. Phải thừa nhận rằng, cách tiếp cận này về cơ bản là sử dụng mật khẩu thứ hai, nhưng bạn luôn có thể yêu cầu họ ghi lại hoặc sử dụng cách tiếp cận câu hỏi bảo mật cũ.

Tôi nghĩ 1. là lựa chọn tốt hơn, vì nó cho phép bạn chỉ định ai đó trong công ty của khách hàng giữ khóa riêng. Hãy chắc chắn rằng họ tự tạo khóa và lưu trữ nó theo hướng dẫn an toàn, v.v. Bạn thậm chí có thể thêm bảo mật bằng cách chọn chỉ mã hóa và cung cấp một số ký tự từ mật khẩu cho bên thứ ba nội bộ để họ phải bẻ khóa mật khẩu để đoán nó Cung cấp các ký tự này cho người dùng, họ có thể sẽ nhớ nó là gì!


8
Và, tất nhiên, bạn có thể sử dụng bất kỳ kỹ thuật phân tách bí mật nào để yêu cầu nhiều người từ công ty của bạn giải mã. Nhưng không ai trong số đó đáp ứng các yêu cầu ban đầu là có thể gửi thư cho người dùng mật khẩu của họ hoặc có một số người hỗ trợ điện thoại cấp một hết hạn sử dụng để họ đăng nhập.
Christopher Creutzig

27

Đã có rất nhiều cuộc thảo luận về mối quan tâm bảo mật cho người dùng khi trả lời câu hỏi này, nhưng tôi muốn thêm một đề cập đến lợi ích. Cho đến nay, tôi chưa thấy một lợi ích hợp pháp nào được đề cập khi có mật khẩu có thể phục hồi được lưu trữ trên hệ thống. Xem xét điều này:

  • Người dùng có được lợi từ việc gửi mật khẩu qua email cho họ không? Không. Họ nhận được nhiều lợi ích hơn từ liên kết đặt lại mật khẩu sử dụng một lần, điều này hy vọng sẽ cho phép họ chọn mật khẩu mà họ sẽ nhớ.
  • Người dùng có được hưởng lợi từ việc mật khẩu của họ được hiển thị trên màn hình không? Không, vì lý do tương tự như trên; họ nên chọn một mật khẩu mới.
  • Người dùng có được lợi từ việc người hỗ trợ nói mật khẩu cho người dùng không? Không; một lần nữa, nếu người hỗ trợ coi yêu cầu của người dùng về mật khẩu của họ là được xác thực chính xác, thì lợi ích của người dùng sẽ được cung cấp một mật khẩu mới và cơ hội để thay đổi mật khẩu. Ngoài ra, hỗ trợ qua điện thoại tốn kém hơn so với đặt lại mật khẩu tự động, vì vậy công ty cũng không được hưởng lợi.

Có vẻ như những người duy nhất có thể hưởng lợi từ mật khẩu có thể phục hồi là những người có mục đích xấu hoặc những người ủng hộ API kém yêu cầu trao đổi mật khẩu của bên thứ ba (vui lòng không sử dụng API đã nói bao giờ!). Có lẽ bạn có thể thắng được cuộc tranh luận của mình bằng cách tuyên bố trung thực với khách hàng của mình rằng công ty không thu được lợi ích và chỉ có trách nhiệm bằng cách lưu trữ mật khẩu có thể phục hồi .

Đọc giữa các dòng yêu cầu này, bạn sẽ thấy rằng khách hàng của bạn có thể không hiểu hoặc thậm chí không quan tâm đến cách quản lý mật khẩu. Những gì họ thực sự muốn là một hệ thống xác thực không quá khó cho người dùng của họ. Vì vậy, ngoài việc cho họ biết họ thực sự muốn mật khẩu có thể phục hồi như thế nào, bạn nên cung cấp cho họ các cách để làm cho quá trình xác thực bớt đau đớn, đặc biệt là nếu bạn không cần mức độ bảo mật cao của ngân hàng:

  • Cho phép người dùng sử dụng địa chỉ email của họ cho tên người dùng của họ. Tôi đã thấy vô số trường hợp người dùng quên tên người dùng của họ, nhưng ít người quên địa chỉ email của họ.
  • Cung cấp OpenID và để bên thứ ba thanh toán chi phí cho sự lãng quên của người dùng.
  • Dễ dàng tắt các hạn chế mật khẩu. Tôi chắc chắn rằng tất cả chúng tôi đã vô cùng khó chịu khi một số trang web không cho phép mật khẩu ưa thích của bạn vì các yêu cầu vô dụng như "bạn không thể sử dụng các ký tự đặc biệt" hoặc "mật khẩu của bạn quá dài" hoặc "mật khẩu của bạn phải bắt đầu với một lá thư. " Ngoài ra, nếu tính dễ sử dụng là mối quan tâm lớn hơn độ mạnh của mật khẩu, bạn có thể nới lỏng ngay cả các yêu cầu không ngu ngốc bằng cách cho phép mật khẩu ngắn hơn hoặc không yêu cầu kết hợp các lớp ký tự. Với các hạn chế được nới lỏng, người dùng sẽ có nhiều khả năng sử dụng mật khẩu mà họ sẽ không quên.
  • Đừng hết hạn mật khẩu.
  • Cho phép người dùng sử dụng lại mật khẩu cũ.
  • Cho phép người dùng chọn câu hỏi đặt lại mật khẩu của riêng họ.

Nhưng nếu bạn, vì một số lý do (và xin vui lòng cho chúng tôi biết lý do) thực sự, thực sự, thực sự cần phải có mật khẩu có thể phục hồi, bạn có thể bảo vệ người dùng khỏi khả năng xâm phạm tài khoản trực tuyến khác của họ bằng cách cung cấp cho họ mật khẩu không- hệ thống xác thực dựa trên. Bởi vì mọi người đã quen thuộc với hệ thống tên người dùng / mật khẩu và chúng là một giải pháp được sử dụng tốt, đây sẽ là giải pháp cuối cùng, nhưng chắc chắn có rất nhiều lựa chọn thay thế sáng tạo cho mật khẩu:

  • Để người dùng chọn mã số, tốt nhất không phải là 4 chữ số và tốt nhất là chỉ khi các nỗ lực vũ phu được bảo vệ chống lại.
  • Yêu cầu người dùng chọn một câu hỏi với một câu trả lời ngắn gọn mà chỉ họ biết câu trả lời, sẽ không bao giờ thay đổi, họ sẽ luôn nhớ và họ không bận tâm đến việc người khác tìm hiểu.
  • Yêu cầu người dùng nhập tên người dùng và sau đó vẽ một hình dạng dễ nhớ với các hoán vị đủ để bảo vệ chống đoán (xem ảnh tiện lợi này về cách G1 thực hiện việc này để mở khóa điện thoại).
  • Đối với trang web của trẻ em, bạn có thể tự động tạo một sinh vật mờ dựa trên tên người dùng (giống như một định danh) và yêu cầu người dùng đặt cho sinh vật một tên bí mật. Sau đó, họ có thể được nhắc nhập tên bí mật của sinh vật để đăng nhập.

Tôi đã trả lời các ý kiến ​​ở đây, trong phần trả lời của tôi, vì nó khá dài - tôi nghĩ điều quan trọng là phải xem xét phân tích và thảo luận về các vấn đề được nêu ra. stackoverflow.com/questions/2283937/ cường
AviD

Người dùng có được hưởng lợi từ việc mật khẩu của họ được hiển thị trên màn hình không? Theo tôi - chắc chắn là có! Mỗi lần tôi nhận được mật khẩu khó hiểu từ internet, tôi cảm ơn Apple tôi có thể hiển thị nó để tôi không phải gõ lại 100 lần trong đau đớn. Tôi có thể tưởng tượng người vô hiệu sẽ cảm thấy như thế nào.
Dmitri Zaitsev

1
Tại sao hiển thị một mật khẩu tối nghĩa tốt hơn là cho phép bạn chọn một mật khẩu mới mà bạn có thể nhớ?
Jacob

@Jacob: entropy nhiều hơn?
Alexander Shcheblikin

25

Căn cứ vào nhận xét tôi đưa ra cho câu hỏi:
Một điểm quan trọng đã được hầu hết mọi người chú ý đến ... Phản ứng ban đầu của tôi rất giống với @Michael Brooks, cho đến khi tôi nhận ra, như @stefanw, rằng vấn đề ở đây là những yêu cầu bị phá vỡ , nhưng đây là những gì họ đang có.
Nhưng sau đó, nó đã xảy ra với tôi rằng đó thậm chí có thể không phải là trường hợp! Điểm còn thiếu ở đây, là giá trị bất thành văn của tài sản của ứng dụng. Nói một cách đơn giản, đối với một hệ thống giá trị thấp, một cơ chế xác thực hoàn toàn an toàn, với tất cả các quy trình liên quan, sẽ là quá mức cần thiết và lựa chọn bảo mật sai .
Rõ ràng, đối với một ngân hàng, "các thực tiễn tốt nhất" là điều bắt buộc và không có cách nào để vi phạm đạo đức CWE-257. Nhưng thật dễ dàng để nghĩ về các hệ thống giá trị thấp, nơi nó không đáng giá (nhưng vẫn cần một mật khẩu đơn giản).

Điều quan trọng cần nhớ là, chuyên môn bảo mật thực sự là trong việc tìm kiếm sự đánh đổi phù hợp, KHÔNG phải trong việc đưa ra những "Thực tiễn tốt nhất" một cách giáo điều mà bất cứ ai cũng có thể đọc trực tuyến.

Do đó, tôi đề xuất một giải pháp khác:
Tùy thuộc vào giá trị của hệ thống và CHỈ NẾU hệ thống có giá trị thấp một cách thích hợp mà không có tài sản "đắt tiền" (bao gồm chính danh tính), có các yêu cầu kinh doanh hợp lệ tạo ra quy trình phù hợp không thể (hoặc đủ khó / tốn kém), khách hàng nhận thức được tất cả các cảnh báo ...
Sau đó, có thể chỉ cần cho phép mã hóa đảo ngược, không có vòng quay đặc biệt nào có thể nhảy qua.
Tôi chỉ dừng lại ở việc nói rằng đừng bận tâm đến việc mã hóa, bởi vì nó rất đơn giản / rẻ tiền để thực hiện (thậm chí xem xét việc quản lý khóa thụ động) và nó KHÔNG cung cấp bảo vệ MỘT SỐ (hơn chi phí thực hiện). Ngoài ra, giá trị của nó là xem cách cung cấp cho người dùng mật khẩu gốc, cho dù qua email, hiển thị trên màn hình, v.v.
Vì giả định ở đây là giá trị của mật khẩu bị đánh cắp (ngay cả trong tổng hợp) là khá thấp, bất kỳ giải pháp nào trong số này đều có thể hợp lệ.


Vì có một cuộc thảo luận sôi nổi đang diễn ra, thực sự là các cuộc thảo luận sôi nổi, trong các bài đăng khác nhau và các luồng nhận xét riêng biệt, tôi sẽ thêm một số giải thích và trả lời một số điểm rất hay đã được nêu ra ở đây.

Để bắt đầu, tôi nghĩ mọi người ở đây rõ ràng cho phép lấy lại mật khẩu ban đầu của người dùng, đó là Thực tiễn xấu và nói chung Không phải là Ý tưởng hay. Điều đó hoàn toàn không phải là tranh chấp ...
Hơn nữa, tôi sẽ nhấn mạnh rằng trong nhiều tình huống, MOST này - nó thực sự sai, thậm chí hôi, khó chịu, và xấu xí .

Tuy nhiên, mấu chốt của câu hỏi xoay quanh nguyên tắc , IS có bất kỳ tình huống nào có thể không cần thiết để cấm điều này và nếu vậy, làm thế nào để làm điều đó theo cách đúng nhất phù hợp với tình huống .

Bây giờ, như @Thomas, @sfussalanger và một vài người khác đã đề cập, cách duy nhất để trả lời câu hỏi đó là phân tích rủi ro kỹ lưỡng về bất kỳ tình huống nào (hoặc giả định), để hiểu những gì đang bị đe dọa và những gì giảm nhẹ khác đang diễn ra để đủ khả năng bảo vệ.
Không, nó KHÔNG phải là một từ thông dụng, đây là một trong những công cụ cơ bản, quan trọng nhất đối với một chuyên gia bảo mật thực tế. Thực tiễn tốt nhất là tốt đến một điểm (thường là hướng dẫn cho người thiếu kinh nghiệm và hack), sau thời điểm đó phân tích rủi ro chu đáo.

Vâng, thật buồn cười - Tôi luôn coi mình là một trong những kẻ cuồng tín bảo mật, và bằng cách nào đó tôi ở phía đối diện với cái gọi là "Chuyên gia bảo mật" ... Chà, sự thật là - bởi vì tôi là một kẻ cuồng tín, và một chuyên gia bảo mật thực tế trong cuộc sống thực - Tôi không tin vào việc thúc đẩy giáo điều "Thực tiễn tốt nhất" (hoặc CWEs) mà KHÔNG phân tích rủi ro hết sức quan trọng .
"Hãy coi chừng người nhiệt tình bảo mật, người nhanh chóng áp dụng mọi thứ trong vành đai công cụ của họ mà không biết vấn đề thực sự họ đang bảo vệ là gì. Bảo mật hơn không nhất thiết phải tương đương với bảo mật tốt."
Phân tích rủi ro và những kẻ cuồng tín bảo mật thực sự sẽ chỉ ra một sự đánh đổi thông minh hơn, dựa trên giá trị / rủi ro, dựa trên rủi ro, tổn thất tiềm tàng, các mối đe dọa có thể, giảm thiểu bổ sung, v.v. Bất kỳ "Chuyên gia bảo mật" nào cũng không thể chỉ ra phân tích rủi ro như dựa trên các khuyến nghị của họ, hoặc hỗ trợ sự đánh đổi hợp lý, nhưng thay vào đó, họ thích thúc đẩy giáo điều và CWE mà không hiểu cách thực hiện phân tích rủi ro, nhưng không phải là Hacks, và Expertise của họ không xứng đáng với giấy vệ sinh mà họ đã in.

Thật vậy, đó là cách chúng tôi có được sự lố bịch đó là An ninh sân bay.

Nhưng trước khi chúng ta nói về sự đánh đổi thích hợp để thực hiện trong TÌNH HÌNH NÀY, chúng ta hãy xem xét các rủi ro rõ ràng (rõ ràng, bởi vì chúng ta không có tất cả thông tin cơ bản về tình huống này, tất cả chúng ta đều đưa ra giả thuyết - vì câu hỏi là giả thuyết nào tình hình có thể có ...)
Chúng ta hãy giả sử một hệ thống GIÁ TRỊ THẤP, nhưng không quá tầm thường đến mức truy cập công khai - chủ sở hữu hệ thống muốn ngăn chặn mạo danh thông thường, nhưng bảo mật "cao" không phải là điều tối quan trọng khi sử dụng. (Vâng, đó là một sự đánh đổi hợp pháp để CHẤP NHẬN rủi ro rằng bất kỳ người viết kịch bản thành thạo nào cũng có thể hack trang web ... Đợi đã, bây giờ không phải là APT thịnh hành ...?)
Ví dụ, giả sử tôi đang sắp xếp một trang web đơn giản cho một cuộc họp mặt gia đình lớn, cho phép mọi người động não về nơi chúng ta muốn đi trong chuyến cắm trại năm nay. Tôi ít lo lắng hơn về một số tin tặc ẩn danh, hoặc thậm chí là anh em họ Fred đang cố gắng lặp lại đề nghị quay trở lại hồ Wantanamanabikiliki, vì tôi nói về dì Erma không thể đăng nhập khi cô ấy cần. Bây giờ, dì Erma, là một nhà vật lý hạt nhân, không giỏi nhớ mật khẩu, hay thậm chí là sử dụng máy tính ... Vì vậy, tôi muốn loại bỏ mọi ma sát có thể cho cô ấy. Một lần nữa, tôi KHÔNG lo lắng về việc hack, tôi chỉ không muốn những sai lầm ngớ ngẩn khi đăng nhập sai - tôi muốn biết ai sẽ đến và họ muốn gì.

Dù sao.
Vì vậy, những rủi ro chính của chúng ta ở đây là gì, nếu chúng ta mã hóa đối xứng mật khẩu, thay vì sử dụng hàm băm một chiều?

  • Mạo danh người dùng? Không, tôi đã chấp nhận rủi ro đó, không thú vị.
  • Quản trị viên ác? Vâng, có lẽ ... Nhưng một lần nữa, tôi không quan tâm nếu ai đó có thể mạo danh người dùng khác, NỘI hay không ... và dù sao một quản trị viên độc hại là sẽ có được mật khẩu của bạn không có vấn đề gì - nếu xấu ra đi của admin của bạn, trò chơi của mình trên anyway.
  • Một vấn đề khác được nêu ra, đó là danh tính thực sự được chia sẻ giữa một số hệ thống. Ah! Đây là một rủi ro rất thú vị, đòi hỏi phải xem xét kỹ hơn.
    Hãy để tôi bắt đầu bằng cách khẳng định rằng đó không phải là danh tính thực sự được chia sẻ, mà là bằng chứng hoặc thông tin xác thực. Được rồi, vì mật khẩu được chia sẻ sẽ cho phép tôi truy cập vào một hệ thống khác một cách hiệu quả (giả sử, tài khoản ngân hàng của tôi hoặc gmail), đây thực sự là cùng một danh tính, vì vậy nó chỉ là ngữ nghĩa ... Ngoại trừ việc đó không phải là . Danh tính được quản lý riêng biệt bởi mỗi hệ thống, trong trường hợp này (mặc dù có thể có các hệ thống id bên thứ ba, chẳng hạn như OAuth - vẫn, tách biệt với danh tính trong hệ thống này - nhiều hơn về điều này sau).
    Như vậy, điểm rủi ro cốt lõi ở đây là người dùng sẽ sẵn sàng nhập mật khẩu (giống) của mình vào một số hệ thống khác nhau - và bây giờ, tôi (quản trị viên) hoặc bất kỳ tin tặc nào khác trên trang web của tôi sẽ có quyền truy cập vào mật khẩu của dì Erma cho trang web tên lửa hạt nhân.

Hừm.

Có bất cứ điều gì ở đây dường như tắt cho bạn?

Nó nên.

Hãy bắt đầu với thực tế là bảo vệ hệ thống tên lửa hạt nhân không phảitrách nhiệm của tôi , tôi chỉ xây dựng một địa điểm đi chơi gia đình frakkin (cho gia đình MY). Vậy trách nhiệm thuộc về ai? Umm ... Thế còn hệ thống tên lửa hạt nhân? Tât nhiên.
Thứ hai, nếu tôi muốn đánh cắp mật khẩu của ai đó (một người được biết là liên tục sử dụng cùng một mật khẩu giữa các trang web bảo mật và không an toàn) - tại sao tôi lại bận tâm hack trang web của bạn? Hoặc đấu tranh với mã hóa đối xứng của bạn? Goshdarnitall, tôi chỉ có thể đưa lên trang web đơn giản của riêng mình , để người dùng đăng ký để nhận được RẤT NHIỀU TIN TỨC QUAN TRỌNG về bất cứ điều gì họ muốn ... Puffo Presto, tôi "đánh cắp" mật khẩu của họ.

Vâng, giáo dục người dùng luôn quay trở lại để cắn chúng tôi trong hienie, phải không?
Và bạn không thể làm gì về điều đó ... Ngay cả khi bạn phải băm mật khẩu của họ trên trang web của mình và làm mọi thứ khác mà TSA có thể nghĩ ra, bạn đã thêm bảo vệ vào mật khẩu của họ KHÔNG MỘT CÁI GÌ , nếu họ sẽ giữ bừa bãi dán mật khẩu của họ vào mọi trang web mà họ va vào. Đừng bận tâm cố gắng.

Nói cách khác, Bạn không sở hữu mật khẩu của họ , vì vậy hãy ngừng cố gắng hành động như bạn.

Vì vậy, các chuyên gia bảo mật thân mến của tôi, như một bà già thường hỏi Wendy, "Rủi ro ở đâu?"

Một vài điểm khác, để trả lời cho một số vấn đề nêu trên:

  • CWE không phải là luật, hoặc quy định, hoặc thậm chí là một tiêu chuẩn. Nó là một tập hợp các điểm yếu phổ biến , tức là nghịch đảo của "Thực tiễn tốt nhất".
  • Vấn đề về danh tính được chia sẻ là một vấn đề thực tế, nhưng bị hiểu lầm (hoặc hiểu sai) bởi những người không tán thành ở đây. Đây là vấn đề chia sẻ danh tính trong chính nó (!), KHÔNG phải về việc bẻ khóa mật khẩu trên các hệ thống giá trị thấp. Nếu bạn đang chia sẻ mật khẩu giữa hệ thống giá trị thấp và hệ thống giá trị cao, vấn đề đã có sẵn!
  • Bởi, điểm trước đó thực sự sẽ chỉ ra LẠI bằng cách sử dụng OAuth và tương tự cho cả hai hệ thống giá trị thấp này và hệ thống ngân hàng giá trị cao.
  • Tôi biết đó chỉ là một ví dụ, nhưng (đáng buồn thay) các hệ thống FBI không thực sự được bảo mật nhất xung quanh. Không hoàn toàn giống như máy chủ blog của con mèo của bạn, nhưng chúng cũng không vượt qua một số ngân hàng an toàn hơn.
  • Kiến thức phân chia, hoặc kiểm soát kép, các khóa mã hóa KHÔNG xảy ra chỉ trong quân đội, trên thực tế, PCI-DSS hiện nay yêu cầu điều này từ tất cả các thương nhân, vì vậy nó không thực sự tồn tại ở đó nữa (NẾU giá trị biện minh cho nó).
  • Đối với tất cả những người đang phàn nàn rằng những câu hỏi như thế này là những gì làm cho nghề phát triển trông rất tệ: đó là những câu trả lời giống như vậy, làm cho nghề bảo mật trông thậm chí còn tồi tệ hơn. Một lần nữa, phân tích rủi ro tập trung vào kinh doanh là những gì được yêu cầu, nếu không, bạn làm cho mình trở nên vô dụng. Ngoài việc bị sai.
  • Tôi đoán đây là lý do tại sao không nên lấy một nhà phát triển thông thường và bỏ thêm trách nhiệm bảo mật cho anh ta, mà không cần đào tạo để suy nghĩ khác biệt và tìm kiếm sự đánh đổi chính xác. Không có ý xúc phạm, đối với những người ở đây, tôi là tất cả - nhưng đào tạo nhiều hơn theo thứ tự.

Phù Thật là một bài viết dài ...
Nhưng để trả lời câu hỏi ban đầu của bạn, @Shane:

  • Giải thích cho khách hàng cách thích hợp để làm việc.
  • Nếu anh ấy vẫn khăng khăng, giải thích thêm, nhấn mạnh, tranh luận. Ném một cơn giận dữ, nếu cần thiết.
  • Giải thích RỦI RO KINH DOANH cho anh ta. Chi tiết là tốt, số liệu là tốt hơn, một bản demo trực tiếp thường là tốt nhất.
  • NẾU BẠN VẪN khẳng định, VÀ trình bày lý do kinh doanh hợp lệ - đã đến lúc bạn thực hiện một cuộc gọi phán xét:
    Trang web này có giá trị thấp không? Có thực sự là một trường hợp kinh doanh hợp lệ? Nó có đủ tốt cho bạn không? Không có rủi ro nào khác mà bạn có thể xem xét, điều đó sẽ vượt xa lý do kinh doanh hợp lệ? (Và tất nhiên, khách hàng KHÔNG phải là trang web độc hại, nhưng đó là duh).
    Nếu vậy, chỉ cần đi thẳng về phía trước. Không đáng để bỏ công sức, ma sát và mất sử dụng (trong tình huống giả định này) để đưa quy trình cần thiết vào vị trí. Bất kỳ quyết định nào khác (một lần nữa, trong tình huống này) là một sự đánh đổi tồi tệ.

Vì vậy, điểm mấu chốt và câu trả lời thực tế - mã hóa nó bằng thuật toán đối xứng đơn giản, bảo vệ khóa mã hóa bằng ACL mạnh và tốt nhất là DPAPI hoặc tương tự, ghi lại và yêu cầu khách hàng (một người đủ cao cấp đưa ra quyết định đó) nó


5
Mật khẩu được chia sẻ giữa trang web giá trị thấp của bạn với tài sản đắt tiền "không" và Facebook / GMail / ngân hàng của bạn một tài sản đắt tiền, ngay cả trên các trang web có giá trị thấp.
jammycakes

3
Tôi nghĩ vấn đề ở đây là các nhóm người dùng được đề cập ở trên có xu hướng sử dụng cùng một mật khẩu cho tất cả các ứng dụng từ nhiều cấp độ bảo mật khác nhau (từ ngân hàng đến blog công thức). Vì vậy, câu hỏi là, nếu đó là trách nhiệm của nhà phát triển để bảo vệ người dùng ngay cả từ chính họ. Tôi chắc chắn sẽ nói, vâng!
ercan

7
Tôi xin lỗi, nhưng bản thân danh tính một tài sản có giá trị cao, thời gian. Không có ngoại lệ, không có lý do. Cho dù trang web của bạn nhỏ và không quan trọng đến mức nào. Và mật khẩu được chia sẻ danh tính nếu nó cho phép tin tặc xâm nhập vào tài khoản Facebook, tài khoản Gmail, tài khoản ngân hàng của người dùng, v.v. Không liên quan gì đến ngữ nghĩa, nhưng đó là tất cả những gì phải làm với hậu quả. Chỉ cần hỏi bất kỳ ai bị ảnh hưởng bởi một cuộc tấn công của hacker như thế này: theregister.co.uk/2009/08/24/4chan_pwns_christians
jammycakes 23/210

2
@Jacob, khách hàng của bạn sẽ bị kiện ở thế giới nào vì tài khoản của Erma trên các hệ thống khác đã bị xâm phạm? Ngay cả khi có sự sơ suất thô thiển về phía khách hàng của bạn (KHÔNG phải là do được đưa ra, như tôi đã nêu), và BESIDES thực tế là KHÔNG CÓ CÁCH để chứng minh rằng hệ thống kia đã bị vi phạm vì bạn, không có khả năng pháp lý nào có thể yêu cầu bất kỳ hình thức thiệt hại từ một hệ thống trên hệ thống khác. Nó sẽ bị ném ra khỏi tòa án với định kiến, và tìm ra nguyên đơn trong sự khinh miệt. Tuy nhiên, Erma có thể có lỗi vì vi phạm nhiều Điều khoản dịch vụ ...
AviD

5
@Jacob, điều đó rất sai. Chỉ vì mật khẩu xảy ra giống nhau (rõ ràng sẽ vi phạm ToS của bạn và chính sách bảo mật của họ), họ không có quyền pháp lý để làm xấu hai người. Điều đó thậm chí còn BESIDES thực tế rằng việc CUNG CẤP nó sẽ trở nên gần như không thể. Bên cạnh đó, tôi cũng sẽ chỉ ra rằng KHÔNG CÓ LUẬT nào yêu cầu một công ty ngẫu nhiên không có các thực hành bảo mật lỏng lẻo, trừ khi các quy định cụ thể có liên quan. Và trên hết, mật khẩu được mã hóa (!), Vì vậy sự lỏng lẻo khác xa với một kết luận được tha thứ.
AviD

21

Làm thế nào về một ngôi nhà nửa chừng?

Lưu trữ mật khẩu với mã hóa mạnh và không cho phép đặt lại.

Thay vì đặt lại mật khẩu, cho phép gửi mật khẩu một lần (phải thay đổi ngay khi lần đăng nhập đầu tiên xảy ra). Sau đó, để người dùng thay đổi thành bất kỳ mật khẩu nào họ muốn (mật khẩu trước đó, nếu họ chọn).

Bạn có thể "bán" nó như một cơ chế bảo mật để đặt lại mật khẩu.


Bạn biết đấy, tôi đã sử dụng điều đó trong một số tình huống (thường là đây là vấn đề của tôi), nhưng tôi đã có người nói với tôi rằng người dùng cuối sẽ không nhận được sự tương tác và cần hỗ trợ để có thể 'nói với họ mật khẩu 'do hoàn cảnh trong mô hình của doanh nghiệp đó. Tôi đồng ý rằng khi có thể thì điều này là thích hợp hơn.
Shane

Bạn luôn có thể nói với khách hàng của mình về nguy cơ DB của họ rơi vào tay kẻ xấu và họ nhận được sự công khai của mật khẩu bị đánh cắp ... Có rất nhiều ví dụ xung quanh.
Oded

6
Yêu cầu họ đăng xuất trên "thiết kế", với một điều khoản được thêm vào rằng họ không thể kiện bạn nếu điều bạn cảnh báo họ thực sự xảy ra ... Ít nhất thì bạn cũng tự bảo vệ mình.
Oded

4
-1 mật khẩu không bao giờ được "mã hóa" Đó là vi phạm CWE-257 cwe.mitre.org/data/def địnhs / 572.html
rook

34
@Michael Brooks: Không cần phải downvote và sao chép-dán cùng một bình luận nhiều lần; tất cả chúng ta đều biết rằng đó là thực tế xấu. Shane tuyên bố rằng anh ta thiếu đòn bẩy trong vấn đề này, và vì vậy, điều tốt nhất tiếp theo đang được đề xuất.
Julian Gorset

13

Cách duy nhất để cho phép người dùng lấy lại mật khẩu ban đầu của họ, là mã hóa nó bằng khóa chung của người dùng. Chỉ người dùng đó mới có thể giải mã mật khẩu của họ.

Vì vậy, các bước sẽ là:

  1. Người dùng đăng ký trên trang web của bạn (tất nhiên là qua SSL) mà chưa đặt mật khẩu. Đăng nhập chúng tự động hoặc cung cấp một mật khẩu tạm thời.
  2. Bạn đề nghị lưu trữ khóa PGP công khai của họ để lấy lại mật khẩu trong tương lai.
  3. Họ tải lên khóa PGP công khai của họ.
  4. Bạn yêu cầu họ đặt mật khẩu mới.
  5. Họ gửi mật khẩu của họ.
  6. Bạn băm mật khẩu bằng thuật toán băm mật khẩu tốt nhất hiện có (ví dụ: bcrypt). Sử dụng điều này khi xác thực đăng nhập tiếp theo.
  7. Bạn mã hóa mật khẩu bằng khóa chung và lưu trữ riêng.

Nếu người dùng sau đó yêu cầu mật khẩu của họ, bạn trả lời bằng mật khẩu được mã hóa (không băm). Nếu người dùng không muốn lấy lại mật khẩu của họ trong tương lai (họ sẽ chỉ có thể đặt lại mật khẩu thành mật khẩu do dịch vụ tạo), có thể bỏ qua bước 3 và 7.


5
Hầu hết người dùng không có khóa PGP (tôi vẫn không có khóa; sau 20 năm trong ngành, tôi chưa bao giờ cảm thấy cần thiết) và đó không phải là một quá trình không ma sát để có được một khóa. Hơn nữa, một khóa riêng thực sự chỉ là một proxy cho một mật khẩu thực tế. Nói cách khác, đó là mật khẩu cho mật khẩu; tất cả đều là rùa.
Robert Harvey

1
@RobertHarvey Mục tiêu là cho phép người dùng lấy lại mật khẩu của họ mà không cho phép nhân viên trang web hoặc bất kỳ tin tặc nào truy cập vào đó. Bằng cách yêu cầu quá trình truy xuất xảy ra trên máy tính của người dùng, bạn thực thi điều này. Cũng có thể có những lựa chọn thay thế cho PGP có thể đạt được điều tương tự. Rùa có thể đi xuống (có lẽ một số con voi trên đường đi), nhưng tôi không thấy con đường nào khác. Đối với dân số nói chung (không có khả năng được nhắm mục tiêu riêng lẻ) có mật khẩu của bạn trên một chút giấy và không thể truy xuất chúng từ dịch vụ, sẽ an toàn hơn chúng tôi hiện tại
Nicholas Shanks

Tôi thích nó bởi vì nó buộc mọi người phải có khóa công khai PGP, điều kỳ lạ là một việc rất đạo đức phải làm.
Lodewijk

bạn chỉ có thể tạo một cái và đưa nó cho người dùng.
My1

@RobertHarvey Bạn có thể đúng rằng đây "không phải là một quá trình không ma sát", nhưng nó có thể là một dịch vụ bổ sung cho người dùng quyền lực, mà người dùng thông thường có thể bỏ qua nó. Đối với lập luận về PK là "mật khẩu cho mật khẩu", hãy nhớ rằng về mặt lý thuyết nó có thể là như vậy đối với nhiều mật khẩu; bạn có thể sử dụng các mật khẩu khác nhau cho các dịch vụ khác nhau và mã hóa tất cả chúng bằng cùng một khóa. Sau đó, PK sẽ có giá trị hơn là một mật khẩu duy nhất. Có lẽ đó là một cách trừu tượng có thể so sánh với một trình quản lý mật khẩu (?). Tôi không rõ ngay lập tức hậu quả gì có thể xảy ra mặc dù ...
Kjartan

12

Tôi nghĩ rằng câu hỏi thực sự bạn nên tự hỏi mình là: 'Làm thế nào tôi có thể thuyết phục mọi người tốt hơn?'


4
@sneg - Chà, tôi là một người có sức thuyết phục mạnh mẽ, nhưng đôi khi đó là một ông chủ và đôi khi là một khách hàng vì vậy tôi không luôn có đòn bẩy mà tôi cần để thuyết phục họ bằng cách này hay cách khác. Tôi sẽ thực hành trong gương nhiều hơn mặc dù ..;)
Shane

Để thuyết phục bạn không thực sự cần bất kỳ đòn bẩy nào ngoài năng lực và kỹ năng giao tiếp của bạn. Nếu bạn biết một cách tốt hơn để làm một cái gì đó nhưng mọi người đừng lắng nghe ... Hãy nghĩ về nó.
ông chủ z

7
@ z-boss - Rõ ràng bạn chưa từng làm việc với / đối với một số người khó tính mà tôi có niềm vui khi làm việc cùng. Đôi khi, lưỡi của bạn được mạ vàng không thành vấn đề và bạn có thể lập trình lại Google Chrome trong một ngày (có thể thực sự có thể làm cho nó hữu ích) chúng vẫn không nhúc nhích.
Shane

11

Tôi có cùng một vấn đề. Và cũng như vậy, tôi luôn nghĩ rằng ai đó hack hệ thống của tôi không phải là vấn đề "nếu" mà là "khi nào".

Vì vậy, khi tôi phải làm một trang web cần lưu trữ thông tin bí mật có thể phục hồi, như thẻ tín dụng hoặc mật khẩu, tôi sẽ làm gì:

  • mã hóa bằng: openssl_encrypt (chuỗi $ data, chuỗi $ phương thức, chuỗi $ password)
  • dữ liệu arg :
    • thông tin nhạy cảm (ví dụ mật khẩu người dùng)
    • tuần tự hóa nếu cần thiết, ví dụ nếu thông tin là một mảng dữ liệu như nhiều thông tin nhạy cảm
  • password arg : sử dụng thông tin mà chỉ người dùng biết như:
    • biển số người dùng
    • số an sinh xã hội
    • số điện thoại người dùng
    • tên mẹ người dùng
    • một chuỗi ngẫu nhiên được gửi qua email và / hoặc bằng sms tại thời điểm đăng ký
  • phương pháp arg :
    • chọn một phương thức mật mã, như "aes-256-cbc"
  • KHÔNG BAO GIỜ lưu trữ thông tin được sử dụng trong đối số "mật khẩu" tại cơ sở dữ liệu (hoặc bất kỳ vị trí nào trong hệ thống)

Khi cần thiết để truy xuất lại dữ liệu này, chỉ cần sử dụng hàm "openssl_decrypt ()" và yêu cầu người dùng trả lời. Ví dụ: "Để nhận được mật khẩu của bạn, hãy trả lời câu hỏi: Số điện thoại di động của bạn là gì?"

PS 1 : không bao giờ sử dụng làm mật khẩu dữ liệu được lưu trữ trong cơ sở dữ liệu. Nếu bạn cần lưu trữ số điện thoại di động của người dùng, thì không bao giờ sử dụng thông tin này để mã hóa dữ liệu. Luôn sử dụng thông tin mà chỉ người dùng biết hoặc khó có người không biết.

PS 2 : đối với thông tin thẻ tín dụng, như "mua một lần nhấp", việc tôi làm là sử dụng mật khẩu đăng nhập. Mật khẩu này được băm trong cơ sở dữ liệu (sha1, md5, v.v.), nhưng tại thời điểm đăng nhập, tôi lưu trữ mật khẩu văn bản đơn giản trong phiên hoặc trong một cookie bảo mật không cố định (tức là tại bộ nhớ). Mật khẩu đơn giản này không bao giờ ở trong cơ sở dữ liệu, thực sự nó luôn nằm trong bộ nhớ, bị phá hủy ở cuối phần. Khi người dùng nhấp vào nút "mua một lần nhấp", hệ thống sẽ sử dụng mật khẩu này. Nếu người dùng đã đăng nhập bằng một dịch vụ như facebook, twitter, v.v., thì tôi sẽ nhắc lại mật khẩu khi mua (ok, đó không phải là "nhấp chuột" hoàn toàn) hoặc sau đó sử dụng một số dữ liệu của dịch vụ mà người dùng đã sử dụng để đăng nhập (như id facebook).


9

Bảo mật thông tin đăng nhập không phải là hoạt động nhị phân: an toàn / không bảo mật. Bảo mật là tất cả về đánh giá rủi ro và được đo lường liên tục. Những kẻ cuồng tín an ninh ghét phải nghĩ theo cách này, nhưng sự thật xấu xí là không có gì là an toàn tuyệt đối. Mật khẩu băm với các yêu cầu mật khẩu nghiêm ngặt, mẫu DNA và quét võng mạc sẽ an toàn hơn nhưng với chi phí phát triển và trải nghiệm người dùng. Mật khẩu văn bản gốc kém an toàn hơn nhiều nhưng rẻ hơn để thực hiện (nhưng nên tránh). Vào cuối ngày, phân tích chi phí / lợi ích của vi phạm. Bạn thực hiện bảo mật dựa trên giá trị của dữ liệu được bảo mật và giá trị thời gian của dữ liệu đó.

Chi phí cho mật khẩu của ai đó được đưa vào tự nhiên là bao nhiêu? Chi phí mạo danh trong hệ thống nhất định là gì? Đối với các máy tính FBI, chi phí có thể rất lớn. Đối với trang web năm trang một lần của Bob, chi phí có thể không đáng kể. Một chuyên gia cung cấp các tùy chọn cho khách hàng của họ và, khi nói đến bảo mật, đưa ra những lợi thế và rủi ro của bất kỳ việc thực hiện nào. Điều này là gấp đôi vì vậy nếu khách hàng yêu cầu một cái gì đó có thể khiến họ gặp rủi ro vì không tuân thủ các tiêu chuẩn ngành. Nếu một khách hàng đặc biệt yêu cầu mã hóa hai chiều, tôi sẽ đảm bảo bạn ghi lại các phản đối của mình nhưng điều đó sẽ không ngăn bạn thực hiện theo cách tốt nhất mà bạn biết. Vào cuối ngày, đó là tiền của khách hàng. Đúng,

Nếu bạn đang lưu trữ mật khẩu bằng mã hóa hai chiều, tất cả bảo mật sẽ thuộc về quản lý khóa. Windows cung cấp các cơ chế để hạn chế quyền truy cập vào chứng chỉ khóa riêng cho tài khoản quản trị và mật khẩu. Nếu bạn đang lưu trữ trên các nền tảng khác, bạn sẽ cần phải xem những tùy chọn nào bạn có sẵn trên những nền tảng đó. Như những người khác đã đề xuất, bạn có thể sử dụng mã hóa bất đối xứng.

Không có luật (cả Đạo luật bảo vệ dữ liệu ở Anh) mà tôi không biết rằng các mật khẩu cụ thể phải được lưu trữ bằng cách sử dụng băm một chiều. Yêu cầu duy nhất trong bất kỳ luật nào chỉ đơn giản là hợp lý các bước được thực hiện để bảo mật. Nếu quyền truy cập vào cơ sở dữ liệu bị hạn chế, ngay cả mật khẩu văn bản gốc cũng có thể đủ điều kiện hợp pháp theo một hạn chế như vậy.

Tuy nhiên, điều này không làm sáng tỏ thêm một khía cạnh: ưu tiên pháp lý. Nếu ưu tiên pháp lý cho thấy rằng bạn phải sử dụng băm một chiều cho ngành công nghiệp mà hệ thống của bạn đang được xây dựng, thì điều đó hoàn toàn khác. Đó là loại đạn bạn sử dụng để thuyết phục khách hàng của mình. Chặn rằng, đề xuất tốt nhất để cung cấp đánh giá rủi ro hợp lý, ghi lại sự phản đối của bạn và triển khai hệ thống theo cách an toàn nhất mà bạn có thể đưa ra yêu cầu của khách hàng.


10
Câu trả lời của bạn hoàn toàn bỏ qua rằng mật khẩu được sử dụng lại trên nhiều trang web / dịch vụ, đó là trọng tâm của chủ đề này và lý do tại sao mật khẩu có thể khôi phục được coi là một điểm yếu nghiêm trọng. Một chuyên gia bảo mật không ủy thác các quyết định bảo mật cho khách hàng phi kỹ thuật; một chuyên gia biết rằng trách nhiệm của mình vượt ra ngoài khách hàng trả tiền và không đưa ra các lựa chọn với rủi ro cao và phần thưởng bằng không . -1 cho một lời ca ngợi nặng nề về hùng biện và cực kỳ nhẹ về các sự kiện - và thậm chí không thực sự trả lời câu hỏi.
Aaronaught

4
Một lần nữa, bạn hoàn toàn xem xét đánh giá rủi ro. Để sử dụng đối số của bạn, bạn không thể dừng lại ở băm 1 chiều. Bạn cũng phải bao gồm các yêu cầu phức tạp, độ dài mật khẩu, hạn chế sử dụng lại mật khẩu, v.v. Lập luận rằng người dùng sẽ sử dụng mật khẩu ngu ngốc hoặc sử dụng lại mật khẩu không phải là một biện minh kinh doanh đầy đủ nếu hệ thống không liên quan và thẳng thắn, tôi đã trả lời câu hỏi. Câu trả lời ngắn: thúc đẩy sử dụng triển khai tiêu chuẩn, ghi lại sự phản đối của bạn nếu bạn bị ghi đè và tiếp tục.
Thomas

7
Và một lần nữa, bạn lặp lại canard rằng không có gì trong số này quan trọng đối với một hệ thống giá trị thấp! Giá trị của mật khẩu người dùng không liên quan gì đến giá trị tài khoản của người dùng trên hệ thống của bạn. Đó là một bí mật , và một điều bạn phải luôn giữ. Tôi ước tôi có thể đưa ra -1 cho nhận xét chứng minh rằng bạn vẫn không hiểu các vấn đề ở đây.
Aaronaught

5
Đánh giá rủi ro là vấn đề cốt lõi. Tái sử dụng mật khẩu chỉ là một vấn đề tiềm năng trong một loạt các vấn đề lớn hơn nhiều. Tại sao không yêu cầu fobs? Tại sao không yêu cầu người lái xe đến văn phòng của bạn để đăng nhập? Nếu không có đánh giá hợp lý về các rủi ro, không có cách nào để trả lời những câu hỏi này. Trong thế giới của bạn, mọi thứ đều là rủi ro nên mọi hệ thống đều yêu cầu bảo mật đăng nhập cấp độ FBI. Đó đơn giản không phải là cách thế giới thực hoạt động.
Thomas

7
Điều duy nhất rõ ràng ở đây là toàn bộ lập luận của bạn không gì khác hơn là một ngụy biện Slippery Slope và bạn đang cố gắng thu hút người đọc bằng các từ thông dụng như "đánh giá rủi ro" để che đậy sự thật đó. Hãy yên tâm rằng bất kỳ hệ thống nào mà "FBI" sử dụng sẽ an toàn hơn nhiều so với hàm bcrypt và độ dài mật khẩu tối thiểu. Nếu yêu cầu các hệ thống xác thực tiêu chuẩn công nghiệp làm cho tôi trở thành một "kẻ cuồng tín bảo mật", thì tôi đoán tôi là một kẻ cuồng tín; Cá nhân tôi đau đớn khi biết rằng có những người ngoài kia sẵn sàng hy sinh sự bảo đảm của tôi để kiếm tiền. Đó là phi đạo đức .
Aaronaught

8

Đặt câu trả lời cho câu hỏi bảo mật của người dùng là một phần của khóa mã hóa và không lưu trữ câu trả lời cho câu hỏi bảo mật dưới dạng văn bản thuần túy (thay vào đó là hàm băm)


Người dùng có thể trả lời khác nhau câu hỏi quá. Một số câu hỏi xin câu trả lời dài hơn dễ dàng để viết lại sau này.
Monoman

5
Câu hỏi bảo mật là một ý tưởng tồi. Làm thế nào để bạn có được mẹ của bạn để thay đổi tên thời con gái của mình sau khi thông tin bị vi phạm? Cũng xem Kỹ thuật bảo mật của Peter Gutmann .
jww

7

Tôi triển khai các hệ thống xác thực nhiều yếu tố để kiếm sống, vì vậy đối với tôi, việc nghĩ rằng bạn có thể đặt lại hoặc xây dựng lại mật khẩu, trong khi tạm thời sử dụng một yếu tố ít hơn để xác thực người dùng chỉ cho quy trình đặt lại / giải trí. Đặc biệt là việc sử dụng OTP (mật khẩu một lần) như một số yếu tố bổ sung, giảm thiểu phần lớn rủi ro nếu cửa sổ thời gian ngắn cho quy trình làm việc được đề xuất. Chúng tôi đã triển khai phần mềm tạo OTP cho điện thoại thông minh (mà hầu hết người dùng đã mang theo mình cả ngày) rất thành công. Trước khi khiếu nại về một phích cắm thương mại xuất hiện, điều tôi đang nói là chúng ta có thể giảm thiểu rủi ro vốn có của việc giữ mật khẩu dễ dàng truy xuất hoặc đặt lại khi chúng không phải là yếu tố duy nhất được sử dụng để xác thực người dùng.


Tạm thời loại bỏ một yếu tố khỏi hệ thống xác thực nhiều yếu tố thực sự là một phương tiện an toàn hơn nhiều để đặt lại mật khẩu so với các hệ thống "câu hỏi bí mật" gây phẫn nộ được thấy trên rất nhiều trang web. Nhưng đối với việc lưu trữ mật khẩu ở định dạng có thể phục hồi, tôi không chắc nó giúp ích như thế nào, trừ khi bạn bằng cách nào đó sử dụng yếu tố thứ hai để mã hóa hoặc làm xáo trộn cái đầu tiên, và tôi không chắc điều đó có thể xảy ra với một thứ như SecurID. Bạn có thể giải thích?
Aaronaught

@Aaronaught Điều tôi đã nói là, nếu bạn 'bắt buộc' phải có mật khẩu có thể phục hồi, rủi ro cố hữu sẽ thấp hơn nếu đó không phải là yếu tố xác thực duy nhất và người dùng cuối cũng dễ dàng hơn, nếu công việc đó sử dụng lại các yếu tố đó anh ấy / cô ấy đã sở hữu và có quyền truy cập hiện tại, ngoài việc cố nhớ có lẽ cũng quên 'câu trả lời bí mật' hoặc sử dụng liên kết giới hạn thời gian hoặc mật khẩu tạm thời, cả hai đều được gửi qua các kênh không an toàn (trừ khi bạn đang sử dụng S-MIME với chứng chỉ ứng dụng khách, hoặc PGP, cả hai chi phí phát sinh đặc biệt về quản lý hiệp hội chính xác và hết hạn / thay thế)
Monoman

1
Tôi cho rằng tất cả điều đó là đúng, nhưng nguy cơ thỏa hiệp công khai là tối thiểu để bắt đầu; vấn đề nghiêm trọng hơn với mật khẩu có thể phục hồi là bảo mật nội bộ và có khả năng cho phép một nhân viên bất mãn bỏ qua mật khẩu e-mail của hàng ngàn khách hàng hoặc một giám đốc điều hành quanh co để bán cho kẻ lừa đảo và kẻ gửi thư rác. Xác thực hai yếu tố rất tốt trong việc chống lại hành vi trộm cắp danh tính và đoán mật khẩu nhưng không thực sự mang lại nhiều lợi ích cho đến khi giữ an toàn cho cơ sở dữ liệu mật khẩu thực tế.
Aaronaught

5

Xin lỗi, nhưng miễn là bạn có cách nào đó để giải mã mật khẩu của họ, sẽ không có cách nào bảo mật được. Chiến đấu với nó một cách cay đắng, và nếu bạn thua, CYA.


5

Chỉ cần đi qua cuộc thảo luận thú vị và nóng này. Điều làm tôi ngạc nhiên nhất là, làm thế nào ít chú ý đến câu hỏi cơ bản sau:

  • Q1. Lý do thực tế người dùng khăng khăng có quyền truy cập vào mật khẩu lưu trữ văn bản đơn giản là gì? Tại sao nó có giá trị rất nhiều?

Thông tin mà người dùng là già hay trẻ không thực sự trả lời câu hỏi đó. Nhưng làm thế nào một quyết định kinh doanh có thể được đưa ra mà không hiểu đúng mối quan tâm của khách hàng?

Bây giờ tại sao nó quan trọng? Bởi vì nếu nguyên nhân thực sự của yêu cầu của khách hàng là hệ thống rất khó sử dụng, thì có lẽ giải quyết nguyên nhân chính xác sẽ giải quyết vấn đề thực tế?

Vì tôi không có thông tin này và không thể nói chuyện với những khách hàng đó, tôi chỉ có thể đoán: Đó là về khả năng sử dụng, xem ở trên.

Một câu hỏi khác mà tôi đã thấy hỏi:

  • Quý 2 Nếu người dùng không nhớ mật khẩu ở vị trí đầu tiên, tại sao mật khẩu cũ lại quan trọng?

Và đây là câu trả lời có thể. Nếu bạn có con mèo tên là "miaumiau" và sử dụng tên của cô ấy làm mật khẩu nhưng quên mất bạn đã làm, bạn có muốn được nhắc nhở nó là gì hay đúng hơn là được gửi một cái gì đó như "# zy * RW (ew"?

Một lý do khác có thể là người dùng coi đó là một công việc khó khăn để đưa ra một mật khẩu mới! Vì vậy, việc có mật khẩu cũ được gửi lại mang lại ảo tưởng cứu cô khỏi công việc đau đớn đó một lần nữa.

Tôi chỉ đang cố gắng để hiểu lý do. Nhưng bất kể lý do là gì, đó là lý do không phải là nguyên nhân phải được giải quyết.

Là người dùng, tôi muốn mọi thứ đơn giản! Tôi không muốn làm việc chăm chỉ!

Nếu tôi đăng nhập vào một trang web tin tức để đọc báo, tôi muốn nhập 1111 làm mật khẩu và được thông qua !!!

Tôi biết điều đó không an toàn nhưng tôi quan tâm điều gì về việc ai đó truy cập vào "tài khoản" của tôi? Vâng, anh ấy cũng có thể đọc tin tức!

Trang web có lưu trữ thông tin "riêng tư" của tôi không? Tin tức tôi đọc hôm nay? Sau đó, nó là vấn đề của trang web, không phải của tôi! Trang web có hiển thị thông tin cá nhân cho người dùng được xác thực không? Sau đó, đừng hiển thị nó ở vị trí đầu tiên!

Đây chỉ là để thể hiện thái độ của người dùng đối với vấn đề.

Vì vậy, để tóm tắt, tôi không cảm thấy vấn đề là làm thế nào để "lưu trữ" mật khẩu văn bản đơn giản (mà chúng ta biết là không thể) mà là làm thế nào để giải quyết mối quan tâm thực sự của khách hàng.


4

Xử lý mật khẩu bị mất / quên:

Không ai có thể khôi phục mật khẩu.

Nếu người dùng quên mật khẩu, ít nhất họ phải biết tên người dùng hoặc địa chỉ email. Theo yêu cầu, tạo GUID trong bảng Người dùng và gửi email chứa liên kết chứa hướng dẫn làm tham số đến địa chỉ email của người dùng.

Trang đằng sau liên kết xác minh rằng hướng dẫn tham số thực sự tồn tại (có thể với một số logic hết thời gian chờ) và yêu cầu người dùng nhập mật khẩu mới.

Nếu bạn cần có người dùng trợ giúp đường dây nóng, hãy thêm một số vai trò vào mô hình tài trợ của bạn và cho phép vai trò đường dây nóng tạm thời đăng nhập như người dùng được xác định. Đăng nhập tất cả các đăng nhập đường dây nóng như vậy. Ví dụ, Bugzilla cung cấp tính năng mạo danh như vậy cho quản trị viên.


GUID là một ý tưởng tồi, gần như không đủ ngẫu nhiên và dễ bị tàn bạo. có những vấn đề khác với điều này, xem stackoverflow.com/questions/664673/
Kẻ

3

Điều gì về việc gửi email mật khẩu văn bản gốc khi đăng ký, trước khi mã hóa và bị mất? Tôi đã thấy rất nhiều trang web làm điều đó và việc lấy mật khẩu từ email của người dùng sẽ an toàn hơn so với việc để nó trên máy chủ / comp của bạn.


Tôi sẽ không cho rằng email an toàn hơn bất kỳ hệ thống nào khác. Mặc dù điều này đã loại bỏ mối quan tâm pháp lý ra khỏi tay tôi, nhưng vẫn còn vấn đề ai đó làm mất / xóa email của họ và bây giờ tôi quay lại quảng trường.
Shane

Cung cấp cả đặt lại mật khẩu và gửi email mật khẩu văn bản gốc. Tôi nghĩ đó là điều bạn có thể làm nhất về chủ đề này mà không cần giữ một bản sao mật khẩu.
casraf

Đây là một ý tưởng hoàn toàn khủng khiếp. Cả hai đều không hiệu quả (nhiều người dùng thực sự xóa email sau khi đọc) và tệ hơn cả những gì bạn đang cố gắng bảo vệ (vì e-mail không được mã hóa theo mặc định và đi qua các mạng không đáng tin cậy). Tốt hơn nên đề xuất với người dùng rằng họ tự ghi chú mật khẩu, ít nhất là tự gửi email cho mình, thông tin không bao giờ đi xa hơn máy chủ email, không phải trên toàn bộ Internet!
Ben Voigt

3

Nếu bạn không thể từ chối yêu cầu lưu trữ mật khẩu có thể phục hồi, thì đây là đối số của bạn.

Chúng tôi có thể băm mật khẩu đúng cách và xây dựng cơ chế đặt lại cho người dùng hoặc chúng tôi có thể xóa tất cả thông tin nhận dạng cá nhân khỏi hệ thống. Bạn có thể sử dụng một địa chỉ email để thiết lập tùy chọn người dùng, nhưng đó là về nó. Sử dụng cookie để tự động kéo tùy chọn trong các lần truy cập trong tương lai và ném dữ liệu đi sau một khoảng thời gian hợp lý.

Tùy chọn thường bị bỏ qua với chính sách mật khẩu là liệu mật khẩu có thực sự cần thiết hay không. Nếu điều duy nhất chính sách mật khẩu của bạn làm là gây ra các cuộc gọi dịch vụ khách hàng, có lẽ bạn có thể thoát khỏi nó.


Miễn là bạn có một địa chỉ email được liên kết với mật khẩu và mật khẩu đó có thể phục hồi được, bạn có khả năng bị rò rỉ mật khẩu cho địa chỉ email đó do sử dụng lại mật khẩu. Đó thực sự là mối quan tâm chính ở đây. Thực sự không có thông tin nhận dạng cá nhân nào khác quan trọng.
Aaronaught

1
Bạn hoàn toàn bỏ lỡ quan điểm của tôi. Nếu bạn không thực sự cần mật khẩu, đừng thu thập mật khẩu. Các nhà phát triển thường bị mắc kẹt trong lối suy nghĩ "đó chỉ là cách chúng ta làm". Đôi khi nó giúp loại bỏ các khái niệm được hình thành từ trước.
anopres

2

Làm người dùng thực sự cần khôi phục (ví dụ như được nói) mật khẩu họ quên là gì không, hay đơn giản là họ cần có khả năng truy cập hệ thống? Nếu thứ họ thực sự muốn là mật khẩu để đăng nhập, tại sao không có thói quen đơn giản là thay đổi mật khẩu cũ (dù đó là gì) thành mật khẩu mới mà người hỗ trợ có thể cung cấp cho người bị mất mật khẩu?

Tôi đã làm việc với các hệ thống làm chính xác điều này. Người hỗ trợ không có cách nào để biết mật khẩu hiện tại là gì, nhưng có thể đặt lại nó thành một giá trị mới. Tất nhiên tất cả các thiết lập lại như vậy nên được ghi lại ở đâu đó và thực hành tốt sẽ là tạo một email cho người dùng nói với anh ta rằng mật khẩu đã được đặt lại.

Một khả năng khác là có hai mật khẩu đồng thời cho phép truy cập vào tài khoản. Một là mật khẩu "bình thường" mà người dùng quản lý và mật khẩu kia giống như một bộ xương / khóa chính chỉ được nhân viên hỗ trợ biết và giống nhau cho tất cả người dùng. Theo cách đó, khi người dùng gặp sự cố, người hỗ trợ có thể đăng nhập vào tài khoản bằng khóa chính và giúp người dùng thay đổi mật khẩu của mình thành bất cứ điều gì. Không cần phải nói, tất cả các thông tin đăng nhập với khóa chính cũng phải được hệ thống ghi lại. Là một biện pháp bổ sung, bất cứ khi nào sử dụng khóa chính, bạn cũng có thể xác thực thông tin đăng nhập của người hỗ trợ.

-EDIT- Đáp lại những bình luận về việc không có khóa chính: Tôi đồng ý rằng điều đó thật tệ vì tôi tin rằng thật tệ khi cho phép bất kỳ ai khác ngoài người dùng có quyền truy cập vào tài khoản của người dùng. Nếu bạn nhìn vào câu hỏi, toàn bộ tiền đề là khách hàng bắt buộc phải có một môi trường bảo mật bị xâm phạm cao.

Một khóa chủ không cần phải tệ như lúc đầu. Tôi đã từng làm việc tại một nhà máy quốc phòng nơi họ nhận thấy sự cần thiết của nhà điều hành máy tính máy tính lớn có "quyền truy cập đặc biệt" trong một số trường hợp nhất định. Họ chỉ cần đặt mật khẩu đặc biệt vào một phong bì dán kín và dán nó vào bàn của nhà điều hành. Để sử dụng mật khẩu (mà nhà điều hành không biết) anh ta phải mở phong bì. Mỗi lần thay ca, một trong những công việc của người giám sát ca là xem phong bì đã được mở chưa và nếu có thì ngay lập tức mật khẩu đã được thay đổi (bởi một bộ phận khác) và mật khẩu mới được đưa vào một phong bì mới và quá trình bắt đầu hơn một lần nữa Nhà điều hành sẽ được hỏi về lý do tại sao anh ta đã mở nó và vụ việc sẽ được ghi lại cho hồ sơ.

Mặc dù đây không phải là một quy trình mà tôi sẽ thiết kế, nhưng nó đã hoạt động và cung cấp cho trách nhiệm giải trình tuyệt vời. Tất cả mọi thứ đã được ghi lại và xem xét, cộng với tất cả các nhà khai thác có thông tin bí mật của DOD và chúng tôi không bao giờ có bất kỳ sự lạm dụng nào.

Do xem xét và giám sát, tất cả các nhà khai thác đều biết rằng nếu họ lạm dụng đặc quyền mở phong bì, họ có thể bị sa thải ngay lập tức và có thể bị truy tố hình sự.

Vì vậy, tôi đoán câu trả lời thực sự là nếu một người muốn làm đúng việc một người thuê những người họ có thể tin tưởng, kiểm tra lý lịch và thực hiện giám sát quản lý phù hợp và trách nhiệm.

Nhưng sau đó một lần nữa nếu khách hàng của người bạn nghèo này có quản lý tốt, họ sẽ không yêu cầu một giải pháp bắt buộc bảo mật như vậy ngay từ đầu, bây giờ thì sao?


Khóa chính sẽ rất rủi ro, nhân viên hỗ trợ sẽ có quyền truy cập vào mọi tài khoản - và một khi bạn đưa khóa đó cho người dùng, họ sẽ có khóa chính và truy cập mọi thứ.
Carson Myers

Khóa chính là một ý tưởng tồi tệ, vì nếu ai đó phát hiện ra nó (hoặc nó được tiết lộ cho họ một cách tình cờ), họ có thể khai thác nó. Vì cơ chế đặt lại mật khẩu trên mỗi tài khoản là tốt hơn nhiều.
Phil Miller

Tôi tò mò, tôi nghĩ Linux theo mặc định có một tài khoản siêu người dùng với quyền truy cập cấp gốc? Không phải đó là "khóa chính" để truy cập tất cả các tệp trên hệ thống sao?
JonnyBoats

@JonnyBoats Vâng, đúng vậy. Đó là lý do tại sao các Unix hiện đại như Mac OS X vô hiệu hóa tài khoản root.
Nicholas Shanks

@NicholasShanks: Vô hiệu hóa tài khoản root hoặc vô hiệu hóa đăng nhập tương tác trên tài khoản root? Vẫn còn rất nhiều mã chạy với quyền không giới hạn.
Ben Voigt

2

Từ những gì tôi hiểu về chủ đề này, tôi tin rằng nếu bạn đang xây dựng một trang web có đăng nhập / mật khẩu, thì bạn thậm chí không nên nhìn thấy mật khẩu văn bản gốc trên máy chủ của mình. Mật khẩu nên được băm và có thể được muối, trước khi nó rời khỏi máy khách.

Nếu bạn không bao giờ nhìn thấy mật khẩu văn bản gốc, thì câu hỏi về việc truy xuất sẽ không xuất hiện.

Ngoài ra, tôi thu thập (từ web) rằng (được cho là) ​​một số thuật toán như MD5 không còn được coi là an toàn. Tôi không có cách nào để đánh giá bản thân mình, nhưng đó là điều cần xem xét.


1

mở DB trên một máy chủ độc lập và cung cấp kết nối từ xa được mã hóa cho mỗi máy chủ web yêu cầu tính năng này.
nó không phải là một DB quan hệ, nó có thể là một hệ thống tệp có quyền truy cập FTP, sử dụng các thư mục và tệp thay vì bảng và hàng.
cung cấp cho các máy chủ web quyền chỉ viết nếu bạn có thể.

Lưu trữ mã hóa không thể truy xuất của mật khẩu trong DB của trang web (hãy gọi nó là "pass-a") như người bình thường làm :)
trên mỗi người dùng mới (hoặc thay đổi mật khẩu) lưu trữ một bản sao mật khẩu đơn giản trong DB từ xa. sử dụng id của máy chủ, ID người dùng và "pass-a" làm khóa tổng hợp cho mật khẩu này. bạn thậm chí có thể sử dụng mã hóa hai chiều trên mật khẩu để ngủ ngon hơn vào ban đêm.

bây giờ để ai đó có được cả mật khẩu và bối cảnh (id trang web + id người dùng + "pass-a"), anh ta phải:

  1. hack DB của trang web để lấy một cặp ("pass-a", id người dùng).
  2. lấy id của trang web từ một số tập tin cấu hình
  3. tìm và hack vào mật khẩu từ xa DB.

bạn có thể kiểm soát khả năng truy cập của dịch vụ truy xuất mật khẩu (chỉ hiển thị dưới dạng dịch vụ web được bảo mật, chỉ cho phép một số lượng truy xuất mật khẩu nhất định mỗi ngày, thực hiện thủ công, v.v.) và thậm chí tính phí thêm cho "sắp xếp bảo mật đặc biệt" này.
Máy chủ DB truy xuất mật khẩu khá ẩn vì nó không phục vụ nhiều chức năng và có thể được bảo mật tốt hơn (bạn có thể điều chỉnh các quyền, quy trình và dịch vụ chặt chẽ).

tất cả trong tất cả, bạn làm cho công việc khó khăn hơn cho tin tặc. khả năng vi phạm bảo mật trên bất kỳ máy chủ nào vẫn như vậy, nhưng dữ liệu có ý nghĩa (khớp tài khoản và mật khẩu) sẽ khó được lắp ráp.


3
Nếu máy chủ ứng dụng có thể truy cập nó, thì bất kỳ ai cũng có quyền truy cập vào máy chủ ứng dụng (có thể là tin tặc hoặc người trong cuộc độc hại). Điều này cung cấp bảo mật bổ sung bằng không.
molf

1
Bảo mật được thêm vào ở đây là DB của máy chủ ứng dụng không giữ mật khẩu (vì vậy cần phải có lần hack thứ hai - với mật khẩu DB) và mật khẩu DB có thể được bảo vệ tốt hơn trước hoạt động bất thường, khi bạn kiểm soát khả năng truy cập của dịch vụ truy xuất mật khẩu. để bạn có thể phát hiện truy xuất dữ liệu hàng loạt, thay đổi khóa SSH truy xuất hàng tuần hoặc thậm chí không cho phép truy xuất tự động và thực hiện tất cả theo cách thủ công. Giải pháp này cũng phù hợp với bất kỳ lược đồ mã hóa nội bộ nào khác (như khóa chung + khóa riêng, muối, v.v.) cho mật khẩu DB.
Amir Arad

1

Một tùy chọn khác bạn có thể không cân nhắc là cho phép hành động qua email. Nó hơi cồng kềnh, nhưng tôi đã triển khai điều này cho một khách hàng cần người dùng "bên ngoài" hệ thống của họ để xem (chỉ đọc) một số phần nhất định của hệ thống. Ví dụ:

  1. Khi một người dùng được đăng ký, họ có quyền truy cập đầy đủ (như một trang web thông thường). Đăng ký phải bao gồm một email.
  2. Nếu cần dữ liệu hoặc một hành động và người dùng không nhớ mật khẩu của họ, họ vẫn có thể thực hiện hành động đó bằng cách nhấp vào nút " gửi email cho tôi " đặc biệt , ngay bên cạnh nút " gửi " thông thường .
  3. Yêu cầu sau đó được gửi đến email với một siêu liên kết hỏi xem họ có muốn thực hiện hành động đó không. Điều này tương tự như liên kết email đặt lại mật khẩu, nhưng thay vì đặt lại mật khẩu, nó thực hiện hành động một lần .
  4. Sau đó, người dùng nhấp vào "Có" và nó xác nhận rằng dữ liệu sẽ được hiển thị hoặc hành động nên được thực hiện, dữ liệu được tiết lộ, v.v.

Như bạn đã đề cập trong các bình luận, điều này sẽ không hoạt động nếu email bị xâm phạm, nhưng nó giải quyết nhận xét của @joachim về việc không muốn đặt lại mật khẩu. Cuối cùng, họ sẽ phải sử dụng thiết lập lại mật khẩu, nhưng họ có thể làm điều đó vào thời điểm thuận tiện hơn, hoặc với sự hỗ trợ của quản trị viên hoặc bạn bè, khi cần.

Một thay đổi đối với giải pháp này sẽ là gửi yêu cầu hành động đến quản trị viên đáng tin cậy của bên thứ ba. Điều này sẽ hoạt động tốt nhất trong trường hợp với người già, người bị thách thức về tinh thần, người dùng rất trẻ hoặc người khác bối rối. Tất nhiên điều này đòi hỏi một quản trị viên đáng tin cậy cho những người này để hỗ trợ hành động của họ.


1

Muối và băm mật khẩu của người dùng như bình thường. Khi đăng nhập người dùng, cho phép cả mật khẩu của người dùng (sau khi muối / băm), nhưng cũng cho phép những gì người dùng nhập theo nghĩa đen cũng khớp.

Điều này cho phép người dùng nhập mật khẩu bí mật của họ, nhưng cũng cho phép họ nhập phiên bản muối / băm của mật khẩu, đây là những gì ai đó sẽ đọc từ cơ sở dữ liệu.

Về cơ bản, làm cho mật khẩu muối / băm cũng là mật khẩu "văn bản thuần túy".


Tại sao bạn nghĩ cần phải so sánh những gì người dùng đã nhập trực tiếp với mật khẩu băm được lưu trữ trong cơ sở dữ liệu? Những loại chức năng nào cung cấp cho bạn? Ngoài ra, khi thực hiện việc này, điều cực kỳ quan trọng là áp dụng chức năng so sánh thời gian không đổi giữa mật khẩu người dùng nhập và mật khẩu băm từ cơ sở dữ liệu. Mặt khác, hầu như không thể xác định mật khẩu băm dựa trên sự khác biệt về thời gian.
Artjom B.

1
@ArtjomB. Câu hỏi hỏi làm thế nào để bảo vệ mật khẩu của người dùng đồng thời cho phép bộ phận hỗ trợ khách hàng (CS) nói chuyện / gửi email cho người dùng thông qua việc nhập mật khẩu đã quên của họ. Bằng cách làm cho phiên bản băm có thể sử dụng được như một mật khẩu văn bản đơn giản, CS có thể đọc nó ra và cho người dùng sử dụng nó thay cho mật khẩu đã quên của họ. CS cũng có thể sử dụng nó để đăng nhập với tư cách người dùng và giúp họ hoàn thành nhiệm vụ. Điều này cũng cho phép người dùng thoải mái với các hệ thống mật khẩu quên tự động được bảo vệ, vì mật khẩu họ nhập và sử dụng được băm.
Eliott

Tôi hiểu rồi. Tôi chưa đọc toàn bộ câu hỏi. Việc sử dụng so sánh thời gian liên tục vẫn là cần thiết để ngăn ngừa sự phá vỡ tầm thường của toàn bộ hệ thống.
Artjom B.
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.