Công nghệ

KeyMeld: Khóa chung cho iPhone và Android cùng kiến trúc Zero Vault cho dự án

KeyMeld không phải là Zero Vault. Đây là dịch vụ SaaS riêng biệt hỗ trợ nhà phát triển đưa khóa chung ra ngoài backend của dự án, kết nối khách hàng iOS và Android và xây dựng kiến trúc theo mô hình Zero Vault.

Các ứng dụng đa nền tảng gặp phải vấn đề mà người dùng thường không nhận thấy. Trên màn hình, họ thấy một tài khoản và mong đợi hoạt động giống nhau trên mọi thiết bị. Tuy nhiên, bên trong, iPhone và Android sử dụng các cơ chế bảo vệ khác nhau và xử lý các khóa cục bộ theo cách khác nhau.

Trên iPhone, ứng dụng có thể bảo vệ khóa cục bộ của thiết bị bằng các phương tiện của Apple Keychain. Trên Android, công nghệ tương ứng là Android Keystore. Những công nghệ này nhằm giữ cho các khóa nhạy cảm nằm trong môi trường bảo vệ của thiết bị, nhưng chúng không thể thay thế cho nhau.

Với người dùng, điều này không quan trọng. Họ chỉ muốn mở ứng dụng trên iPhone, sau đó cài đặt trên Android và tiếp tục làm việc với cùng dữ liệu được bảo vệ đó.

Đối với nhà phát triển, đây là câu hỏi kiến trúc: làm thế nào để tổ chức truy cập chung trên hai nền tảng mà không chuyển các khóa cục bộ của thiết bị và không lưu các bản sao của chúng trong cơ sở dữ liệu của backend?

Khi tìm hiểu về KeyMeld, tôi thấy rằng dịch vụ này cung cấp một khóa chung riêng biệt để giải quyết vấn đề này mà không can thiệp vào các phương thức bảo vệ nội bộ của iOS và Android.

Khóa chung cho các nền tảng khác nhau

Khóa cục bộ của thiết bị thuộc về một điện thoại cụ thể và được bảo vệ bằng các phương tiện của hệ điều hành tương ứng. Nó nằm trong môi trường bảo vệ của thiết bị và không dành để chuyển tự do giữa các thiết bị.

Khóa chung của KeyMeld là một thực thể khác. Nó được tạo ra cho một dự án, tài khoản và không gian bảo vệ cụ thể và trở thành chung cho các khách hàng được ủy quyền trên các nền tảng khác nhau.

Dịch vụ không lấy khóa từ iPhone, không chuyển nó sang Android và cũng không cố gắng biến hai khóa khác nhau thành một. Bảo vệ nền tảng vẫn độc lập, và ứng dụng nhận được quyền truy cập chung cho dự án của mình.

Điều này quy định vai trò kiến trúc của KeyMeld. Nó không làm cho iOS và Android trở nên giống nhau hay thay thế cơ chế nội bộ của chúng. Thay vào đó, nó bổ sung một cấp truy cập chung với khóa chung, giúp dự án không phải tự xây dựng cơ chế phát hành khóa liên nền tảng.

Cho các sản phẩm và tài khoản khác nhau, các cấu trúc khóa riêng biệt được tạo ra. Do đó, mỗi dự án giữ vùng truy cập riêng của mình, còn nhiều tài khoản trên cùng một thiết bị vẫn được phân chia rõ ràng.

Zero Vault thuộc về dự án

Ngay lập tức cần làm rõ: Zero Vault không phải tên của chính KeyMeld. Đây là mô hình kiến trúc mà một sản phẩm liên kết có thể xây dựng.

KeyMeld hoạt động như một dịch vụ SaaS độc lập. Nó không cài đặt bên trong backend của ứng dụng hay nằm cạnh cơ sở dữ liệu của dự án như một module phần mềm khác. Khóa chung được phục vụ trong một cấu trúc SaaS riêng của KeyMeld, ngoài backend của chính dự án.

Để mô hình này duy trì được, các giới hạn tin cậy giữa dự án và KeyMeld cần độc lập. Phần backend của ứng dụng và dịch vụ bên ngoài sử dụng các thông tin đăng nhập, quyền truy cập và cơ chế quản lý riêng biệt.

Chính xác mô hình này trong kiến trúc của dự án có thể gọi là mô hình Zero Vault: cơ sở dữ liệu của máy chủ không lưu trữ khóa từ nơi lưu trữ bảo vệ của khách hàng.

