Passkey: mật khẩu không tồn tại

Đăng ngày bởi David Carrero

Mọi câu chuyện về mật khẩu đều kết thúc giống nhau: có người cất bí mật của bạn ở đâu đó, rồi đánh mất nó.

Năm nào cũng vậy. Thuở đầu, bí mật nằm trong một tệp văn bản thuần trên máy tính dùng chung, và chỉ cần bảo hệ thống in nó ra là xong. Năm 1979, Morris và Thompson mô tả cách thêm muối và làm cho việc tính hash trở nên đắt đỏ, để một danh sách bị đánh cắp không lập tức biến thành một danh sách mật khẩu — một bước tiến khổng lồ. Rồi đến các quy tắc soạn mật khẩu, thứ bắt chúng ta nhét thêm một ký tự đặc biệt vào cuối. Nhưng hình dáng của vấn đề thì không xê dịch một milimet nào suốt chừng ấy năm: có một bí mật, bạn biết nó, máy chủ có thể kiểm chứng nó, và vì thế máy chủ có thứ để mà đánh mất.

Tất cả những gì chúng ta làm từ đó đến nay là khiến bí mật ấy dài hơn, lạ hơn, mặn hơn, lâu bị bẻ hơn. Không ai chịu hỏi câu nằm trước đó: nếu chẳng có bí mật chung nào thì sao?

1976 ý tưởng rằng một bí mật có thể có hai nửa

Năm 1976, Whitfield Diffie và Martin Hellman công bố New Directions in Cryptography. Ý tưởng đơn giản đến mức gần như xúc phạm: một chiếc khóa có thể tách thành hai mảnh không thể hoán đổi cho nhau. Một mảnh bạn rải khắp bốn phương; mảnh kia không bao giờ rời khỏi nhà bạn. Thứ bạn ký bằng khóa riêng thì kiểm chứng được bằng khóa công khai, nhưng khóa công khai chẳng ký nổi cái gì.

Hãy đọc lại lần nữa mà nghĩ đến một máy chủ: trang web không còn cần cất giữ thứ có thể dùng để đăng nhập. Nó chỉ giữ cái nửa không mở được cửa nào cả.

Việc ý tưởng ấy mất gần nửa thế kỷ mới bò tới màn hình ngân hàng của bạn thì chẳng nói lên điều gì hay ho về ngành này. Chứng thư số phía người dùng đã tồn tại và chạy tốt; thứ không tồn tại là một cách dùng chúng mà không cần bằng thạc sĩ. Phần mật mã học đã xong xuôi. Phần dễ dùng thì chưa.

2013 cuối cùng cũng có người chịu ngồi lại với nhau

Năm 2013, FIDO Alliance ra đời, một liên minh công nghiệp với mục tiêu tuyên bố công khai và chẳng khiêm tốn chút nào: giảm sự lệ thuộc vào mật khẩu. Điều quan trọng không phải công nghệ — thứ đó có sẵn rồi — mà là việc các nhà sản xuất, trình duyệt và dịch vụ chịu ngồi xuống thống nhất chung một giao thức. Nghe thì quan liêu, nhưng đó đúng là mảnh còn thiếu: một cơ chế xác thực chỉ chạy trên một trình duyệt với một dịch vụ thì không phải cơ chế, đó là giai thoại.

2019 trình duyệt học được cách làm mật mã

Vào tháng 3 năm 2019, WebAuthn trở thành khuyến nghị của W3C. Nói cho dễ hiểu: từ nay bất kỳ trang web nào cũng có thể nhờ trình duyệt — bằng một API tiêu chuẩn, không plugin, không driver — tạo ra một cặp khóa và ký bằng nó.

Luồng hoạt động, bỏ hết màu mè, là thế này. Khi bạn đăng ký, thiết bị của bạn tạo một cặp khóa mới, riêng cho trang đó. Nó gửi đi khóa công khai. Nó giữ lại khóa riêng, do chính thiết bị cất và được bảo vệ bằng vân tay, khuôn mặt hoặc mã PIN của bạn. Khi bạn quay lại, trang web gửi cho bạn một thử thách ngẫu nhiên, thiết bị của bạn ký lên đó, và trang web kiểm chứng chữ ký bằng khóa công khai nó đã có sẵn.

Hãy để ý điều không xảy ra: không có bí mật nào đi qua đường truyền. Máy chủ chưa bao giờ có khóa riêng của bạn, nên nó không thể làm mất. Nếu mai kia toàn bộ cơ sở dữ liệu của nó bị rò rỉ, thứ kẻ trộm ôm về là một danh sách khóa công khai — đại khái như trộm cuốn danh bạ điện thoại. Không có hash nào để tống qua GPU, không có từ điển nào để thử. Không phải là khó: mà là ở đó chẳng có gì đáng giá.

Tác dụng phụ còn lớn hơn cả ý tưởng chính

Khi thiết bị của bạn tạo cặp khóa đó, nó buộc chặt cặp khóa vào tên miền. Khóa nó lưu cho nganhangcuaban.vn chỉ được đưa ra cho nganhangcuaban.vn. Đây không phải chính sách, không phải lời cảnh báo, cũng không phải cái biểu tượng đỏ trên thanh địa chỉ: đơn giản là khóa cho nganhang-cuaban-baomat.com không tồn tại. Trình duyệt không tìm thấy nó vì nó chưa từng được tạo ra.

