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