Ký ứng dụng Android: Cách thức hoạt động và tại sao nó quan trọng

A brass key on a smartphone showing a verified checkmark, illustrating Android app signing

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.

Những gì bạn sẽ học được trong bài viết này
  • 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:

  1. 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ó.
  2. 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:

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:

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:

  1. 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.
  2. 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.
  3. 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".
  4. 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.
  5. 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:

Hai cách điều này xảy ra trong thực tế:

  1. 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.
  2. 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:

Đố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

  1. 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.
  2. 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.
  3. 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.

Được thiết kế và ghi lại bởi Mst Shaefale Nhà phát triển chính và Kiến trúc sư gói Android • Đã xác minh trên Android 12–15

Bà Shaefale duy trì việc hợp nhất XAPK/APKS phía máy khách, trình phân tích cú pháp tệp kê khai nhị phân và các công cụ ký APK v1+v2 tại xapktoapk.com. Phát hiện lệnh đã lỗi thời hoặc thay đổi hệ điều hành? Gửi một ghi chú biên tập.