Điều này giết chết phishing. Không phải làm giảm: nó rút mất cơ chế hoạt động. Cả cái nghề phishing dựa trên chuyện bạn có thể gõ mật khẩu của mình vào nhầm trang, và bao năm nay chúng ta cố sửa nó bằng cách đào tạo người dùng với các chiến dịch nâng cao nhận thức. Tất cả những thứ đó chỉ chữa triệu chứng. Mắt bạn bị một địa chỉ na ná đánh lừa; điện thoại của bạn thì không. Nó có đọc đâu: nó so chuỗi ký tự.

Tiện thể nó hạ luôn thói dùng lại mật khẩu, tội lỗi lớn còn lại. Mỗi trang có một cặp khóa riêng. Chẳng còn gì để mà dùng lại, kể cả khi bạn muốn.

2022 ba ông lớn ký hiệp ước hòa bình

Vào tháng 5 năm 2022, Apple, Google và Microsoft cùng nhau tuyên bố sẽ mở rộng hỗ trợ thông tin xác thực FIDO — tức passkey — trên nền tảng và trình duyệt của họ.

Chính điều đó biến chuyện này từ một ghi chú kỹ thuật thành thứ bạn có thể giải thích cho mẹ mình nghe. Trước đó, WebAuthn gần như luôn đồng nghĩa với một chiếc khóa USB vật lý: tuyệt vời, và dành cho đúng ba người. Passkey thì sống ngay trong cái điện thoại bạn đang cầm trên tay, và mở khóa bằng khuôn mặt.

Những gì nó không sửa được

Giờ đến phần chữ nhỏ, bởi ngành này sẽ dành vài năm tới để giả vờ rằng nó không tồn tại.

Khôi phục vẫn là chỗ mềm nhất. Cái lỗ hổng không biến mất: nó chỉ dời chỗ. Nếu bạn mất thiết bị, phải có ai đó quyết định rằng bạn đúng là bạn, và quyết định ấy gần như luôn được đưa ra qua email, qua SMS, hoặc qua một cuộc trò chuyện với một con người ở tổng đài. Con người đó chính xác là cái đích ngắm y như trước kia. Bạn bọc thép cửa trước, còn cửa sau vẫn nguyên chỗ cũ.

Đồng bộ trói bạn vào một hệ sinh thái. Passkey tiện vì nền tảng của bạn nhân bản chúng qua các thiết bị. Nói cách khác, chùm chìa khóa của bạn nằm trong móc khóa của một công ty cụ thể. Rời khỏi đó không phải bất khả thi, nhưng cũng chẳng phải một cái nút bấm. Bạn đổi bài toán phải nhớ lấy bài toán phải thuộc về.

Và bạn vẫn cần đăng nhập được khi mất điện thoại. Trên thực tế, điều đó nghĩa là gần như chẳng trang nào bỏ mật khẩu: họ chỉ giấu nó sau dòng chữ “gặp sự cố khi đăng nhập?”. Chừng nào cái liên kết đó còn, mật khẩu còn, và nó vẫn tệ y như xưa nay. Sợi xích đứt ở phương thức yếu nhất mà bạn chấp nhận, chứ không phải ở phương thức thanh lịch nhất mà bạn cung cấp.

Trong lúc chờ đợi thì làm gì

Hãy bật passkey ở mọi nơi có mời bạn bật, và bắt đầu từ những thứ đau nhất nếu mất: email, ngân hàng, cái tài khoản bạn dùng để đăng nhập vào tất cả những chỗ khác. Đây là một trong số hiếm hoi các cải thiện bảo mật mà lại còn đỡ việc cho bạn.

Và đừng tự huyễn hoặc: bạn sẽ còn dùng mật khẩu thêm nhiều năm nữa, dù chỉ với vai trò phương án B. Hãy để chúng dài, khác nhau ở từng trang, và nằm trong một trình quản lý mật khẩu. Nếu bạn muốn một mật khẩu không rời khỏi đầu mình, dùng trình tạo mật khẩu; nếu bạn muốn biết cái đang dùng có trụ nổi không, đưa nó qua trình kiểm tra.

Câu hỏi cũ của người lính gác — ngươi có phải người của ta không? — cuối cùng cũng có một câu trả lời khác. Suốt mấy chục năm, chúng ta đáp lại bằng cách nói ra một từ mà kẻ khác có thể nghe lỏm. Giờ chúng ta đáp bằng một chữ ký mà chỉ thiết bị của bạn tạo ra nổi, còn cái từ kia thì không bao giờ được sinh ra. Đây là lần đầu tiên chúng ta thay đổi câu hỏi thay vì thay đổi cái từ.


Nguồn: W. Diffie và M. Hellman, “New Directions in Cryptography”, IEEE Transactions on Information Theory, 1976 · R. Morris và K. Thompson, “Password Security: A Case History”, Communications of the ACM, 1979 · FIDO Alliance, thành lập năm 2013 · “Web Authentication: An API for accessing Public Key Credentials”, khuyến nghị của W3C, tháng 3 năm 2019 · tuyên bố chung của Apple, Google và Microsoft về việc hỗ trợ passkey, tháng 5 năm 2022.

← Quay lại blog