Ký ứng dụng Android: Cách thức hoạt động và tại sao nó quan trọng
Mỗi khi bạn cài đặt một ứng dụng trên điện thoại Android, một quá trình kiểm tra bảo mật thầm lặng nhưng quan trọng sẽ diễn ra ở chế độ nền. Điện thoại của bạn xác minh chữ ký số của gói APK. Cái bắt tay bằng mật mã này là thứ ngăn chặn tin tặc độc hại "đầu độc" ứng dụng của bạn bằng phần mềm độc hại đồng thời đảm bảo các nhà phát triển có thể đưa ra các bản cập nhật mà không làm mất danh tính của họ.
Nếu bạn viết ứng dụng, việc ký tên là điều bạn chỉ cần làm đúng; nếu bạn chỉ muốn tìm hiểu về Android thì đây là một trong những phần khiến bạn hài lòng nhất khi hiểu được hệ thống. Dù thế nào đi nữa, cách ký ứng dụng hoạt động cũng đáng để bạn dành thời gian. Dưới đây chúng tôi sẽ giới thiệu về công nghệ, cách các chương trình ký kết phát triển và cách bạn có thể xác minh chứng chỉ theo cách thủ công trực tuyến.
- Tại sao mọi ứng dụng Android đều phải được ký và mật mã nào có liên quan (RSA / EC).
- Sự khác biệt giữa lược đồ chữ ký v1 (JAR), v2, v3 và v4 và lược đồ chữ ký nào mà ứng dụng của bạn nên sử dụng hôm nay.
- Cách Android quyết định có cho phép cập nhật hay không dựa trên tính liên tục của chữ ký.
- Cách xoay vòng khóa cho phép nhà phát triển thay đổi khóa ký của họ mà không làm hỏng các bản cài đặt hiện có.
- Cách tự xác minh chữ ký của bất kỳ APK nào, trên dòng lệnh hoặc bằng trình xác minh dựa trên trình duyệt của chúng tôi.
Ký ứng dụng là gì?
Về cốt lõi, ký ứng dụng là một quá trình trong đó nhà phát triển sử dụng Khóa riêng để tạo khối chữ ký cho các tệp ứng dụng của họ. Khóa công khai tương ứng sau đó được nhúng vào APK trong thư mục META-INF. Khi điện thoại của bạn cố cài đặt ứng dụng, điện thoại sẽ sử dụng khóa chung để kiểm tra xem chữ ký có khớp với nội dung của tệp hay không.
Điều này cung cấp hai thuộc tính chính:
- Tính bất biến: Nếu một byte mã của ứng dụng bị thay đổi (ví dụ: bởi một Trojan), chữ ký sẽ không còn khớp với tệp và Android sẽ từ chối cài đặt nó.
- Bằng chứng nhận dạng: Nếu một ứng dụng cố gắng cập nhật ứng dụng hiện có thì chữ ký của chúng phải khớp. Đây là lý do tại sao bạn không thể cài đặt ứng dụng Facebook giả mạo thay vì ứng dụng chính thức.
Sự phát triển của các kế hoạch ký kết
Google đã liên tục nâng cấp cơ chế ký để cải thiện cả tốc độ lẫn tính bảo mật:
- V1 (Ký Jar): Ký các tệp riêng lẻ trong APK (ZIP). Việc này chậm vì hệ điều hành phải giải nén và kiểm tra từng tệp. Nó cũng dễ bị tổn thương trước một số thao tác ZIP nhất định.
- V2 (Lược đồ chữ ký APK): Ký toàn bộ khối nhị phân của APK. Nó không yêu cầu giải nén để xác minh, khiến nó cực kỳ nhanh chóng. Nó được giới thiệu trong Android 7.0 (Nougat).
- V3 (Xoay phím): Mở rộng V2 bằng cách thêm một "dòng" phím. Nó cho phép nhà phát triển chứng minh rằng khóa mới là khóa kế thừa được ủy quyền cho khóa cũ hơn. Được giới thiệu trong Android 9.0 (Pie).
- V4 (Ký trực tuyến): Được thiết kế đặc biệt cho các cài đặt tăng dần, cho phép xác minh ứng dụng trong khi chúng vẫn đang được tải xuống qua USB hoặc Wi-Fi.
Tại sao chứng chỉ lại quan trọng đối với việc tải bên
Khi bạn tải xuống APK từ nguồn không chính thức, Băm chứng chỉ là người bạn tốt nhất của bạn. Dấu vân tay chứng chỉ (chẳng hạn như hàm băm SHA-256) xác định duy nhất khóa ký của nhà phát triển. Mỗi ứng dụng giữ cùng một khóa ký trên tất cả các bản cập nhật của ứng dụng đó, vì vậy bạn có thể so sánh dấu vân tay của APK với giá trị đã công bố của nhà phát triển để xác nhận đó là chính hãng.
Nếu bạn nghi ngờ APK là giả mạo, bạn nên chạy APK đó thông qua Trình xác minh APK trực tuyến của chúng tôi. Công cụ của chúng tôi sẽ cho bạn thấy:
- Tên thường gọi (CN) của người ký (ví dụ: "Android").
- Thời hạn hiệu lực của chứng chỉ.
- Dấu vân tay SHA-1/SHA-256.
Cách Android xác minh chữ ký khi cài đặt
Bước "xác minh chứng chỉ" thường bị bỏ qua đến mức bạn cần tìm hiểu xem hệ điều hành thực sự làm gì khi bạn nhấn vào APK và Android quyết định có cài đặt nó hay không:
- Mở APK dưới dạng ZIP và tìm khối ký. Đối với chữ ký v2/v3 là khối có cấu trúc ngay trước thư mục trung tâm; đối với sơ đồ v1 kế thừa, đó là nội dung của META-INF/*.RSA, *.DSA hoặc *.EC.
- Tính toán các bản tóm tắt SHA-256 của mọi byte khác của APK. Khối ký được loại trừ khỏi bản tóm tắt của chính nó; mọi thứ khác được băm theo từng khối xác định.
- Xác minh thông báo của từng đoạn so với thông báo được ghi trong khối ký. Nếu ngay cả một byte đơn lẻ đã bị thay đổi kể từ khi nhà phát triển ký tệp, thì các bản tóm tắt sẽ không khớp và quá trình cài đặt bị từ chối với lỗi chung "Ứng dụng chưa được cài đặt".
- Xác minh khối ký được tạo bằng khóa riêng của chứng chỉ. Khóa chung của chứng chỉ được sử dụng để kiểm tra chữ ký mật mã trong khối. Kiểm tra thành công có nghĩa là người đã ký vào tệp sở hữu khóa riêng được ghép nối với chứng chỉ này.
- So sánh dấu vân tay chứng chỉ với bất kỳ bản cài đặt hiện có nào có cùng tên gói. Nếu gói đã được cài đặt và APK mới được ký bằng chứng chỉ khác thì quá trình cài đặt sẽ bị từ chối với INSTALL_FAILED_UPDATE_INCOMPATIBLE. Đây là biện pháp bảo vệ chống mạo danh chính của HĐH: kẻ độc hại không thể thay thế ứng dụng ngân hàng của bạn bằng bản sao của chính chúng trừ khi chúng cũng đánh cắp khóa ký của ngân hàng.
Không điều nào trong số này chứng tỏ nhà phát triển là đáng tin cậy, chỉ có điều rằng tệp bạn sắp cài đặt có byte giống hệt với những gì họ đã ký và không có bên nào khác giả mạo nó. Tin tưởng vào nhà phát triển là một quyết định riêng biệt và là quyết định bạn đưa ra bằng cách quyết định bạn cài đặt từ nguồn nào.
"Chữ ký không khớp" thực sự có nghĩa là gì
Điều ngạc nhiên phổ biến nhất mà mọi người gặp phải khi tải sideload là lỗi "chữ ký không khớp" khi cập nhật. Đây là những gì đang thực sự xảy ra:
- Bạn đã cài đặt Ứng dụng X phiên bản 1.0 từ Cửa hàng Play.
- Bạn tải xuống Ứng dụng X phiên bản 1.1 từ nguồn không phải Play.
- Hệ điều hành thấy cùng tên gói (com.example.app nhưng APK được ký bằng một chứng chỉ khác (khóa ký của nguồn bên, không phải của nhà xuất bản ban đầu)). Nó từ chối cài đặt.
Hai cách điều này xảy ra trong thực tế:
- APK của bên thứ ba là thực sự từ một nhà xuất bản khác, ví dụ: bản sao "đã sửa đổi" hoặc "đã vá". Từ chối cài đặt là hành vi đúng đắn; cài đặt nó có nghĩa là tin tưởng một người lạ có cùng dữ liệu mà ứng dụng ngân hàng của bạn đã chạm vào.
- APK của bên thứ ba là tải lên lại APK chính thức, nhưng hệ thống Ký ứng dụng Play của Google ký tên tải xuống của mỗi người dùng bằng trình bao bọc khóa tải lên của người dùng. Hai thiết bị đôi khi có thể thấy dữ liệu chữ ký hơi khác nhau cho cùng một phiên bản ứng dụng khái niệm. Trong trường hợp đó, dấu vân tay chứng chỉ ở gốc vẫn khớp; bạn có thể xác minh bằng Trình xác minh APK của chúng tôi.
Nếu dấu vân tay chứng chỉ thực sự khác với bản cài đặt hiện tại của bạn, cách duy nhất tiếp theo là gỡ cài đặt bản sao hiện tại trước (mất dữ liệu) trước khi tải bản thay thế, không bao giờ tắt xác minh chữ ký.
Tạo khóa ký của riêng bạn (Dành cho nhà phát triển)
Nếu bạn đang xây dựng ứng dụng Android, cuối cùng bạn sẽ cần phải ký các bản dựng của riêng mình. Lệnh một dòng tiêu chuẩn sử dụng keytool từ SDK Java là:
keytool -genkeypair -v \
-keystore my-release.keystore \
-alias my-app -keyalg RSA -keysize 2048 \
-validity 10000
Hai điều cần biết:
- hiệu lực quan trọng: 10000 ngày (khoảng 27 năm) là giá trị thông thường vì HĐH coi các bản cập nhật được ký bằng khóa gần hết hạn hoặc hết hạn là bị xâm phạm. Tạo khóa tồn tại lâu dài một lần và bảo vệ nó.
- Sau khi xuất bản, bạn không thể dễ dàng chuyển đổi khóa. Sơ đồ ký v3 bổ sung khóa sự xoay vòng như một tính năng rõ ràng: chứng chỉ cũ "ban phước" cho chứng chỉ mới thông qua bằng chứng được lưu trữ, cho phép HĐH chấp nhận các bản cập nhật từ khóa mới trong khi vẫn duy trì tính liên tục của danh tính. Không có v3, mất khóa gốc đồng nghĩa với việc mất tất cả các bản cài đặt hiện có.
Đối với các bản dựng thử nghiệm được tải sẵn, kho khóa gỡ lỗi không dấu là phù hợp; để sản xuất, hãy sử dụng kho khóa có giá trị lâu dài được bảo vệ bằng mật khẩu được lưu trữ trong bản sao lưu ngoại tuyến.
Xác minh danh tính ứng dụng như một chuyên gia
Đừng tin tưởng vào tên tập tin chung chung. Kiểm tra trung tâm mật mã của APK của bạn trong vài giây.
Xác minh chứng chỉ ngay bây giờNhững cạm bẫy ký kết phổ biến
- Chứng chỉ tự ký: Hầu hết các ứng dụng Android đều tự ký. Không giống như SSL dành cho trang web, không có cơ quan trung ương nào cho việc ký ứng dụng Android. Bạn phải tin tưởng trực tiếp vào nhà phát triển.
- Các ứng dụng Chứng chỉ gỡ lỗi: được xây dựng để thử nghiệm sử dụng khóa "gỡ lỗi" chung. Những ứng dụng này không bao giờ được phát hành ra công chúng và bị chặn bởi nhiều bộ lọc bảo mật.
- Mất chìa khóa: Nếu nhà phát triển mất kho khóa riêng, họ có thể không bao giờ cập nhật lại ứng dụng của mình. Họ sẽ phải phát hành ứng dụng "Mới" với tên gói khác.
Chọn lược đồ ký phù hợp cho SDK mục tiêu của bạn
Việc ký ứng dụng lặng lẽ củng cố rất nhiều tính bảo mật của Android. Sau khi nhấp chuột vào mối quan hệ khóa riêng tư/chung, bạn có thể đánh giá ứng dụng đã được tải trước dựa trên giá trị của nó và xác nhận rằng những gì bạn đang cài đặt không bị thay đổi kể từ khi nhà phát triển ký vào đó. Để biết thêm về nội bộ Android, hãy xem hướng dẫn định dạng XAPK của chúng tôi.