Điểm:1

Thiết kế trò chuyện được mã hóa từ đầu đến cuối

lá cờ au

Tôi đang trong quá trình tạo một ứng dụng rung sẽ bao gồm nhắn tin trực tiếp. Bạn có thể nhắn tin cho 1 người hoặc một nhóm người. Tôi muốn tất cả điều này được mã hóa để bảo mật.

Phương pháp tôi đã nghĩ đến là thực hiện một hệ thống RSA, AES lai. Khi đăng ký, một cặp khóa RSA sẽ được tạo và khóa chung sẽ được gửi đến cơ sở dữ liệu để lưu trữ. Sau đó, khi người dùng muốn nhắn tin cho ai đó, họ sẽ yêu cầu khóa công khai của người khác và tạo khóa AES-256 để mã hóa bất kỳ tin nhắn nào. Sau đó, khi người dùng muốn gửi tin nhắn, nó sẽ được mã hóa bằng AES và khóa AES sẽ được mã hóa bằng RSA, để người nhận có thể giải mã tin nhắn.

Vấn đề tôi gặp phải là tôi muốn người dùng có thể đồng bộ hóa tin nhắn trên các thiết bị. Tôi có ý tưởng tạo khóa công khai và khóa riêng tư từ một cụm từ dễ nhớ và sau đó sử dụng cụm từ đó để khôi phục.

Tuy nhiên, điều này không giải quyết được vấn đề khôi phục AES.Tôi không chắc liệu việc lưu trữ khóa AES trong cơ sở dữ liệu cho mỗi phòng trò chuyện có an toàn hay không, ngay cả khi nó được mã hóa bằng RSA. Khóa AES được mã hóa cho mỗi người tham gia trò chuyện sẽ phải được lưu trữ.

Nếu bất cứ ai có bất kỳ khuyến nghị hoặc lời khuyên xin vui lòng cho tôi biết.

fgrieu avatar
lá cờ ng
Bạn đang nghĩ đến mã hóa lai. Thông thường, khóa AES được rút ngẫu nhiên cho mỗi tin nhắn và không được lưu trữ rõ ràng ở bất kỳ đâu: nó được lưu trữ dọc theo hoặc bên cạnh tin nhắn được mã hóa AES và được mã hóa bằng khóa chung của từng người nhận dự định, bao gồm (các) khóa chung của tác giả bài đăng. Trong số những khó khăn của những gì bạn lập kế hoạch là phân phối khóa an toàn. Có thể thực hiện "Tạo khóa công khai và khóa riêng từ cụm từ dễ nhớ", nhưng người dùng chọn mật khẩu/cụm mật khẩu kém, do đó, ở mức tối thiểu, bạn muốn kéo dài khóa để thử bù lại điều đó. Có những lựa chọn khác.
Maarten Bodewes avatar
lá cờ in
Điều này có thể được "giải quyết" bằng nhiều cách. Tôi đặt "đã giải quyết" trong dấu ngoặc kép vì luôn có một số mức độ tin cậy cần thiết đối với việc trình bày dịch vụ. Tạo cặp khóa RSA từ "hạt giống" là ví dụ: được đề cập [tại đây](https://crypto.stackexchange.com/a/30216/1172) và lưu ý tùy chọn hiệu quả nhất [trong câu trả lời khác](https://crypto.stackexchange.com/a/30228/1172) . Để tạo hạt giống, bạn sẽ sử dụng PBKDF để cung cấp khả năng kéo dài được đề cập ở trên.
Matrix avatar
lá cờ au
@fgrieu Nếu tôi lưu trữ khóa AES riêng của mỗi người được mã hóa bằng khóa chung của riêng họ nếu bất kỳ ai có thể bẻ khóa mã hóa đó thì tất cả các tin nhắn sẽ bị mất bất kể tôi sử dụng một khóa AES cho tin nhắn hay một khóa mới cho từng tin nhắn. vấn đề của tôi. Lý do tôi nghĩ đến việc lưu trữ các khóa AES trong cơ sở dữ liệu là để người dùng có thể dễ dàng truy cập các tin nhắn trên một thiết bị mới, chỉ bằng cách nhập bản ghi nhớ của họ. Ngoài ra, đối với cách ghi nhớ, tôi đang sử dụng bip39 để người dùng không tạo ra cách ghi nhớ.
crypt avatar
lá cờ cn
bạn có thể sử dụng thuật toán gấp đôi của Signal để cung cấp mã hóa đầu cuối. Java triển khai giao thức Signal có tại https://github.com/signalapp/libsignal-protocol-java

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.