Khi bạn lưu ý chính xác, lược đồ băm mật khẩu chuẩn sẽ không hoạt động nếu xác thực được thực hiện chỉ bằng một chuỗi con của mật khẩu. Có một số cách mà một hệ thống như vậy có thể được thực hiện:
Store mật khẩu ở đồng bằng:
- Đơn giản và dễ thực hiện.
- Không an toàn nếu cơ sở dữ liệu bị xâm phạm.
- Có thể không tuân thủ các quy định yêu cầu bộ nhớ mật khẩu được mã hóa hoặc được mã hóa (nhưng sử dụng mã hóa cơ sở dữ liệu cấp thấp có thể gặp phải điều đó).
Store mật khẩu được mã hóa, giải mã để kiểm tra:
- Không còn an toàn hơn so với lưu trữ nó trong đồng bằng nếu khóa mã hóa cũng bị thỏa hiệp.
- Có thể đáp ứng các quy định cấm lưu trữ mật khẩu thuần túy.
- Có thể được thực hiện an toàn hơn bằng cách sử dụng hardware security module chuyên dụng hoặc máy chủ xác thực riêng, lưu trữ khóa và cung cấp giao diện hộp đen để mã hóa và xác minh chuỗi con.
cửa hàng băm của tất cả (hoặc đủ nhiều) chuỗi con có thể:
- nhu cầu không gian lưu trữ nhiều hơn các giải pháp khác.
- Mật khẩu vẫn có thể được khôi phục khá dễ dàng bằng vũ lực nếu cơ sở dữ liệu bị xâm nhập vì mỗi chuỗi con có thể bị tấn công riêng.
Sử dụng k-out-of-n threshold secret sharing:
- nhu cầu không gian ít hơn lưu trữ nhiều băm, nhưng hơn lưu trữ các mật khẩu ở đồng bằng hoặc sử dụng mã hóa đảo ngược.
- Không cần phải giải mã mật khẩu để xác minh chuỗi con.
- Vẫn dễ bị tấn công bạo lực nếu cơ sở dữ liệu bị xâm nhập: bất kỳ ai có thể đoán k chữ cái của mật khẩu có thể khôi phục phần còn lại.(Trong thực tế, với một số triển khai, k -1 chữ có thể là đủ.)
Cuối cùng, tất cả các chương trình bị suy yếu chống lại các cuộc tấn công brute force nếu cơ sở dữ liệu bị thỏa hiệp. Lý do cơ bản cho điều này là ở chỗ không có nhiều entropy trong một chuỗi ba chữ cái của một mật khẩu điển hình (hoặc thực sự, thậm chí là một mật khẩu mạnh), vì vậy sẽ không mất nhiều dự đoán để crack.
Điều nào sau đây là tốt nhất? Thật khó nói. Nếu tôi có để chọn một trong các lược đồ này, tôi có thể sử dụng bộ mã hóa đối xứng mạnh mẽ (chẳng hạn như AES), với máy chủ riêng hoặc HSM để xử lý mã hóa và xác minh. Bằng cách đó, ít nhất, một kẻ tấn công làm hại một máy chủ front-end sẽ không thể chỉ sao chép cơ sở dữ liệu và tấn công nó ngoại tuyến (mặc dù họ vẫn có thể gắn kết một cuộc tấn công bạo lực trên HSM nếu nó không thực hiện giới hạn tốc độ hiệu quả). Tuy nhiên, tôi muốn nói rằng toàn bộ ý tưởng chỉ sử dụng một phần của mật khẩu để xác thực là thiếu sót: nó không thực sự mang lại lợi ích bảo mật, ngoại trừ trong một vài kịch bản tấn công đặc biệt bị hạn chế (như vậy, chẳng hạn như vậy.). là một kẻ nghe trộm chỉ có thể quan sát một sự kiện xác thực và không thể tiếp tục cố gắng cho đến khi họ nhận được cùng một thách thức), nhưng về cơ bản nó làm suy yếu bảo mật bằng cách giảm lượng thông tin cần thiết để xác thực thành công. Có nhiều giải pháp tốt hơn, chẳng hạn như TANs, để bảo mật quan tâm rằng một phần xác thực mật khẩu là nghĩa vụ phải giải quyết.
Nguồn
2011-11-22 14:21:38
Không nhất thiết - điều này đã được trả lời trên ITSecurity.SE: http://security.stackexchange.com/questions/4830/how-do-some-sites-eg-online-banks-only-ask-for-specific -characters-từ-a-pa. Xem thêm http://www.smartarchitects.co.uk/news/9/15/Partial-Passwords---How.html – Piskvor
Có lẽ đó chỉ là tôi, nhưng tôi chưa bao giờ thấy một ngân hàng yêu cầu tôi viết ba chữ cái. Chỉ dành cho [TAN] (http://en.wikipedia.org/wiki/Transaction_authentication_number). – PiTheNumber
@PiTheNumber: Nó không phải * chỉ * bạn, nhưng một số ngân hàng làm (đã làm) điều này; Tôi đã trải nghiệm điều này trực tiếp. Lưu ý rằng đây là một hệ thống được đưa vào vị trí trước khi sử dụng rộng rãi điện thoại di động (đã bật tính năng sử dụng TAN) và tôi không chắc liệu nó có còn được sử dụng tại ngân hàng cụ thể đó hay không. – Piskvor