Thứ Ba, 18 tháng 10, 2011

P3: Tìm hiểu về bảo mật trên Android - Các trường hợp sử dụng của nhà phát triển

III. Các trường hợp sử dụng của nhà phát triển

Hình 3 -  Minh họa một số các trường hợp sử dụng (use case) có liên quan đến bảo mật được tìm thấy khi bạn phát triển các ứng dụng Android.

Hình 3. Các lĩnh vực bảo mật hiện có khi lập trình các ứng dụng Android

Việc ký ứng dụng hoặc mã là quá trình tạo các khóa riêng và khóa công khai và các chứng chỉ khóa-công khai, ký và tối ưu hóa ứng dụng.

Các quyền hạn là một cơ chế bảo mật của nền tảng Android cho phép hoặc hạn chế ứng dụng truy cập vào các API và các tài nguyên hạn chế. Theo mặc định, các ứng dụng Android không được cấp các quyền hạn nào, làm cho chúng an toàn nhờ không cho phép chúng truy cập vào các API hoặc các tài nguyên được bảo vệ trên thiết bị. Các quyền hạn phải cần thiết, các quyền hạn tùy chỉnh được định nghĩa và các nhà cung cấp nội dung và tệp được bảo vệ. Hãy chắc chắn rằng bạn kiểm tra, tuân thủ và thu hồi các quyền hạn trong thời gian chạy.

Tiếp theo, hãy xem xét từng lĩnh vực bảo mật cụ thể hơn.

1. Việc ký ứng dụng

Tất cả các ứng dụng Android phải được ký. Việc ký ứng dụng hoặc mã là quá trình ký số một ứng dụng cụ thể bằng cách sử dụng một khóa riêng để:

  • Xác định tác giả của mã.
  • Phát hiện ra nếu các ứng dụng đã thay đổi.
  • Xây dựng sự tin cậy giữa các ứng dụng.

Căn cứ vào mối quan hệ tin cậy này, các ứng dụng có thể chia sẻ mã và dữ liệu theo cách an toàn.

Các ứng dụng đã ký bằng cách sử dụng cùng một chữ ký số có thể cho phép lẫn nhau các quyền hạn khác để truy cập các API dựa trên chữ ký và cũng có thể chạy trong cùng một tiến trình nếu chúng chia sẻ các ID người dùng, cho phép truy cập vào mã và dữ liệu của nhau.

Việc ký ứng dụng bắt đầu bằng cách tạo ra một cặp khóa riêng và khóa công khai và một chứng chỉ khóa-công khai có liên quan, cũng được biết là một chứng chỉ khoá-công khai.

Khi làm việc với các ứng dụng Android, bạn có thể xây dựng các ứng dụng trong chế độ chế độ gỡ lỗi (debug) và chế độ phát hành (release-mode):

  • Các ứng dụng được xây dựng khi sử dụng các công cụ xây dựng Android (dòng lệnh và ADT của Eclipse) được tự động ký bằng cách sử dụng một khóa riêng gỡ lỗi; các ứng dụng này được gọi là các ứng dụng chế độ gỡ lỗi. Các ứng dụng chế độ gỡ lỗi được sử dụng để thử nghiệm và không nên được phân phối. Lưu ý rằng các ứng dụng chưa được ký hoặc các ứng dụng đã ký bằng cách sử dụng một khóa riêng gỡ lỗi không thể được phân phối thông qua thị trường Android.
  • Khi bạn đã sẵn sàng để phát hành ứng dụng của mình, bạn phải xây dựng một phiên bản chế độ phát hành của nó, có nghĩa là ký ứng dụng đó bằng khóa riêng của bạn.

Việc ký mã trong Android được thực hiện theo một cách đơn giản hơn nhiều so với các nền tảng di động khác. Trong Android, chứng chỉ này có thể tự ký, có nghĩa là, không cần phải có người có thẩm quyền chứng nhận. Cách tiếp cận này làm đơn giản hóa quá trình xuất bản và các chi phí liên quan.

Tiếp theo, tôi trình bày cách ký các ứng dụng Android thủ công từ dòng lệnh và ký bằng cách sử dụng ADT của Eclipse. Tôi không trình bày một cách tiếp cận thứ ba, sử dụng Ant, trong bài viết này. 

1.1. Tạo thủ công các khóa riêng và khóa công khai và chứng chỉ khóa-công khai

Hãy nhớ rằng các ứng dụng chế độ gỡ lỗi được ký tự động bằng các công cụ xây dựng khi sử dụng khóa/chứng chỉ gỡ lỗi. Để ký một ứng dụng chế độ phát hành, trước tiên bạn phải tạo cặp khóa riêng và khóa công khai và chứng chỉ khóa-công khai. Bạn có thể ký ứng dụng của bạn bằng thủ công hoặc bằng cách sử dụng ADT của Eclipse. Trong cả hai cách tiếp cận, khóa của công cụ khóa của JDK (Java Developer Kit – Bộ dụng cụ của nhà phát triển Java) và tiện ích quản lý chứng chỉ được sử dụng.

Để tạo thủ công thông tin khóa riêng và khóa công khai, hãy sử dụng keytool từ dòng lệnh, như trong Liệt kê 1.

Liệt kê 1. Sử dụng keytool để tạo các khóa riêng/khóa công khai và chứng chỉ

keytool -genkey -v -alias <alias_name> -keystore <keystore.name>
-keyalg RSA -keysize 2048 -validity <number of days>

Lưu ý: Liệt kê 1 giả định JDK đã được cài đặt trên máy tính của bạn và đường dẫn JAVA_HOME được xác định đúng để trỏ đến thư mục JDK của bạn (xem phần Tài nguyên với các thông tin tải về và thiết lập).

