2015-01-31 15 views
7

Tôi đang cố gắng tìm ra nơi hoặc làm cách nào để lưu trữ các bí mật và khóa ứng dụng bên trong ứng dụng máy tính để bàn.
Ví dụ: khóa ứng dụng facebook hoặc khóa dropbox và bí mật.

Vì vậy, tôi đã đọc rằng tôi nên băm, muối, mã hóa vv vv các giá trị này. Điều này là để ngăn chặn một người nào đó từ đảo ngược kỹ thuật mã của tôi và nhìn thấy các phím.

Tất cả đều tốt và tốt, nhưng với tất cả các phương pháp này, tôi chỉ lưu trữ một giá trị muối hoặc băm ở đâu đó thay vì chính khóa đó, cuối cùng. Chắc chắn nếu một hacker có thể nhận được muối/băm và có thể là mã nguồn, họ sẽ có thể giải mã khóa mã hóa và nhận mật khẩu/khóa/bí mật của tôi?

Một tùy chọn tôi đã đọc về điều đó có vẻ an toàn nhất là không lưu trữ giá trị này trong ứng dụng dành cho máy tính để bàn, nhưng để gọi dịch vụ web để lấy khóa (có thể được mã hóa). Nhưng câu hỏi của tôi là, ngay cả trong trường hợp này, một hacker khá chắc chắn sẽ làm một kết xuất bộ nhớ hoặc một cái gì đó để xem giá trị trả về từ dịch vụ web là gì và sau đó chúng ta quay lại hình vuông 1.Nơi cất trữ băm, muối, chìa khóa trong các ứng dụng Desktop

thay thế tốt nhất tiếp theo có vẻ là tối tăm.

Tôi có thiếu gì đó hoàn toàn không?

Một lưu ý phụ, việc sử dụng khóa bí mật/facebook/twitter/dropbox/etc sẽ là gì đối với hacker? Chắc chắn họ vẫn cần thông tin xác thực hoặc mã thông báo truy cập của người dùng để có thể sử dụng nó?

Mọi lời khuyên hoặc đề xuất sẽ được đánh giá cao.

+0

Bạn không thể ngăn chặn ai đó debugs ứng dụng của bạn để có được các phím. – Gumbo

+0

Điều đó có nghĩa là tất cả các công cụ mã hóa này chỉ gây khó khăn cho tin tặc? Thay vì ngăn chặn nó? – Quintonn

+0

Có. Tại một số điểm bạn cần giải mã nó và sau đó bạn có thể đọc dữ liệu được giải mã từ bộ nhớ. – Gumbo

Trả lời

1

Đối với mỗi tài khoản người dùng tạo mã thông báo truy cập mới cho ứng dụng khi họ đăng nhập thành công vào dịch vụ của bạn. Dịch vụ đăng nhập của bạn nên được thiết kế giống như thông tin đăng nhập cho một trang web:

  • API chỉ nên cho phép một số thiết lập (nói 5) lần đăng nhập xấu báo cáo lại cho máy tính để bàn mà tên người dùng/mật khẩu không khớp .
  • API nên trả lại một mã thông báo liên kết với chỉ sử dụng khi người dùng đăng nhập thành công.
  • Sử dụng SSL và một phương pháp băm cục bộ để vượt qua mật khẩu người dùng để API của bạn

này auth thẻ được cung cấp bởi bạn API sẽ chỉ hoạt động cho tài khoản cá nhân và vì vậy chỉ cho phép người dùng thực hiện các hoạt động đối với tài khoản cá nhân của họ. Ví dụ: nếu người dùng muốn thực hiện một thao tác, họ phải có thể cung cấp mã thông báo xác thực hợp lệ để hoàn thành hành động. Sử dụng phương pháp này kẻ tấn công vẫn sẽ có thể có được một khóa auth, nhưng khóa auth sẽ chỉ có thể thực hiện các hoạt động cho tài khoản mà nó được tạo ra. Nó sẽ không thể thực hiện các hoạt động trên bất kỳ tài khoản nào khác. Ý tưởng ở đây là để cho họ mess với dữ liệu nhưng để giữ cho các hoạt động xấu compartmentalized vào một tài khoản.

Từ đó, nếu bạn có cuộc gọi API chung (nói tìm kiếm hình ảnh) truy cập dữ liệu từ nhiều tài khoản, hãy đảm bảo rằng bạn không bao giờ trả lại hoặc cho phép bất kỳ tài khoản nào truy cập vào tất cả tất cả dữ liệu trong hệ thống của bạn. Chỉ cung cấp một số lượng hạn chế các bản ghi. Trong trường hợp này, hệ thống vẫn đang thực hiện công việc của mình, nhưng tại thời điểm không cho phép tất cả các bản ghi trong hệ thống của bạn được truy cập.

tôi thường thực hiện một dịch vụ như thế này:

  • người dùng đăng nhập và nhận được một thẻ auth. Tôi lưu trữ mã thông báo xác thực trong cơ sở dữ liệu được liên kết với người dùng đó.
  • tài khoản gọi dịch vụ web với auth token. Tôi tra cứu tài khoản người dùng bởi các truyền auth token và User ID (hai hình thức xác thực) và sử dụng tài khoản người dùng khám phá để thực hiện tất cả các hoạt động. Tôi không chỉ giả định User ID là chính xác, nó phải là một thẻ xác thực auth được xác thực.
  • Nếu người dùng cần thực hiện hoạt động tinh tế như đặt lại mật khẩu, ứng dụng của tôi sẽ mở cửa sổ trình duyệt hoặc tác vụ trình duyệt trong ứng dụng mà người dùng có thể yêu cầu và quản lý đặt lại. Tôi có thể bảo mật ứng dụng web dễ dàng hơn một ứng dụng trên một ứng dụng không xác định.

Sử dụng các phương pháp này, bạn sẽ có thể tạo một ứng dụng máy tính để bàn hoạt động hoàn toàn. Có những ngoại lệ cho chức năng này, nếu bạn có bất kỳ bài đăng nào trong các nhận xét và chúng tôi có thể đi sâu hơn vào vấn đề và xem liệu giải pháp này có thể vẫn hoạt động cho bạn hay không.

+0

Vì vậy, về cơ bản các ứng dụng khách hàng người dùng sẽ cài đặt trên máy tính của họ không nên gọi facebook/twitter vv trực tiếp. Thay vào đó, tôi nên tạo một dịch vụ web ở giữa xác thực và xác thực người dùng và sau đó thực hiện các cuộc gọi đó thay mặt họ? Nó có ý nghĩa, nhưng thêm một chút phức tạp. nhưng tôi đoán giá trị nó. – Quintonn

+1

Giả sử bạn cần cập nhật cách dịch vụ của bạn tương tác với facebook. Bạn sẽ không cập nhật bên máy chủ mã thay vì có mọi người dùng cập nhật ứng dụng của họ không? Nó là dễ dàng hơn nhiều để kiểm soát an ninh trên máy chủ của bạn hơn là phải giảm tải đó cho ứng dụng của khách hàng. – BajaBob

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