2013-12-09 14 views
6

Tôi đang điều tra bằng cách sử dụng Keystore được bảo mật/cải tiến được giới thiệu trong Android 4.3.Android Keystore, giá trị bảo mật của khóa

Tôi muốn lưu trữ khóa mã hóa bên trong kho khóa này, khóa này được sử dụng để mã hóa một db sqllite và các giá trị chứa trong các tùy chọn được chia sẻ của tôi.

Khi tôi hãy nhìn vào các mẫu KeyStore trong SDK tôi thấy như sau:

public static final String ALIAS = "my_key" 

Nếu ai đó sẽ có thể dịch ngược mã của tôi họ sẽ có thể nhìn thấy bí danh cleartext (= phím để lấy khóa mã hóa từ kho khóa) và do đó họ có thể lấy tham chiếu đến khóa mã hóa của tôi. Làm thế nào tôi có thể quản lý ALIAS một cách bảo mật? hoặc tôi đang thiếu điểm ở đây?

Trả lời

1

Bí danh không phải là thông tin nhạy cảm. Mỗi keystore được liên kết với một mật khẩu và mỗi khóa có mật khẩu riêng (tùy chọn) của nó. Đó là những giá trị phải được giữ an toàn.

Không có mật khẩu, kẻ tấn công không thể đọc tài liệu chính của bạn mặc dù biết bí danh.

+0

Có thể chỉ ra đó là mật khẩu không? Tôi hiện đang xem KeyStoreHelper.java từ các mẫu. Tôi có thể thấy có một đối tượng KeyPair được tạo ra từ KeyPairGenerator. Đối tượng này có chứa khóa riêng và khóa công khai không? Nó sẽ có thể cho một kẻ tấn công để đóng gói lại mã của tôi và nhận được acces để các phím? –

+1

@ user2987274 Các mật khẩu được sử dụng cùng với lớp ['KeyStore'] (http://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html) trong' load', phương thức 'getKey' và' setKeyEntry'. Khóa không có mật khẩu được liên kết cho đến khi bạn lưu nó vào kho khóa. Vì vậy, một đối tượng 'KeyPair' mới được tạo ra không có mật khẩu cho đến khi bạn duy trì nó trong kho khóa. –

+0

Chỉ để chắc chắn. Một người nào đó sẽ dịch ngược mã của tôi và nhận được một tham chiếu đến ALIAS sẽ không thể đóng gói lại mã và nhận được một tham chiếu đến KeyPair do đó nó không được tiếp tục tồn tại?hoặc cái gì khác ngăn cản người đó để có được một tham chiếu đến KeyPair chính xác? –

7

Câu trả lời dưới đây dành cho 4.3+. Có những thay đổi lớn đối với KeyStore & các lớp KeyChain trong bản phát hành này. Xem here để biết thêm thông tin

Keystore quyền truy cập bị giới hạn bởi UID - ứng dụng của bạn được cấp UID khi cài đặt.

Đây là những gì ngăn các ứng dụng/quy trình khác truy cập vào cặp khóa/khóa riêng của bạn. Keystore deamon sẽ thực thi điều này.

Tùy chọn này có thể yêu cầu một mã pin thiết bị để mã hóa bổ sung. Xem http://developer.android.com/reference/android/security/KeyPairGeneratorSpec.Builder.html#setEncryptionRequired()

Toàn bộ điểm sử dụng kho khóa phần mềm/phần cứng là để giải quyết tình huống bạn mô tả - bất kỳ dữ liệu mã cứng nào trong ứng dụng đều có thể đọc được khi giải mã để nó không an toàn.

@Duncans trả lời có vẻ như bạn cần giữ mật khẩu. Tôi khuyên bạn nên tạo cặp khóa bằng cách sử dụng kho khóa và sau đó sử dụng khóa này để mã hóa khóa AES mà bạn có thể sử dụng để mã hóa mọi thứ bạn muốn (nhanh hơn nhiều so với sử dụng khóa RSA)

Bạn có thể sử dụng kho khóa phần cứng/bộ sưu tập của mình khóa cá nhân như keyStore.getEntry(alias, null); và không chuyển bất kỳ loại mật khẩu nào.

Xem SecretKeyWrapper.java để biết ví dụ về điều này

+0

vậy giải pháp cho các phiên bản Android dưới 4.3 như ICS là gì? – NickF

+0

Vâng câu hỏi là về KeyStore được giới thiệu trong 4.3 nên không thực sự là một song song trực tiếp cho <4.3! Nếu bạn muốn sử dụng các khóa bí mật trước đó thì bạn sẽ cần phải bao gồm đầu vào của người dùng và một số PBKDF. Điều đó nói rằng, <4.3 là khoảng ~ 25% atm vì vậy nếu bạn có yêu cầu để có các khóa phần cứng được hỗ trợ chỉ hỗ trợ 4.3+ – Dori

Các vấn đề liên quan