Zero Vault không có nghĩa là backend của dự án không lưu trữ gì cả. Nó vẫn có tài khoản, cài đặt, dữ liệu kinh doanh và tất cả các thông tin cần thiết để vận hành ứng dụng. Tuy nhiên, không có khóa chung cạnh đó.

Sự bị bại lộ của cơ sở dữ liệu của máy chủ không làm lộ khóa chung: khóa này không được lưu cùng với các tài khoản hay dữ liệu máy chủ khác. Tuy nhiên, mô hình này không hứa hẹn rằng mọi sự cố trong hạ tầng đều không gây hại. Nó giải quyết chính xác vấn đề — loại bỏ khóa chung khỏi kho lưu trữ của khách hàng nằm trong cơ sở dữ liệu của chính dự án.

Tình huống thực tế: một tài khoản trên iPhone và Android

Giả sử có một ứng dụng lưu trữ dữ liệu cục bộ được bảo vệ. Đó có thể là bộ xác thực, khách hàng doanh nghiệp hoặc bất kỳ dịch vụ nào cần làm việc với thông tin mã hóa trực tiếp trên thiết bị.

Trên iPhone, ứng dụng bảo vệ khóa cục bộ bằng các phương tiện của iOS. Trên Android, sử dụng cơ chế bảo vệ riêng của Android. Các khóa nội bộ của thiết bị khác nhau, điều này hoàn toàn bình thường.

Nếu không có lớp trung gian chung, nhà phát triển phải tự giải quyết cách tổ chức truy cập vào cùng dữ liệu bảo vệ trên hai nền tảng. Lưu trữ nền tảng vẫn còn khác nhau, và sản phẩm phải tự liên kết cả hai phương thức này.

Có thể tạo ra các sơ đồ riêng cho iOS và Android, cố gắng chuyển khóa cục bộ thủ công hoặc lưu các bản sao của chúng trên máy chủ.

KeyMeld cho phép bỏ qua việc chuyển các khóa cục bộ và lưu các bản sao của chúng trên máy chủ, bằng cách thêm một khóa chung chung.

Khách hàng trên iPhone và Android có thể truy cập cùng một khóa chung trong cùng một dự án và tài khoản được ủy quyền. Đồng thời, mỗi điện thoại vẫn sử dụng các phương tiện bảo vệ riêng của mình.

Với người dùng, đây là cảm giác như một tài khoản duy nhất trên nhiều thiết bị. Người dùng không cần biết các cơ chế bên trong iPhone hay Android.

Khi đổi điện thoại, không cần xuất khóa cục bộ từ thiết bị cũ hay tạo ra phiên bản bảo vệ riêng cho nền tảng mới. Khách hàng mới kết nối cùng dự án cũ và truy cập cùng khóa chung.

Backend tham gia xác thực yêu cầu, nhưng khóa chung chỉ dành cho khách hàng được ủy quyền và không lưu trữ trong cơ sở dữ liệu của chính dự án.

Chính KeyMeld không chuyển đổi cơ sở dữ liệu của ứng dụng hay thay thế hệ thống đồng bộ ghi chú của người dùng. Nhiệm vụ của nó là cung cấp cho khách hàng khóa để làm việc với dữ liệu bảo vệ. Nội dung kho dữ liệu và việc cập nhật vẫn thuộc trách nhiệm của chính sản phẩm.

Ba loại khóa và bí mật khác nhau

Để không nhầm lẫn các phần của kiến trúc, đủ để phân biệt ba khái niệm.

  • Khóa cục bộ của thiết bị thuộc về một điện thoại cụ thể và được bảo vệ bằng các phương tiện của iOS hoặc Android.

  • Khóa chung được các khách hàng đã được ủy quyền của một dự án và tài khoản sử dụng. Đúng vậy, nó liên kết các nền tảng khác nhau ở cấp độ của chính sản phẩm.

  • Bí mật dịch vụ dùng cho backend để tương tác bảo vệ với KeyMeld. Không chuyển cho ứng dụng di động hay trình duyệt.

Bí mật dịch vụ và khóa chung phục vụ các mục đích khác nhau. Trong kiến trúc Zero Vault, khóa chung không được lưu trữ trong cơ sở dữ liệu của sản phẩm cùng dữ liệu backend.

