Mẫu “email chính là xác thực”
(rubenerd.com)- Một số người dùng, thay vì ghi nhớ hoặc quản lý mật khẩu, lại dùng quy trình “Quên mật khẩu” mỗi lần như một cách đăng nhập
- Luồng thực tế là: tại trang đăng nhập, họ nhận liên kết khôi phục qua email, nhập mật khẩu tạm thời, rồi trong lần truy cập tiếp theo lại lặp lại cùng quy trình
- Thói quen này không hẳn là một chiến lược bảo mật có chủ ý, mà gần với một hành vi đã học được và hình thành theo thời gian
- Ngay cả các biện pháp cải thiện như trình quản lý mật khẩu và xác thực hai bước/đa yếu tố cũng có thể bị người dùng cảm nhận là tăng thêm ma sát hơn là tăng cường bảo mật
- Thiết kế hệ thống cần lấy hành vi lặp lại của người dùng làm tiền đề, và dẫn dắt họ chuyển sang cách sử dụng tốt hơn một cách tự nhiên
Khôi phục mật khẩu được dùng như đăng nhập
- Một số người dùng không nhập mật khẩu khi đăng nhập vào tài khoản trực tuyến, mà lặp lại quy trình khôi phục mỗi lần
- Đi tới trang đăng nhập
- Nhấp vào “I forgot my password”
- Chuyển sang email
- Nhấp vào liên kết khôi phục
- Nhập một mật khẩu tạm thời mà họ sẽ không nhớ
- Sau đó lặp lại cùng quy trình
- Khi được hỏi vì sao làm vậy, họ không trả lời được, hoặc phản ứng rằng chưa từng nghĩ đến lý do
- Hành vi này không phải là một chiến lược đăng nhập được đặt ra vào buổi sáng, mà gần với một quy trình lặp lại đã hình thành theo thời gian
Ma sát mà cải tiến bảo mật tạo ra cho người dùng
- Cách này hoạt động như một giải pháp ít tốn công sức, giúp người dùng không cần nhớ cụm mật khẩu
- Trình quản lý mật khẩu, đánh cắp danh tính, xác thực hai bước và xác thực đa yếu tố, cũng như sự lỗi thời của mô hình tên người dùng/mật khẩu, đều là những chủ đề đã được thảo luận rộng rãi
- Các quy trình bảo mật tốt hơn thường làm tăng rào cản và ma sát, khiến người dùng khó chấp nhận một cách tự nhiên
- Nhà thiết kế cần cân nhắc hành vi đã học được của người dùng, để tạo ra luồng giúp họ dần chuyển sang cách sử dụng tốt hơn theo thời gian
1 bình luận
Ý kiến trên Hacker News
Tài khoản email là mẫu số chung phổ biến nhất trong xác thực trực tuyến. Điện thoại di động cũng có sức cạnh tranh, nhưng có thể bị mất; số điện thoại thì phổ biến hơn và tồn tại lâu hơn, nhưng mức độ bảo mật thấp hơn nhiều so với tài khoản của các nhà cung cấp email lớn
Nếu muốn thiết kế “hệ thống xác thực tưởng tượng dành cho Internet”, trước hết phải nhìn vào khôi phục tài khoản. Nếu câu trả lời khi đánh mất bộ xác thực xịn là “thì không truy cập được nữa” hoặc “một hội đồng đồng nghiệp bảo chứng danh tính”, thì hệ thống đó chỉ hoạt động khi người dùng là một dạng sinh vật trí tuệ tưởng tượng chứ không phải con người
Con người cần có khả năng phục hồi sau sai lầm
Liệu có thể làm cho nó hoạt động với người bình thường không? Tôi nghĩ ta có đủ sức sáng tạo để thiết kế được
Dịch vụ của chúng tôi là một mảng kinh doanh khá nhẹ nhàng, nên người dùng chỉ dùng tài khoản vì tiện. Cách chúng tôi chốt lại là: người dùng nhập email, chúng tôi gửi mã xác thực qua email, người dùng nhập mã thì được cấp một cookie rất dài, về thực chất là đăng nhập vô thời hạn
Việc đã có tài khoản hay chưa không quan trọng; nếu là email mới thì tạo tài khoản mới. Đôi khi người dùng có nhiều email vô tình tạo tài khoản mới, nhưng tỷ lệ chuyển đổi đăng ký và đăng nhập tốt hơn nhiều nên đáng chấp nhận. Thời hạn hiệu lực của mã và số lần thử cần phân tích rủi ro, và nếu có thể thì nên dùng cơ chế khóa. Nếu dịch vụ không quá quan trọng, tôi khuyên dùng chiến lược này. iOS Mail giờ cũng hỗ trợ kiểu này giống tính năng mã dùng một lần của Messages, nên khá tiện cho một số người dùng
Đừng ép người mua tạo tài khoản, chỉ cần yêu cầu thông tin chi tiết. Dù sao trình duyệt cũng tự động điền. Sau đó gửi liên kết kiểm tra trạng thái đơn hàng qua email, và ở đơn hàng tiếp theo lại hỏi email. Ma sát bổ sung sẽ gây mất doanh thu lớn hơn lợi ích có được từ “người dùng đã đăng ký”
Chỉ khi cần đăng nhập trên thiết bị khác mới có thể yêu cầu mật khẩu mới. Cách này giảm ma sát đăng ký và mật khẩu yếu. Phần lớn người dùng dù sao cũng hiếm khi cần đăng nhập trên thiết bị khác
Nếu không phải lĩnh vực cần bảo toàn tính ẩn danh thì làm thế cũng được, rồi sau này tích hợp passkey. Nhược điểm là không thể chia sẻ mật khẩu, nên phải nghĩ sớm hơn về bài toán quản lý nhiều người dùng trên một tài khoản. Nhưng nếu xử lý có chủ ý, funnel hay trải nghiệm người dùng rốt cuộc sẽ tốt hơn. Ngoài ra, bảo mật sẽ bị ràng buộc bởi mức bảo mật trung bình của các nhà cung cấp email của người dùng, nhưng thường vẫn tốt hơn mức cần thiết. Mật khẩu có thể dùng sau này như yếu tố thứ hai khi cần, hoặc thêm yếu tố khác; nếu là B2B thì có thể đi thẳng sang SAML hoặc OIDC. Trong B2B hoặc D2C, cách này luôn hoạt động tốt, và các trường hợp ngoại lệ đáng để xử lý vì lợi ích thu được
Việc sao chép mã, tìm tab đang mở trang đăng nhập, rồi dán vào khá phiền
Đến mức này thì chẳng phải chỉ cần gửi một liên kết URL dùng một lần tới địa chỉ email và cho đăng nhập bằng một cú nhấp là được sao? Cho nó hết hạn trong 10 phút và hủy sau một lần dùng là xong
Tất nhiên bất kỳ ai có liên kết đầu tiên cũng có thể đăng nhập vào tài khoản, nhưng dù sao nó chỉ truy cập được từ email. Cảm giác bảo mật vượt quá tài khoản email thì coi như mất hết, nhưng thực tế đã đến mức đó rồi. Nếu dùng mẫu như “nhấp để xác thực đăng nhập: www.someurl.com?p=134234535” qua tin nhắn điện thoại, thì đó là xác thực hai bước không phải nhập mã một cách ngớ ngẩn
Email có thể rơi vào spam, hoặc không đăng nhập được trong vài giờ vì greylisting, hoặc mất 1 phút mới tới mà như vậy đôi khi đã cảm thấy quá lâu. Tôi không chắc có nên khuyến nghị không
Với kiểu “nhấp để xác thực đăng nhập” gửi qua điện thoại, phải cung cấp cả mã lẫn liên kết. Không phải thiết bị dùng để đăng nhập lúc nào cũng là điện thoại, nên nên là “nhập 1234 hoặc nhấp”
Nhưng nó chậm hơn việc trình quản lý mật khẩu tự động điền cặp tên người dùng/mật khẩu, vì phải chờ email rồi nhấp liên kết
Tôi không muốn đăng nhập trong trình duyệt in-app của Gmail mà muốn đăng nhập trong trình duyệt thông thường, nên khá phiền
Nút “Đăng nhập bằng Google” tốt hơn “gửi liên kết qua email”, và cách nào thì cũng có thể theo dõi được
Ý tưởng rằng con người sẽ tạo và nhớ mật khẩu cho mọi dịch vụ chẳng mấy quan trọng là không thực tế. Việc tạo thêm một hệ thống xác thực dựa trên mật khẩu gần như chỉ là một kiểu đóng vai
Mật khẩu thường được dùng theo một trong hai cách: trình quản lý mật khẩu được bảo vệ bằng một mật khẩu thật, hoặc cùng một mật khẩu lặp lại cho từng dịch vụ. Vì hầu như mọi dịch vụ đều cung cấp khôi phục qua email, nên trên thực tế email chính là phương tiện xác thực. Email cá nhân thì hiếm khi đổi, không chia sẻ, và cũng không được tái sử dụng. Có lẽ bạn đã dùng email cá nhân lâu hơn cả số điện thoại. Trong thời gian dùng địa chỉ email hiện tại, số điện thoại đã đổi ít nhất năm lần, và những số đó giờ đang được người khác dùng
Và chức năng quên mật khẩu ít nhất cũng thông báo mọi lần thử cho chủ sở hữu địa chỉ. Đăng nhập dựa trên mật khẩu không phải lúc nào cũng gửi email mỗi khi đăng nhập từ vị trí mới
Câu trả lời rất đơn giản. Thường liên quan đến sự bất tiện mà nhà cung cấp dịch vụ đã tạo ra cho người dùng. Trong trường hợp này thì có vẻ rõ ràng: phiên của nhà cung cấp email thường gần như không bao giờ kết thúc và vẫn đăng nhập trừ khi xóa cache trình duyệt
Chỉ cần đặt token xác thực của dịch vụ mình có thời hạn ngang với Gmail, và cho phép đăng nhập bằng mật khẩu dùng một lần mỗi lần như một phương án thay thế. Nhưng phải dừng cái thông lệ báng bổ kiểu token xác thực 12 giờ. Khi đó người dùng sẽ không bao giờ đăng nhập bằng khôi phục mật khẩu nữa
Trước đây tôi từng gặp vấn đề với tài khoản Epic và Spotify. Tạo tài khoản, dùng một tuần thì phiên hết hạn và Spotify đá tôi ra khỏi tài khoản. Khi đăng nhập lại thì báo mật khẩu sai, nhưng nó được lưu trong trình quản lý mật khẩu nên chuyện đó là không thể. Cuối cùng chỉ còn cách đặt lại qua email. Vài lần đầu, dù nhận email và đặt lại thì mô thức tương tự vẫn lặp lại; sau 3–4 lần thì thậm chí email cũng không tới, phải tạo tài khoản mới. Giờ tôi đăng nhập Spotify bằng tài khoản Google và vẫn chưa gặp vấn đề. Nhưng nếu dùng email thông thường thì hệ thống xác thực của họ đơn giản là không chạy
Vấn đề là chúng ta thiếu một ngôn ngữ nhất quán để đo rủi ro và phán đoán “trang này có thật sự cần xác thực hai bước không?”, “thời gian phiên 30 phút có hợp lý không?”. Nếu có phần mềm diệt virus cập nhật, đa số sẽ muốn duy trì trạng thái đăng nhập. Bạn đã từng bị yêu cầu xóa toàn bộ cookie để sửa lỗi của một trang nào đó chưa? Câu trả lời của tôi luôn là từ chối. Tôi từng nghe câu “tài khoản là của bạn, và nếu bạn chấp nhận rủi ro bị hack để duy trì đăng nhập thì đó là rủi ro của bạn, không phải của đơn vị vận hành dịch vụ”, và tôi ngày càng đồng ý hơn. Nếu ai đó xóa hết EC2 instance khi laptop của bạn vẫn đăng nhập, đó là lỗi của bạn, không phải lỗi của AWS vì đã không đăng xuất bạn sớm hơn. AWS có thể làm vậy, nhưng tại sao phải làm? Không có lý do gì để làm phiền 1 triệu người chỉ để bảo vệ 1 người bất cẩn
Tôi từng thấy các site bỏ bước quên mật khẩu, hoặc bỏ luôn mật khẩu. Email chính là xác thực
Cách làm là nhập địa chỉ email, nhận email chứa mã, rồi nhập mã để đăng nhập. Tôi hiểu vì sao họ làm vậy, nhưng với người dùng nhiều email thì tôi khá ghét. Tôi đã phải đưa email và ghi chú vào trình quản lý mật khẩu để nhớ nên dùng email nào, và nó nằm lại như một mục không có mật khẩu
Tôi nghĩ nếu họ còn không làm được hệ thống đăng nhập tử tế thì khả năng cao là họ cũng thiếu năng lực cung cấp các chức năng đã hứa. Magic link giờ không chỉ là phiền toái nữa mà đã trở thành một bộ lọc
Không có gánh nặng phải nhớ mật khẩu cho một dịch vụ không dùng thường xuyên, và onboarding trong công ty cũng dễ hơn. Công ty tải lên CSV người dùng, rồi người dùng có thể bắt đầu làm việc ngay mà không phải tạo mật khẩu, xác nhận và đáp ứng quy tắc. Tôi không thích liên kết email, vì phần xem trước của app điện thoại hoặc trình quét virus doanh nghiệp có thể “nhấp” vào liên kết
Ngay cả khi cung cấp cả hai, nếu vừa yêu cầu mật khẩu vừa bắt xác nhận email, tôi nghĩ luồng đăng ký sẽ rơi rụng nhiều hơn. Hơn nữa, không phải xử lý cả mật khẩu lẫn nhiều luồng đăng nhập email nên code cũng đơn giản hơn nhiều
Vì voucher phải gắn với email, họ cần xác nhận quyền sở hữu bằng cách nhấp liên kết để phòng khi sau này phát sinh vấn đề hỗ trợ do mất voucher. Sau đó nếu tạo tài khoản thì cũng có thể xem các voucher đã nhận trước đây
Chỉ sau khi đọc bài này tôi mới nhận ra mình đang dùng đúng cách này ở Best Buy
Không phải cố ý. Vì mật khẩu được lưu trong 1Password nên tôi biết là đúng, nhưng mỗi lần định mua gì đó trên bestbuy.com thì lại có một cơ chế chống chiếm đoạt tài khoản nào đó chặn lại và nói dối rằng mật khẩu sai. Tôi hoàn toàn có thể tin rằng vấn đề nằm ở phía mình. Có thể là trình chặn quảng cáo hoặc chặn DNS cục bộ. Nhưng sau vài lần lặp lại, tôi mất hết động lực debug và chỉ đi theo con đường ít trở ngại nhất
maxlengthkhác nhau là chuyện rất phổ biếnVí dụ khi đổi mật khẩu bạn nhập mật khẩu 60 ký tự, nhưng trang đăng nhập có độ dài tối đa 40 ký tự, thì lúc đăng nhập sẽ thành “mật khẩu sai”. Vì vậy giờ tôi dùng chính sách lưu độ dài tối đa trong cấu hình ứng dụng để truyền xuống mọi trường mật khẩu. Kiểm tra thử thì thực sự có sự không khớp về độ dài. Form đặt mật khẩu có
maxlengthlà 54, còn trang đăng nhập thì không cómaxlength. Do đó nếu mật khẩu dài hơn 54 ký tự và 1Password không tự động cắt mật khẩu đã lưu xuống còn tối đa 54 ký tự, thì bạn sẽ không thể đăng nhậpVới đa số mọi người, thao tác trên máy tính là thử đi thử lại một cách thô bạo cho đến khi đại khái chạy được. Phần mềm được tạo ra bởi những người hiểu chi tiết các hệ thống bên dưới, nhưng lại được làm cho những người không có sự hiểu biết đó
Khi người dùng tìm thấy một mẫu thao tác chạy được một lần, họ sẽ ở lại với nó. Giờ nhiều trường học dùng máy tính bảng trong giáo dục nên xu hướng này còn tăng lên. Họ không nắm được cảm giác về cách máy tính hoạt động. Đa số không suy nghĩ sâu. Nó cứ ở đó, và vì họ đã quen với những thứ vốn hỏng sẵn, thêm vài cú nhấp chuột thì có gì to tát đâu
Nói phóng đại thì luồng đăng nhập là giống nhau
A) Vào website, dùng trình quản lý mật khẩu để sao chép và dán một chuỗi ngẫu nhiên, rồi nhận yêu cầu TOTP qua email để xác minh danh tính. Hoặc B) vào website, bấm quên mật khẩu, nhận liên kết đăng nhập rồi nhập một chuỗi ngẫu nhiên. Trong nhiều trường hợp B thực sự nhanh hơn, và hầu như cũng không chậm hơn. Ô “ghi nhớ” chẳng có tác dụng gì
Tôi nghĩ luồng của mình tốt hơn cả hai. Vào trang web thì Safari đề xuất tự động điền, dùng TouchID/FaceID, rồi được yêu cầu mã bước hai. Nếu mã đến qua SMS hoặc email thì Safari đề xuất tự động điền. Ngay cả với TOTP, Safari cũng tự động điền. Rất dễ. Passkey còn dễ hơn vì không có bước thứ hai và không phải chờ SMS/email
Động cơ thì hiểu ngay. Dùng “quên mật khẩu” thì không cần nhớ mật khẩu. Và bảo mật tài khoản cũng không yếu đi. Dù sao thì con đường đó vốn đã mở cho kẻ tấn công rồi
Một số website lấy đây làm luồng mặc định, ngầm khẳng định rằng nếu có thể gửi nút đăng nhập cho ai đó qua email thì bản thân mật khẩu là vô nghĩa. Cá nhân tôi không thích. Tôi không tin email, và cũng không thích việc nó trở thành điểm lỗi đơn của hàng chục tài khoản. Nếu chỉ dùng yếu tố thứ hai mà đăng nhập được thì đó không phải xác thực hai bước. Tôi muốn đăng nhập bằng mật khẩu mà không có tùy chọn đặt lại, nhưng thực tế không như vậy