Ký ứng dụng

Tính năng ký ứng dụng cho phép nhà phát triển xác định tác giả của ứng dụng và cập nhật ứng dụng mà không cần tạo các giao diện và quyền phức tạp. Mọi ứng dụng chạy trên nền tảng Android đều phải được nhà phát triển ký. Các ứng dụng tìm cách cài đặt mà không có chữ ký sẽ bị Google Play hoặc trình cài đặt gói trên thiết bị Android từ chối.

Trên Google Play, tính năng ký ứng dụng là cầu nối giữa niềm tin của Google đối với nhà phát triển và niềm tin của nhà phát triển đối với ứng dụng của họ. Nhà phát triển biết rằng ứng dụng của họ được cung cấp, chưa sửa đổi cho thiết bị Android; đồng thời, nhà phát triển có thể chịu trách nhiệm về hành vi của ứng dụng.

Trên Android, việc ký ứng dụng là bước đầu tiên để đặt ứng dụng vào Hộp cát ứng dụng. Chứng chỉ ứng dụng đã ký xác định mã nhận dạng người dùng nào được liên kết với ứng dụng nào; các ứng dụng khác nhau chạy theo các mã nhận dạng người dùng khác nhau. Tính năng ký ứng dụng đảm bảo rằng một ứng dụng không thể truy cập vào bất kỳ ứng dụng nào khác, ngoại trừ thông qua IPC được xác định rõ.

Khi một ứng dụng (tệp APK) được cài đặt trên thiết bị Android, Trình quản lý gói sẽ xác minh rằng APK đã được ký đúng cách bằng chứng chỉ có trong APK đó. Nếu chứng chỉ (hay chính xác hơn là khoá công khai trong chứng chỉ) khớp với khoá dùng để ký mọi tệp APK khác trên thiết bị, thì tệp APK mới sẽ có tuỳ chọn chỉ định trong tệp kê khai rằng tệp APK này chia sẻ UID với các tệp APK đã ký tương tự khác.

Ứng dụng có thể được bên thứ ba (OEM, nhà mạng, thị trường thay thế) ký hoặc tự ký. Android cung cấp tính năng ký mã bằng chứng chỉ tự ký mà nhà phát triển có thể tạo mà không cần sự trợ giúp hoặc quyền bên ngoài. Các ứng dụng không cần phải có chữ ký của cơ quan trung ương. Android hiện không thực hiện quy trình xác minh CA cho chứng chỉ ứng dụng.

Các ứng dụng cũng có thể khai báo quyền bảo mật ở cấp độ bảo vệ Chữ ký, chỉ hạn chế quyền truy cập vào các ứng dụng được ký bằng cùng một khoá, đồng thời duy trì UID và Hộp cát ứng dụng riêng biệt. Bạn có thể sử dụng tính năng UID dùng chung để tạo mối quan hệ chặt chẽ hơn với Hộp cát ứng dụng dùng chung, trong đó hai hoặc nhiều ứng dụng được ký bằng cùng một khoá nhà phát triển có thể khai báo UID dùng chung trong tệp kê khai của chúng.

Lược đồ ký APK

Android hỗ trợ 3 giao thức ký ứng dụng:

Để có khả năng tương thích tối đa, hãy ký ứng dụng bằng tất cả các lược đồ, trước tiên là v1, sau đó là v2 và v3. Các thiết bị chạy Android 7.0 trở lên cài đặt ứng dụng được ký bằng lược đồ v2 trở lên nhanh hơn so với những ứng dụng chỉ được ký bằng lược đồ v1. Các nền tảng Android cũ bỏ qua chữ ký v2 trở lên, do đó, cần ứng dụng chứa chữ ký v1.

Ký JAR (sơ đồ phiên bản 1)

Ký tệp APK đã là một phần của Android ngay từ đầu. Tệp này dựa trên JAR đã ký. Để biết thông tin chi tiết về cách sử dụng lược đồ này, hãy xem tài liệu của Android Studio về Ký ứng dụng.

Chữ ký v1 không bảo vệ một số phần của tệp APK, chẳng hạn như siêu dữ liệu ZIP. Trình xác minh APK cần xử lý nhiều cấu trúc dữ liệu không đáng tin cậy (chưa được xác minh) rồi loại bỏ dữ liệu không thuộc phạm vi của chữ ký. Điều này tạo ra một bề mặt tấn công có kích thước lớn. Hơn nữa, trình xác minh APK phải giải nén tất cả các mục được nén, tốn nhiều thời gian và bộ nhớ hơn. Để giải quyết những vấn đề này, Android 7.0 đã ra mắt Lược đồ chữ ký APK phiên bản 2.

Lược đồ chữ ký APK phiên bản 2 và 3 (lược đồ v2 trở lên)

Các thiết bị chạy Android 7.0 trở lên hỗ trợ lược đồ chữ ký APK phiên bản 2 (lược đồ v2) trở lên. (lược đồ phiên bản 2 đã được cập nhật lên phiên bản 3 trong Android 9 để bao gồm thông tin bổ sung trong khối ký, nhưng vẫn hoạt động tương tự.) Nội dung của tệp APK được băm và ký, sau đó khối ký APK thu được sẽ được chèn vào tệp APK. Để biết thông tin chi tiết về cách áp dụng lược đồ v2 trở lên cho một ứng dụng, hãy xem bài viết Lược đồ chữ ký APK v2.

Trong quá trình xác thực, lược đồ v2 trở lên coi tệp APK là một blob và thực hiện việc kiểm tra chữ ký trên toàn bộ tệp. Mọi thay đổi đối với tệp APK, bao gồm cả các thay đổi đối với siêu dữ liệu ZIP, đều làm mất hiệu lực chữ ký APK. Hình thức xác minh APK này nhanh hơn đáng kể và cho phép phát hiện nhiều lớp sửa đổi trái phép hơn.

Định dạng mới này có khả năng tương thích ngược. Vì vậy, bạn có thể cài đặt tệp APK được ký bằng định dạng chữ ký mới trên các thiết bị Android cũ (đơn giản là bỏ qua dữ liệu bổ sung được thêm vào tệp APK), miễn là các tệp APK này cũng được ký bằng phiên bản v1.

Quy trình xác minh chữ ký APK

Hình 1. Quy trình xác minh chữ ký APK

Hàm băm toàn bộ tệp của APK được xác minh dựa trên chữ ký v2+ được lưu trữ trong khối ký APK. Hàm băm bao gồm mọi thứ ngoại trừ khối ký APK, chứa chữ ký v2 trở lên. Mọi thay đổi đối với APK bên ngoài khối ký APK đều làm mất hiệu lực chữ ký v2 trở lên của APK. Các tệp APK bị xoá chữ ký v2 trở lên cũng bị từ chối vì chữ ký v1 của các tệp này chỉ định rằng tệp APK đã được ký bằng v2, khiến Android 7.0 trở lên từ chối xác minh tệp APK bằng chữ ký v1.

Để biết thông tin chi tiết về quy trình xác minh chữ ký APK, hãy xem mục Xác minh của Lược đồ chữ ký APK v2.