Cách an toàn để giữ khóa cá nhân trong ứng dụng Android
Cách thích hợp nhất để lưu trữ khóa cá nhân để ký mã vạch trong ứng dụng Android là gì? Có lẽ hầu hết các chuyên gia ở đây sẽ nói - chỉ cần không làm điều đó, vì nó không an toàn ...
Nhưng tôi muốn hiểu mức độ "không an toàn" và rủi ro đối với các giải pháp được đề xuất.
PS Commodity Smartphones để giả định.
PS chúng tôi có thể trao đổi khóa không quá thường xuyên. API phụ trợ ứng dụng có thể được thiết kế khi cần thiết. Tuy nhiên, kết nối Internet vĩnh viễn và các biến thể của việc ký ở phía máy chủ là không thể.
Trả lời
Tất cả các thiết bị Android 7+ đều được trang bị Môi trường thực thi tin cậy (TEE) như một yêu cầu bắt buộc để cấp phép ứng dụng của Google. Đó là một kho khóa được hỗ trợ bởi phần cứng cung cấp khả năng lưu trữ và xử lý dữ liệu riêng biệt cho các đốm màu mật mã. Trong các SoC Qualcomm Snapdragon và Samsung Exynos, TEE dựa trên ARM Trustzone . Một số thiết bị như Pixel và iPhone có TEE riêng (chip Titan M của Google và chip T2 của Apple) được gọi là hộp mạnh . TEE rời rạc tách biệt hơn so với ARM Trustzone và không phụ thuộc vào SoC được sử dụng.
Bạn có thể sử dụng các API của nhà cung cấp kho khóa android để
tạo khóa cá nhân
tạo khóa bí mật
ký và xác minh dữ liệu
nhập khóa mã hóa
xác thực người dùng để sử dụng chính
Xác minh các cặp khóa được hỗ trợ bởi phần cứng bằng Chứng thực Khóa
Mọi khóa được lưu trữ trong kho khóa có thể có các thông số sau được đặt:
- bí danh - được sử dụng để xác định khóa.
- kích thước khóa (API 23).
- mục đích - mã hóa / giải mã (API 23).
- chế độ mã hóa, thuật toán và đệm (API 23).
- khóa có nên được xác thực với kho khóa trước khi sử dụng không? (API 23).
- khoảng thời gian mà khóa có thể được sử dụng sau khi xác thực thành công (API 23).
- khóa có nên bị vô hiệu khi đăng ký dấu vân tay mới không? (API 24)
- Kho khóa có nên yêu cầu mở khóa màn hình trước khi thực hiện các thao tác mật mã không? (API 28)
- một khóa có nên được bảo vệ bằng mô-đun bảo mật phần cứng StrongBox không? (API 28)
Bạn cũng có thể sử dụng nó để mã hóa mã thông báo xác thực để đăng nhập, lưu trữ mật khẩu và mã hóa khóa mã hóa dữ liệu nhạy cảm lớn của ứng dụng của bạn.
"khóa có nên được bảo vệ bởi mô-đun bảo mật phần cứng StrongBox không? (API 28)" dường như rất quan trọng về mức độ bảo mật tổng thể.
Đối với Android 9+, các ứng dụng có thể đặt tùy chọn lưu trữ khóa trong hộp mạnh bằng cách gọi setIsStrongBoxBacked(true). Nếu nó ném StrongBoxUnavailableExceptionthì các ứng dụng sẽ trở lại kho khóa được hỗ trợ bởi phần cứng. Strongbox miễn nhiễm với các lỗ hổng kênh bên quan trọng trong CPU của SoC có thể ảnh hưởng đến kho khóa được phần cứng hỗ trợ. Bảo mật của kho khóa được hỗ trợ bởi phần cứng rơi vào tay nhà sản xuất chip SoC: Lỗ hổng trong kho di động Secure World của Qualcomm bị rò rỉ dữ liệu nhạy cảm .
Các phương pháp hay nhất về bảo mật phần cứng khuyên dùng StrongBox Keymaster . Mô-đun chứa những thứ sau:
- CPU riêng của nó
- Lưu trữ an toàn
- Một trình tạo số ngẫu nhiên thực sự.
- Các cơ chế bổ sung để chống lại việc giả mạo gói và tải ứng dụng trái phép.
Hệ thống kho khóa Android
Xác thực Kho khóa Android của bạn an toàn như thế nào? (Đã lỗi thời, được xuất bản trước khi phát hành android 10)