2011-10-18 37 views
13

Tôi muốn ẩn một số dữ liệu được người dùng nhập vào trong điện thoại của người dùng được mã hóa. Theo như tôi biết tôi có thể mã hóa/giải mã dữ liệu bằng cách sử dụng giá trị khóa/hạt giống, nhưng nếu tôi ẩn giá trị khóa trong mã, tôi biết nó có thể được tìm thấy bằng cách nào đó (ví dụ: giải mã mã Java).Ẩn khóa mã hóa trong Ứng dụng Android

Bạn có bất kỳ đề xuất nào để làm cho quy trình khó hơn không?

Trả lời

6

Không thể ẩn khóa trong ứng dụng sao cho một hacker có tài nguyên sẽ không thể kéo nó ra. Bạn có thể cố gắng làm xáo trộn khóa và làm cho nó khó tìm nhưng nó sẽ luôn có khả năng.

Xem này: https://www.excelsior-usa.com/articles/java-obfuscators.html#examples

Lựa chọn tốt nhất là nên yêu cầu người dùng của bạn để xác định một mã PIN hoặc mật khẩu và sử dụng đó như là chìa khóa mã hóa. Bằng cách đó, nếu thiết bị bị mất hoặc bị đánh cắp, khóa vẫn an toàn và nó cũng ngăn người khác giải mã ứng dụng của bạn và nhận khóa mã hóa cho tất cả các phiên bản của ứng dụng của bạn.

+0

hãy xem câu hỏi có liên quan của tôi: http://stackoverflow.com/questions/30951805/encrypt-on-server-side-and-decrypt-on-client-side –

+0

@slayton Về sử dụng mật khẩu như khóa mã hóa : Mật khẩu có được lưu thành băm và giá trị băm sẽ là khóa hay mật khẩu trực tiếp sẽ được sử dụng làm khóa không? Chỉ yêu cầu kiến ​​thức –

2

Nếu bạn đang thực hiện việc này cho dữ liệu tên người dùng/mật khẩu, bạn nên thanh toán triển khai Authenticator.

0

Nếu mã hóa/giải mã tất cả xảy ra trên thiết bị cầm tay, một hacker xác định sẽ có thể crack nó. Bạn có thể làm cho cuộc sống khó khăn hơn bằng cách sử dụng obfustication, hoặc (nếu thích hợp cho ứng dụng của bạn), thêm người dùng nhập vào mã hóa/giải mã.

Nếu ứng dụng của bạn yêu cầu kết nối mạng, có thể đáng để tải một số mã vào máy chủ đang chạy ở nơi khác, để dữ liệu được mã hóa tồn tại trên thiết bị, nhưng các khóa được tải xuống trong thời gian chạy. Vẫn không hack-proof, nhưng nó làm giảm rủi ro cho dữ liệu bí mật trên một thiết bị bị đánh cắp.

1

Vì Android không có bất kỳ bộ nhớ an toàn nào trên đó (ít nhất là 2.2), bạn sẽ phải tự viết.

Cách duy nhất để thực hiện điều này thực sự an toàn là mã hóa bằng khóa được lấy từ mật khẩu do người dùng cung cấp (PBKDF2/RFc2898 là cách để thực hiện). Mật mã chỉ an toàn như khóa của bạn và nếu bạn lưu trữ nó trên điện thoại, thì ai đó có thể tìm thấy nó và sử dụng nó. Điều này cho phép bạn để người dùng lưu trữ khóa mà không thực sự nhớ một khóa AES lớn.

Có thể có thư viện thực hiện việc này cho android. Tôi đã viết một cho cửa sổ điện thoại có thể được tìm thấy here nếu bạn muốn có một số cơ sở để làm thế nào để làm điều đó.

3

Một trong những tính năng mới trong Ice Cream Sandwich (Android 4.0) là keychain API. Từ số Platform Highlights page (phần nhấn mạnh của tôi):

Android 4.0 giúp ứng dụng quản lý xác thực dễ dàng hơn và các phiên an toàn. API chuỗi khóa mới và bộ nhớ mã hóa được mã hóa cơ bản cho phép ứng dụng lưu trữ và truy xuất khóa riêng tư và chuỗi chứng chỉ tương ứng của chúng. Bất kỳ ứng dụng nào cũng có thể sử dụng API để cài đặt và lưu trữ chứng chỉ người dùng và CA an toàn.

+0

Bạn có biết bất kỳ mã hướng dẫn/mẫu nào không ?! Cảm ơn. –

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