2016-03-25 22 views
5

Tôi đang phát triển ứng dụng độc lập cho nền tảng chéo sử dụng điện tử.Cách lưu trữ khóa riêng tư hoặc thông tin/dữ liệu an toàn với Electron

Tôi muốn lưu trữ dữ liệu cá nhân như khóa riêng tư, dữ liệu cá nhân cho một số thực hiện trong ứng dụng. Thực hiện như mã hóa/giải mã dữ liệu.

Hoặc

Tôi muốn lưu trữ một số thông tin bảo mật như mật khẩu người dùng, độc quyền dữ liệu trên ứng dụng

Are bất cứ cách nào có thể để lưu trữ các loại thông tin an toàn và dễ sử dụng ứng dụng không thể nhận được bất kỳ cách nào?

Trả lời

5

Có một mô-đun NPM được tạo cho trình chỉnh sửa Atom (ứng dụng Electron được tạo ra) được gọi là Keytar. Nó sử dụng API OS gốc để lưu trữ an toàn. ví dụ. Móc khóa trên OS X.

https://github.com/atom/node-keytar

2

Tôi không biết công nghệ cụ thể mà bạn đang sử dụng, vì vậy câu trả lời của tôi sẽ nói chung về vấn đề lưu trữ chính.

Đầu tiên, hai bài phát biểu lớn:

  1. Ngay cả với một số phần cứng chuyên dụng nặng (ngân hàng và hệ thống quan trọng khác sử dụng Hardware Security Modules -HSMs- cho việc này), có luôn luôn là một nguy cơ bị chìa khóa của bạn bị đánh cắp. Những gì bạn chọn để làm phụ thuộc vào tầm quan trọng của khóa của bạn và bạn sẵn sàng làm gì để bảo vệ nó. Tôi sẽ cố gắng tránh đề cập đến các giải pháp liên quan đến phần cứng, vì chúng thường quá mức cần thiết cho hầu hết mọi người.
  2. Tuy nhiên, tập quán tốt mà bạn có thể làm theo: https://www.owasp.org/index.php/Cryptographic_Storage_Cheat_Sheet

Bây giờ, một số lời khuyên. Dù bạn làm gì, đừng lưu trữ khóa của bạn trong bản rõ (và ít mã hóa cứng hơn). Nếu bạn đang sử dụng mật mã khóa công khai, các tệp PKCS12 (thường có đuôi mở rộng .p12 hoặc .pfx) là cách tiêu chuẩn để lưu trữ dữ liệu. Chúng thường được bảo vệ bằng mật khẩu.

Tại đây bạn gặp phải sự cố: nếu bạn có khóa, bạn cần sử dụng khóa đó. Nếu bạn sử dụng khóa, nó sẽ có trong "bản rõ", ít nhất là trong RAM. Vì vậy, bạn cần một cách để kích hoạt quyền truy cập giữ khóa như bị cô lập càng tốt. Nếu hành động được kích hoạt bởi người dùng, mọi thứ tương đối tốt đẹp, bởi vì bạn có thể yêu cầu mật khẩu trước khi sử dụng khóa.

Nếu các hành động được tự động, tuy nhiên, bạn cần phải tìm cách lưu trữ mật khẩu. Ngay cả phần mềm bảo mật như một số triển khai PGP có cách tiếp cận cho việc này mà không phải là đẹp:

  1. Yêu cầu mật khẩu trong dòng lệnh: lệnh -password my-mật khẩu. Điều này, đặt trong một con dơi, công trình. Nhưng mật khẩu được lưu trữ và, tùy thuộc vào hệ điều hành, thậm chí có sẵn với lệnh history.
  2. Lưu trữ tệp trong một tệp: ít nhất bạn không để lại các bản sao xung quanh, nhưng mật khẩu vẫn ở dạng thô.
  3. Mã hóa bằng cách sử dụng dữ liệu hệ thống làm khóa mã hóa: mật khẩu tương đối được bảo vệ nhưng bạn mất tính di động và kẻ tấn công có quyền truy cập vào máy tính sẽ không bị kiểm soát dừng lại.
  4. Yêu cầu mật khẩu khi dịch vụ được bật: hợp lý hơn một chút, nhưng không phải lúc nào cũng có thể (nếu dịch vụ rất quan trọng nhưng chỉ một người có mật khẩu, tính khả dụng có thể bị xâm phạm).
  5. Những điều thú vị có thể được thực hiện với giải mã ngưỡng, nhưng đó có thể là quá nhiều cho trường hợp đó.

Tôi không cung cấp chi tiết về mỗi tùy chọn vì những gì bạn có thể làm phụ thuộc vào khung của bạn cho phép và cách sử dụng hệ thống của bạn, nhưng tôi hy vọng nó sẽ giúp tham khảo các tùy chọn khác nhau. Trong mọi trường hợp, không triển khai bất kỳ chức năng mã hóa nào trên của riêng bạn. Mật mã không tốt hơn là không có mật mã.

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