Hướng dẫn làm app chat mã hoá end to end

Chào các bạn. Mình muốn làm một app chat với database lưu dữ liệu trò chuyện phải được mã hoá nhưng không biết database lưu những gì. Mình định làm như sau:
Phương pháp mã hoá: mã hoá bất đối xứng.
Quá trình init khi Trần Văn A tạo account:
1/ Mật khẩu được hash lưu vào database (đoạn này ok vì app nào cũng làm vậy)
2/ Dùng mật khẩu plain text + Họ tên --> hash thành public key lưu vào database để sau này ai muốn chat với Trần Văn A thì server gửi public key này cho họ.
Vậy là bảng tài khoản sẽ có các cột:

  • username
  • password
  • timestamp
  • public key

Quá trình set up khi cho Trần Văn A chat với Nguyễn Thị B :
1/ A và B đăng nhập xong lấy mật khẩu plain text đó cộng với một chuỗi cố định (VD ngày thắng năm sinh của admin) —> hash nó và lưu vào localstorage để làm private key.
2/ A và B query database lấy public key trao chéo cho nhau và lưu vào localstorage.

Trong quá trình chat thì cả A & B đều sync tin nhắn từ server và enscryt, decrypt ở client (trong trường hợp này là JS ở browser)

Mình gặp vấn đề là không biết tạo public key và private key như thế nào và cách lưu trữ và truyền tải nó. Nếu tạo private key từ mật khẩu thì khi user đổi mật khẩu, tin nhắn cũ sẽ không decrypt được nữa.

Mong được các bạn tư vấn cách làm đúng. Thanks

bạn cần/muốn lưu gì thì lưu cái đó

bạn sẽ dùng mã hóa bất đối xứng nào? pgp hay rsa hay một cái gì đó khác hay … mã hóa bạn tự xây dựng?

cách gen 2 loại key này nghe như không có gì liên quan, cũng không biết mục đích của việc này là gì, bạn có thể giải thích giúp mình được không?

không phải ở trên bạn đã mô tả cách làm rồi sao?
còn việc truyền tải thì ý bạn là gì? bạn muốn truyền tải từ đâu tới đâu? xem mô tả thì là trao đổi key từ end user này đến end user kia, vậy 2 user khởi tạo chat với nhau nhu thế nào?

nếu bạn đã nhận thấy vấn đề này thì phải sửa lại cách gen “private key” của bạn đi, dùng một cái gì đó cố định của user như là username hoặc user id?

Giải pháp: bạn tập đi cho tốt rồi hãy tập chạy

  1. bạn đã làm được app chat cơ bản chưa? chỉ cần 2 end user có thể chat với nhau là được.
  2. bạn đã làm được mã hóa/giải mã thông điệp sử dụng mã hóa bất đối xứng chưa? console cũng được, thậm chí hard code không cần input, chỉ cần một màn hình show ra chuoi goc la: ....., sau khi ma hoa la: ...., giai ma lại: ....

khi bạn chưa nắm được cơ bản thì có hỏi cũng vô dụng, thậm chí đặt câu hỏi cũng bị sai
nếu bạn đã làm được rồi (tự làm hoặc có thể là copy nhưng phải hiểu) thì chắc chắn bạn sẽ post những câu hỏi khác thay vì những câu hỏi như trên

4 Likes

Cảm ơn bạn,

Mình đã làm được app chat real time 2 người chat qua lại được rồi bạn, nhưng tin nhắn lưu dạng plain text trong database admin sẽ mở ra đọc được.

Mình đã demo trên console được rồi ạ nhưng đưa vào app có sẵn thì không biết triển khai như thế nào.

(Đây là một đồ án môn học)

bạn hash ra public key và private key như thế nào? sử dụng để mã hóa và giải mã ra sao
bạn có thể demo giúp mình đoạn code đó hay không?

5 Likes

thanks bạn để mình học lại phần mã hóa, thuật toán mã hóa mình hiểu sai từ ban đầu rồi :woozy_face: Ban đầu mình tự gen ra 2 key bằng cách hash 2 chuỗi ngẫu nhiên. Sorry mọi người luôn vì hỏi nhảm :woozy_face:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?