Proton Authenticator là một ứng dụng xác thực hai yếu tố (2FA) mã nguồn mở giúp tạo mã mật khẩu một lần dựa trên thời gian (TOTP) trên thiết bị, cho phép truy cập các dịch vụ trực tuyến với một lớp bảo mật bổ sung. Ứng dụng sử dụng cùng một công nghệ mã hóa đã được thử nghiệm kỹ lưỡng giúp bảo vệ phần còn lại của hệ sinh thái Proton. Proton Authenticator là duy nhất vì được thiết kế ngay từ đầu để khả dụng trên hầu hết mọi nền tảng trong khi vẫn bảo vệ quyền riêng tư và trao cho người dùng quyền sở hữu hoàn toàn đối với dữ liệu của mình.

Không giống như các ứng dụng xác thực khác, Proton Authenticator bảo mật dữ liệu bằng mã hóa đầu cuối, ngay cả khi kích hoạt tính năng đồng bộ hóa thiết bị.

Điều này có nghĩa là Proton Authenticator ngăn chặn bất kỳ ai, kể cả chính Proton, biết được tài khoản dịch vụ trực tuyến đang sử dụng. Thông tin này, tương tự như email hoặc lịch sử duyệt web, có thể tiết lộ rất nhiều điều về người dùng, và việc bảo vệ nó là điều cần thiết để duy trì quyền riêng tư.

Mã hóa đầu cuối của Proton Authenticator đảm bảo rằng tất cả các hoạt động mã hóa, bao gồm tạo khóa và mã hóa dữ liệu, đều được thực hiện cục bộ trên thiết bị. Điều này có nghĩa là Proton không thể truy cập dữ liệu không được mã hóa của người dùng hoặc chia sẻ dữ liệu đó với bất kỳ bên thứ ba nào. Các máy chủ Proton không bao giờ có quyền truy cập vào dữ liệu không được mã hóa, bao gồm cả mật khẩu Tài khoản Proton.

Mô hình mã hóa

Proton Authenticator áp dụng phương pháp tiếp cận toàn diện nhằm đảm bảo an ninh và quyền riêng tư tối đa cho tất cả dữ liệu người dùng. Mọi hoạt động mã hóa đều diễn ra cục bộ trên thiết bị, và bất kỳ dữ liệu nào được truyền đến máy chủ đều luôn được mã hóa. Proton không bao giờ có quyền truy cập vào các khóa văn bản thuần túy cần thiết để giải mã dữ liệu người dùng, khiến việc giải mã dữ liệu được lưu trữ là bất khả thi đối với Proton, ngay cả khi có yêu cầu từ bên thứ ba.

Proton Authenticator sử dụng cùng một công nghệ mã hóa tiên tiến được sử dụng để xác thực trong Proton Mail. Việc này bao gồm sử dụng phiên bản tăng cường của giao thức Mật khẩu từ xa an toàn (SRP) nhằm cung cấp các đảm bảo anniuynh mạnh mẽ hơn chống lại các cuộc tấn công trung gian (MITM). Cách thức triển khai của Proton giúp đảm bảo rằng ngay cả kẻ tấn công có thể tùy ý đọc, sửa đổi, trì hoãn, phá hủy, lặp lại hoặc tạo các thư giả mạo giữa Proton và người dùng theo cách không thể phát hiện cũng bị giới hạn chỉ được kiểm tra một mật khẩu duy nhất cho mỗi lần thử đăng nhập, tương đương với việc cố gắng đăng nhập trực tiếp. Bằng cách này, ngay cả khi Proton bị xâm phạm và có hành vi ác ý, thông tin tương đương mật khẩu cũng không bao giờ bị tiết lộ.

Đọc thêm về mã hóa xác thực của Proton

Mã hóa dữ liệu

Proton Authenticator cho phép lưu trữ an toàn các mã 2FA, ngay cả khi không có Tài khoản Proton. Điều này có nghĩa là quá trình mã hóa ban đầu phải được thực hiện hoàn toàn trên thiết bị cục bộ. Sau đó, nếu quyết định sử dụng Tài khoản Proton để đồng bộ hóa mã giữa các thiết bị, các khóa mật mã được lưu trữ trên máy chủ Proton sẽ được sử dụng để thực hiện đồng bộ hóa.

Quá trình mã hóa của Proton bắt đầu bằng việc máy chủ Proton cung cấp phiên bản đã mã hóa của khóa gốc mà ứng dụng Authenticator sử dụng để mã hóa dữ liệu người dùng. Mỗi người dùng Proton có một Khóa người dùng bất đối xứng, và Proton mã hóa Khóa người dùng này trên thiết bị như sau:

  • Các tài khoản sử dụng một mật khẩu tài khoản duy nhất: Proton mã hóa Khóa người dùng bằng hàm băm bcrypt của mật khẩu tài khoản và giá trị ngẫu nhiên của tài khoản.
  • Các tài khoản sử dụng tính năng nhiều mật khẩu tài khoản: Proton mã hóa Khóa người dùng bằng hàm băm bcrypt của mật khẩu khóa và giá trị ngẫu nhiên của tài khoản.