KeyMeld không yêu cầu tên người, mật khẩu, nội dung của kho TOTP hay ý nghĩa kinh doanh của các ghi chú. Dịch vụ chỉ quan tâm tới liên kết dự án, tài khoản và quyền của khách hàng để nhận khóa chung.

Quyền truy cập khóa vẫn kiểm soát được

Việc lấy khóa chung không phải là quyền tự do của bất kỳ khách hàng nào.

Nếu thiết bị không còn đáng tin cậy nữa, trạng thái tài khoản thay đổi hoặc lệnh thu hồi truy cập dự án được ban hành, KeyMeld có thể ngừng cung cấp khóa chung cho khách hàng đó.

Ở đây, điều quan trọng là không đưa ra kết luận quá rộng. Điều này không có nghĩa là xóa tự động bản sao khóa cục bộ đã tồn tại. Thay vào đó, nó kiểm soát việc nhận khóa tiếp theo và kết nối khách hàng mới.

Đối với người dùng, điều này có nghĩa là kết nối các thiết bị mới và quản lý quyền truy cập khóa của chúng đều thuộc một hệ thống.

Đối với nhà phát triển — họ không phải tự xây dựng các logic này riêng biệt cho iOS và Android. Tuy nhiên, mô hình Zero Vault cuối cùng vẫn phụ thuộc vào việc dự án có lưu trữ khóa chung của mình hay không, và có phân chia rõ ràng giữa hạ tầng nội bộ và cấu trúc SaaS bên ngoài của KeyMeld hay không.

KeyMeld không làm những gì

KeyMeld không phải là trình quản lý mật khẩu và không lưu trữ các ghi chú TOTP của người dùng. Nó không trở thành cơ sở dữ liệu đám mây của ứng dụng và không thay thế hệ thống đồng bộ nội dung của nó.

Không phải là thay thế Apple Keychain hay Android Keystore. Dịch vụ để nguyên các cơ chế cục bộ của nền tảng và chỉ thêm một cấp chung chung cho sản phẩm.

Cũng không phải dịch vụ xác thực người dùng bắt buộc. Việc xác thực và phân quyền có thể do dịch vụ riêng như MeldID đảm nhận, trong khi KeyMeld cung cấp một khóa chung nhất cho khách hàng được ủy quyền mà không lưu trữ trong backend của chính sản phẩm.

Cuối cùng, KeyMeld không tự tạo Zero Vault. Nó cung cấp cho dự án một cấu trúc ngoại vi của khóa chung. Để duy trì kiến trúc này, nhà phát triển không cần lưu trữ khóa chung trong cơ sở dữ liệu của riêng họ. Các vùng tin cậy độc lập cũng cần duy trì phân tách.

Ai có thể cần đến điều này

Phương pháp này phù hợp với các ứng dụng làm việc đồng thời trên nhiều nền tảng và sử dụng dữ liệu bảo vệ cục bộ.

Đó có thể là bộ xác thực, ứng dụng doanh nghiệp, sản phẩm SaaS, dịch vụ nhiều thiết bị hoặc bất kỳ dự án nào mà một tài khoản phải làm việc giống nhau trên iPhone và Android.

Đối với nhà phát triển, giá trị không chỉ là giảm thiểu logic nền tảng. Quan trọng hơn là khả năng phân chia trách nhiệm. Backend của sản phẩm lưu trữ dữ liệu riêng, còn KeyMeld như dịch vụ SaaS bên ngoài cung cấp khóa chung và quản lý phát hành tiếp theo.

Sau khi tìm hiểu về dự án, tôi xem KeyMeld không phải như một Zero Vault hoàn chỉnh, mà như một công cụ giúp nhà phát triển xây dựng mô hình như vậy cho sản phẩm của chính họ.

iOS và Android vẫn sử dụng các cơ chế bảo vệ riêng. Khách hàng nhận được khóa chung chung và backend của ứng dụng, nếu không lưu trữ khóa đó hay duy trì phân chia rõ ràng giữa hạ tầng nội bộ và dịch vụ SaaS của KeyMeld, thì không trở thành két sắt chứa khóa từ kho lưu trữ của khách hàng.

Đối với người dùng, đây có nghĩa là truy cập chung trên nhiều nền tảng. Đối với nhà phát triển — khả năng để khóa chung thoát khỏi backend nội bộ của họ. Và đối với dự án chung — kiến trúc Zero Vault, trong đó máy chủ ứng dụng không lưu trữ khóa của dữ liệu khách hàng đã được bảo vệ.

Chi tiết về dự án: KeyMeld