
Tài liệu này cung cấp cái nhìn kỹ thuật chi tiết về kiến trúc bảo mật của SonChat, các thuật toán được sử dụng và cách chúng bảo vệ dữ liệu người dùng.

---

## 1. Kiến trúc Tổng thể: Zero-Knowledge Relay

SonChat được thiết kế theo mô hình **Zero-Knowledge Architecture**. Điều này có nghĩa là máy chủ (Server) không bao giờ có khả năng đọc hoặc giải mã nội dung tin nhắn của người dùng.

- **Server-side**: Chỉ đóng vai trò là một "bộ định tuyến" (Router/Relay), chuyển tiếp các gói tin đã mã hóa từ người gửi đến người nhận.
- **Client-side**: Toàn bộ quá trình mã hóa, giải mã và quản lý khóa đều diễn ra trên trình duyệt của người dùng.

---

## 2. Các Lớp Mã hóa (Encryption Layers)

### 🧊 Lớp 1: Mã hóa Nội dung (AES-256-GCM)
Đây là lớp bảo vệ trực tiếp nội dung tin nhắn và file.
- **Thuật toán**: AES (Advanced Encryption Standard) với độ dài khóa 256-bit.
- **Chế độ GCM (Galois/Counter Mode)**: Cung cấp cả tính bảo mật (Encryption) và tính xác thực (Authentication). Nếu dữ liệu bị thay đổi dù chỉ 1 bit, quá trình giải mã sẽ báo lỗi ngay lập tức.
- **Khóa Phiên (Session Key)**: Mỗi tin nhắn được mã hóa bằng một khóa AES ngẫu nhiên duy nhất, đảm bảo tính độc lập.

### 🔑 Lớp 2: Trao đổi Khóa An toàn (RSA-2048-OAEP)
Vì Alice và Bob không thể gặp nhau để đưa chìa khóa AES trực tiếp, chúng ta cần RSA.
- **Thuật toán**: RSA với độ dài khóa 2048-bit.
- **Padding OAEP**: Giúp chống lại các cuộc tấn công dựa trên cấu trúc toán học của bản mã.
- **Cơ chế**: Alice dùng **Public Key (Khóa công khai)** của Bob để mã hóa khóa AES. Chỉ có Bob, người giữ **Private Key (Khóa bí mật)** tương ứng, mới có thể mở được để lấy lại khóa AES và đọc tin nhắn.

---

## 3. Quản lý Khóa (Key Management)

Bảo mật của hệ thống phụ thuộc hoàn toàn vào cách lưu trữ Private Key.
- **Tạo khóa (Generation)**: Khóa RSA được tạo ngay khi đăng ký tại trình duyệt của người dùng (`window.crypto.subtle.generateKey`). Private Key không bao giờ được gửi lên server.
- **Lưu trữ (Storage)**: Private Key được lưu trữ trong `localStorage` dưới định dạng JWK (JSON Web Key). 
  - *Lưu ý*: Điều này có nghĩa là nếu bạn xóa cache trình duyệt hoặc đổi máy tính, bạn sẽ mất quyền truy cập vào các tin nhắn cũ trừ khi bạn có bản backup khóa.
- **Công khai (Public)**: Public Key được gửi lên server để những người khác có thể lấy về và dùng nó để mã hóa tin nhắn gửi cho bạn.

---

## 4. Tính Toàn vẹn & Chống Giả mạo (Integrity)

Sử dụng hàm băm **SHA-256**.
- Mỗi gói tin gửi đi kèm theo một mã Hash của nội dung gốc.
- Khi nhận, ứng dụng sẽ băm lại nội dung đã giải mã và so sánh.
- **Mục tiêu**: Đảm bảo không có kẻ tấn công trung gian (Man-in-the-Middle) nào có thể sửa đổi nội dung tin nhắn (ví dụ: thay đổi số tài khoản ngân hàng trong tin nhắn) mà không bị phát hiện.

---

## 5. Các Tính năng Tăng cường Quyền riêng tư

### 💣 Tin nhắn Tự hủy (Self-Destruct Messages)
- Người dùng có thể thiết lập thời gian tồn tại (10 giây đến 5 phút).
- Khi hết giờ, tin nhắn sẽ bị xóa vĩnh viễn khỏi:
    1. Giao diện người dùng (DOM).
    2. Bộ nhớ tạm (Memory).
    3. Kho lưu trữ cục bộ (LocalStorage).
- Máy chủ cũng nhận được lệnh xóa để không giữ lại bản sao đã mã hóa trong hàng đợi.

### 📋 Hashing Mật khẩu (BCrypt)
- Tại Server, mật khẩu của bạn được băm bằng **BCrypt** với độ phức tạp cao (salt). 
- Ngay cả khi Database của server bị đánh cắp, hacker cũng cực kỳ khó khăn (mất hàng năm trời) để thử đoán mật khẩu của bạn.

---

## 6. Ma trận Bảo vệ: Chúng ta chống lại được gì?

