Ký ứng dụng cho phép các nhà phát triển xác định tác giả của ứng dụng và cập nhật ứng dụng của họ 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ó chữ ký của nhà phát triển . Các ứng dụng cố gắng cài đặt mà không được 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, việc ký ứng dụng là cầu nối giữa niềm tin mà Google dành cho nhà phát triển và niềm tin mà nhà phát triển dành cho ứng dụng của họ. Các nhà phát triển biết ứng dụng của họ được cung cấp, chưa sửa đổi, cho thiết bị Android; và các nhà phát triển có thể phải chịu trách nhiệm về hành vi của ứng dụng của họ.
Trên Android, ký ứng dụng là bước đầu tiên để đặt ứng dụng vào Hộp cát ứng dụng của nó. Chứng chỉ ứng dụng đã ký xác định ID 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 dưới các ID người dùng khác nhau. Việc ký ứng dụng đảm bảo rằng một ứng dụng không thể truy cập 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ý chính xác với chứng chỉ có trong APK đó. Nếu chứng chỉ (hay chính xác hơn là khóa chung trong chứng chỉ) khớp với khóa được sử dụng để ký bất kỳ APK nào khác trên thiết bị thì APK mới có tùy chọn chỉ định trong tệp kê khai rằng nó sẽ chia sẻ UID với APK khác tương tự -các APK đã ký.
Các ứng dụng có thể được ký bởi bên thứ ba (OEM, nhà điều hành, thị trường thay thế) 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 cho phép từ bên ngoài. Đơn đăng ký không cần phải có chữ ký của cơ quan trung ương. Android hiện không thực hiện xác minh CA cho chứng chỉ ứng dụng.
Các ứng dụng cũng có thể khai báo các 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 khóa trong khi vẫn duy trì các UID và Hộp cát ứng dụng riêng biệt. Cho phép mối quan hệ chặt chẽ hơn với Hộp cát ứng dụng dùng chung bằng cách sử dụng tính năng UID dùng chung trong đó hai hoặc nhiều ứng dụng được ký bằng cùng một khóa nhà phát triển có thể khai báo UID dùng chung trong bảng kê khai của chúng.
Kế hoạch ký APK
Android hỗ trợ ba chương trình ký ứng dụng:
- lược đồ v1: dựa trên ký JAR
- lược đồ v2: Lược đồ chữ ký APK v2 , được giới thiệu trong Android 7.0.
- lược đồ v3: Lược đồ chữ ký APK v3 , được giới thiệu trong Android 9.
Để có khả năng tương thích tối đa, hãy ký các ứng dụng với tất cả các lược đồ, đầu tiên là v1, sau đó là v2 và sau đó là v3. Android 7.0+ và các thiết bị mới hơn sẽ cài đặt ứng dụng được ký bằng lược đồ v2+ 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ũ hơn bỏ qua chữ ký v2+ và do đó cần các ứng dụng chứa chữ ký v1.
Ký JAR (sơ đồ v1)
Việc ký APK ngay từ đầu đã là một phần của Android. Nó dựa trên JAR đã ký . Để biết chi tiết về cách sử dụng lược đồ này, hãy xem tài liệu Android Studio về Ký ứng dụng của bạn .
Chữ ký v1 không bảo vệ một số phần của 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) và sau đó loại bỏ dữ liệu không có chữ ký. Điều này cung cấp một bề mặt tấn công đáng kể. Hơn nữa, trình xác minh APK phải giải nén tất cả các mục đã nén, tiêu 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 đã giới thiệu Lược đồ chữ ký APK v2.
Lược đồ chữ ký APK v2 & v3 (sơ đồ v2+)
Các thiết bị chạy Android 7.0 trở lên hỗ trợ lược đồ chữ ký APK v2 (sơ đồ v2) trở lên. (Lược đồ v2 đã được cập nhật lên v3 trong Android 9 để bao gồm thông tin bổ sung trong khối ký, nhưng mặt khác thì hoạt động tương tự.) Nội dung của APK được băm và ký, sau đó Khối ký APK kết quả sẽ được chèn vào APK. Để biết chi tiết về cách áp dụng lược đồ v2+ cho một ứng dụng, hãy xem Lược đồ chữ ký APK v2 .
Trong quá trình xác thực, lược đồ v2+ xử lý tệp APK dưới dạng blob và thực hiện kiểm tra chữ ký trên toàn bộ tệp. Mọi sửa đổi đối với APK, bao gồm sửa đổi siêu dữ liệu ZIP, sẽ 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 loại sửa đổi trái phép hơn.
Định dạng mới tương thích ngược, do đó, các APK được ký bằng định dạng chữ ký mới có thể được cài đặt trên các thiết bị Android cũ hơn (chỉ cần bỏ qua dữ liệu bổ sung được thêm vào APK), miễn là các APK này cũng được ký v1.
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+. Mọi sửa đổi đối với APK bên ngoài Khối ký APK sẽ làm mất hiệu lực chữ ký v2+ của APK. Các APK bị loại bỏ chữ ký v2+ cũng bị từ chối vì chữ ký v1 của chúng chỉ định rằng APK đã được ký v2, điều này khiến Android 7.0 trở lên từ chối xác minh APK bằng chữ ký v1 của chúng.
Để biết chi tiết về quy trình xác minh chữ ký APK, hãy xem phần Xác minh của Lược đồ chữ ký APK v2.