Proton Authenticator sử dụng bcrypt và một giá trị ngẫu nhiên của tài khoản để băm mật khẩu nhằm tạo thêm một lớp bảo vệ chống lại các cuộc tấn công brute-force. Ngay cả khi kẻ xấu truy cập được vào cơ sở dữ liệu của Proton, các khóa tài khoản vẫn an toàn trước các cuộc tấn công brute-force.

Sau khi kích hoạt đồng bộ hóa, Proton Authenticator sẽ tạo một Khóa Authenticator ngẫu nhiên 32 byte. Khóa này được mã hóa và ký bằng Khóa người dùng, đảm bảo chỉ có người dùng mới có thể giải mã nó — không ai (kể cả Proton) có thể đọc hoặc tạo Khóa Authenticator mới. Sau khi có quyền truy cập vào Khóa Authenticator, tất cả các mục trong Proton Authenticator sẽ được mã hóa bằng 256-bit AES-GCM.

Vì Proton Authenticator không yêu cầu có Tài khoản Proton, nên cũng cần một giản đồ mã hóa riêng để lưu trữ an toàn dữ liệu khi dữ liệu đó chỉ tồn tại trên thiết bị. Cuối cùng, cách dễ nhất để triển khai việc này là coi Tài khoản Proton như một nhà cung cấp khóa riêng biệt. Sau cùng, mô hình này sẽ như sau:

Sơ đồ mã hóa của Proton Authenticator khi không có Tài khoản Proton

Đối với việc lưu trữ khóa cục bộ trên thiết bị, cơ chế lưu trữ dựa trên các nhà cung cấp dịch vụ lưu trữ khóa an toàn của từng hệ thống:

  • Android: Khóa được lưu trữ an toàn trong Android Keystore(cửa sổ mới), sau đó được sử dụng để mã hóa Khóa ngẫu nhiên cục bộ được lưu trữ trong hệ thống tệp được bảo vệ của ứng dụng. Khóa đó được sử dụng để mã hóa đối xứng tất cả các mục Proton Authenticator trên thiết bị.
  • iOS/iPadOS/macOS: Khóa ngẫu nhiên cục bộ được tạo và lưu trữ trong dịch vụ Keychain(cửa sổ mới). Khóa đó được sử dụng để mã hóa đối xứng tất cả các mục Proton Authenticator trên thiết bị.
  • Windows: Khóa ngẫu nhiên cục bộ được tạo và lưu trữ trong Windows Credential Manager(cửa sổ mới). Khóa đó được sử dụng để mã hóa đối xứng tất cả các mục Proton Authenticator trên thiết bị. Nếu không có kết nối với WCM, người dùng có thể tự mã hóa Khóa ngẫu nhiên cục bộ bằng mật khẩu.
  • Linux: Khóa ngẫu nhiên cục bộ được tạo và lưu trữ trong DBUS Secret Service hiện có. Khóa đó được sử dụng để mã hóa đối xứng tất cả các mục Proton Authenticator trên thiết bị. Nếu không có DBUS secret service nào được định cấu hình, người dùng có thể mã hóa Khóa ngẫu nhiên cục bộ bằng mật khẩu.

Mã hóa sao lưu

Một trong những ưu điểm chính của Proton Authenticator là người dùng luôn kiểm soát dữ liệu của mình. Điều này bao gồm việc cho phép định kỳ sao lưu mã sang thiết bị cục bộ và đặt mật khẩu mã hóa dữ liệu nhạy cảm này.

Để triển khai bản sao lưu cục bộ an toàn này, mật khẩu đã cung cấp sẽ được sử dụng để lấy một khóa mã hóa an toàn bằng cách sử dụng Argon2 làm KDF (Hàm tạo khóa). KDF được sử dụng để tạo các khóa mật mã từ các đầu vào bí mật, như mật khẩu do người dùng nhập, và mục đích chính của hàm này là cải thiện tính bảo mật bằng cách khiến những kẻ tấn công gặp nhiều khó khăn và mất nhiều thời gian hơn để bẻ khóa mật khẩu. Bằng cách sử dụng khóa mã hóa được tạo ra từ mật khẩu này, tất cả các mục nhập sẽ được tuần tự hóa và mã hóa để đảm bảo dữ liệu vẫn được mã hóa an toàn, ngay cả khi bản sao lưu bị rò rỉ. Và bằng cách sử dụng các công nghệ mở và nổi tiếng, người dùng có thể giải mã dữ liệu của mình mà không cần sử dụng Proton Authenticator, cho phép duy trì quyền kiểm soát ngay cả khi quyết định chuyển sang một ứng dụng xác thực khác.

Bảo mật thông qua sự minh bạch

Giống như tất cả các dịch vụ của Proton, Proton Authenticator là mã nguồn mở. Bất kỳ ai cũng có thể tham khảo mã nguồn để xác minh mô hình bảo mật. Tương tự như các dịch vụ khác, Proton Authenticator cũng sẽ trải qua các cuộc kiểm tra bảo mật độc lập thường xuyên và các báo cáo kiểm tra này sẽ được chia sẻ công khai ngay khi có sẵn.

Cuối cùng, đối với các nhà nghiên cứu bảo mật quan tâm, Proton Authenticator đủ điều kiện tham gia chương trình tiền thưởng tìm lỗi của Proton chương trình này cung cấp các giải thưởng lên tới 100.000 USD cho việc phát hiện ra lỗi trong phần mềm của Proton.