| Mối đe dọa (Threat) | Cách SonChat bảo vệ | Trạng thái |
|----------------------|----------------------|------------|
| **Nghe lén trên mạng (Network Sniffing)** | AES-256 bảo vệ nội dung, khiến dữ liệu trông như rác. | ✅ HIỆU QUẢ |
| **Server bị Hack (Server Breach)** | Server không có Private Key, hacker chỉ thấy dữ liệu đã mã hóa. | ✅ HIỆU QUẢ |
| **Sửa đổi tin nhắn (Tampering)** | SHA-256 và AES-GCM phát hiện mọi thay đổi bit dữ liệu. | ✅ HIỆU QUẢ |
| **Giả mạo người gửi (Impersonation)** | Public Key được gắn chặt với ID người dùng tại Server. | ✅ HIỆU QUẢ |
| **Hacker dùng máy siêu máy tính** | AES-256 và RSA-2048 hiện là tiêu chuẩn an toàn quân đội. | ✅ HIỆU QUẢ |

---

## 7. Các khuyến nghị bảo mật cho Người dùng

Mặc dù hệ thống rất an toàn, người dùng cần lưu ý:
1. **Bảo mật thiết bị**: Vì Private Key nằm trên máy của bạn, nếu ai đó cầm được điện thoại/máy tính của bạn, họ có thể đọc được tin nhắn.
2. **Backup Khóa**: Hiện tại SonChat lưu khóa tại chỗ, bạn nên cẩn thận khi xóa lịch sử trình duyệt.
3. **Mật khẩu mạnh**: BCrypt bảo vệ tại server, nhưng nếu mật khẩu quá đơn giản (như 123456), nó vẫn có thể bị đoán trúng.

---
---
## 8. Giải thích Thực tế: Các lớp bảo mật bảo vệ bạn như thế nào?

Dưới đây là tóm tắt về vai trò và ví dụ thực tế của 4 trụ cột bảo mật trong SonChat:

### 1. AES-256-GCM (Mã hóa tin nhắn & file)
*   **Tác dụng**: Đây là "chiếc hòm" bảo vệ nội dung chat của bạn. AES-256 là tiêu chuẩn quân đội, cực kỳ khó bẻ khóa.
*   **Bảo vệ bạn khỏi**: Kẻ nghe lén mạng (Network Sniffing).
*   **Ví dụ thực tế**: Bạn đang dùng Wi-Fi công cộng tại quán cafe. Một hacker trong cùng mạng dùng công cụ để "bắt" các gói tin. Nếu không có AES, họ thấy nội dung bạn chat rõ ràng. Với AES, họ chỉ thấy một chuỗi ký tự rác vô nghĩa.

### 2. RSA-2048-OAEP (Trao đổi khóa an toàn)
*   **Tác dụng**: Dùng để gửi "chìa khóa hòm" (khóa AES) cho người nhận một cách an toàn mà không ai khác mở được.
*   **Bảo vệ bạn khỏi**: Lộ chìa khóa trên đường truyền hoặc Server tò mò.
*   **Ví dụ thực tế**: Alice muốn gửi tin nhắn cho Bob. Alice dùng **Public Key** của Bob để khóa cái chìa AES lại. Chỉ có Bob giữ **Private Key** mới mở được để lấy chìa AES và đọc tin nhắn. Ngay cả người quản trị hệ thống SonChat cũng không có Private Key của Bob nên không thể xem trộm.

### 3. SHA-256 (Kiểm tra toàn vẹn)
*   **Tác dụng**: Tạo ra một "dấu vân tay" (Hash) duy nhất cho mỗi tin nhắn.
*   **Bảo vệ bạn khỏi**: Tấn công thay đổi dữ liệu (Tampering/Man-in-the-Middle).
*   **Ví dụ thực tế**: Bạn gửi tin nhắn "Chuyển cho tôi 100k". Một kẻ xấu đứng giữa sửa thành "Chuyển cho tôi 100 triệu". Khi tin nhắn đến máy người nhận, ứng dụng sẽ băm lại nội dung và thấy "dấu vân tay" mới không khớp với dấu vân tay gốc. Ứng dụng sẽ cảnh báo tin nhắn giả mạo đó.

### 4. BCrypt (Bảo vệ mật khẩu tại Server)
*   **Tác dụng**: Biến mật khẩu của bạn thành một chuỗi mã hóa một chiều phức tạp trước khi lưu vào DB.
*   **Bảo vệ bạn khỏi**: Lộ dữ liệu khi Server bị hack.
*   **Ví dụ thực tế**: Nếu máy chủ SonChat bị hack và mất toàn bộ danh sách người dùng. Hacker sẽ không thấy mật khẩu thật của bạn, mà chỉ thấy những chuỗi BCrypt cực kỳ khó bẻ khóa. Sẽ mất hàng chục năm để hacker đoán được mật khẩu thật của bạn.

---
**Kết luận**: SonChat đảm bảo nội dung trò chuyện là hoàn toàn riêng tư giữa bạn và người nhận, ngay cả khi server bị tấn công hay mạng không an toàn.