Trong Liệt kê 1:
  • -genkey biểu thị một mục nhập cặp khóa riêng và khóa công khai, cũng như một chuỗi của chứng chỉ X.509 v1 có một phần tử, tự ký bao gồm khóa công khai được tạo ra. 
  • -v biểu thị chế độ dài dòng. 
  • -alias là bí danh để sử dụng cho mục nhập kho khóa (keystore) để lưu trữ khóa riêng và chứng chỉ được tạo. 
  • -keystore cho biết tên của kho khóa muốn sử dụng. 
  • -keyalg là thuật toán sử dụng để tạo ra cặp khoá. 
  • -keysize là kích thước của khóa để tạo ra, ở đây giá trị mặc định là 1024, nhưng khuyến khích sử dụng là 2048. 
  • -validity là thời hạn hiệu lực theo ngày; khuyến cáo sử dụng một giá trị lớn hơn 1000.

Lưu ý: Sau khi bạn tạo ra các khóa của mình, điều rất quan trọng là bạn bảo vệ khóa riêng của bạn. Không chia sẻ khóa riêng và không chỉ rõ nó trên dòng lệnh hoặc trong các kịch bản lệnh; lưu ý rằng công cụ khóa (keytool) và trình ký jar (jarsigner) nhắc nhở mật khẩu. Về điều này và các thủ thuật khác, xem "Bảo vệ khóa riêng của bạn" từ trang web của các nhà phát triển Android (xem phần Tài nguyên để có một liên kết).

Keytool nhắc gõ tên và họ, tổ chức, thành phố, bang, quốc gia của bạn để từ đó tạo ra một Tên Nhận biết X.500 (xem phần Tài nguyên để biết thêm thông tin) và các mật khẩu để bảo vệ khóa riêng và để tự bảo vệ kho khóa.

Với thời hạn hiệu lực, đảm bảo chắc chắn sử dụng một thời hạn vượt quá vòng đời dự kiến của ứng dụng và các ứng dụng liên quan. Nếu bạn đang xuất bản ứng dụng của mình trên thị trường Android, thời hạn phải kết thúc sau 22 tháng 10 năm 2033; nếu không, bạn không thể tải nó lên. Ngoài ra, các chứng chỉ có vòng đời lâu dài làm cho bạn dễ dàng hơn khi nâng cấp các ứng dụng của bạn. May mắn thay, thị trường Android đòi hỏi các chứng chỉ có vòng đời lâu dài để giúp bạn tránh các tình huống như vậy.

1.2. Ký thủ công ứng dụng của bạn

Tiếp theo, ký ứng dụng chưa ký bằng cách sử dụng công cụ jarsigner, một phần của JDK:
jarsigner -verbose -keystore <keystore.name> <my_application.apk> <alias_name>

Trong đoạn mã trên:
  • -verbose cho biết chế độ dài. 
  • -keystore cho biết tên của kho khóa sử dụng. 
  • Tiếp theo là tên của ứng dụng (.apk) và cuối cùng là bí danh để sử dụng cho khóa riêng.
  • Jarsigner nhắc nhập mật khẩu để sử dụng kho khóa và khóa riêng.

Các ứng dụng có thể được ký nhiều lần bằng cách sử dụng các khóa khác nhau và các ứng dụng đã ký với cùng một khóa riêng có thể thiết lập một mối quan hệ tin cậy với nhau và có thể chạy trong cùng một tiến trình và chia sẻ mã và dữ liệu.

1.3. Tối ưu hóa ứng dụng của bạn bằng thủ công

Bước cuối cùng trong quá trình ký là tối ưu hóa ứng dụng này để cho các ranh giới của dữ liệu được sắp xếp trong bộ nhớ với sự bắt đầu của tệp, một kỹ thuật giúp cải thiện hiệu năng thời gian chạy và sử dụng bộ nhớ.
Để sắp xếp ứng dụng, sử dụngzipalign:

zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk

Trong đoạn mã trên:

  • -v biểu thị kết quả đầu ra dài. 
  • Số 4 cho biết sử dụng sự sắp xếp bốn-byte (luôn luôn sử dụng bốn byte). 
  • Đối số tiếp theo là tên tệp của ứng dụng đầu vào đã ký (.apk), ứng dụng đó phải được ký bằng khóa riêng của bạn và đối số cuối cùng là tên tệp kết quả đầu ra; nếu ghi đè một ứng dụng hiện có, hãy thêm vào -f.

1.4. Kiểm tra thủ công xem ứng dụng đã được ký chưa

Để kiểm tra xem ứng dụng được ký chưa, sử dụng Jarsigner, lúc này dùng cờ -verify:

jarsigner -verify -verbose -certs my_application.apk

Trong đoạn mã trên:
  • -verify biểu thị việc kiểm tra ứng dụng.
  • -verbose biểu thị chế độ dài dòng.
  • -certs biểu thị sẽ hiển thị trường CN của những người đã tạo ra khóa và đối số cuối cùng là tên của gói ứng dụng Android cần kiểm tra.

Lưu ý: Nếu CN là "Android Debug", có nghĩa là ứng dụng này đã được ký bằng cách sử dụng khóa gỡ lỗi và nó không thể được xuất bản; hãy nhớ sử dụng một khóa riêng nếu kế hoạch của bạn là xuất bản ứng dụng của mình trên Thị trường Android.

Đúng là bạn vừa thấy cách tạo thủ công các khóa riêng và khóa công khai và cách ký và tối ưu hóa ứng dụng này. Tiếp theo, hãy xem xét cách sử dụng ADT (Các công cụ phát triển Android) của Eclipse để tự động tạo các khóa riêng và khóa công khai và cách ký và tối ưu hóa ứng dụng cho bạn.

Source: Ibm.com

Không có nhận xét nào:

Đăng nhận xét