Skip to content

An toàn dữ liệu: mã hóa khóa, mật khẩu và cookie ​

Để nối kênh, bạn phải đưa cho hệ thống những thông tin rất nhạy cảm: khóa API của OpenAI hay Anthropic, mật khẩu hộp thư, mật khẩu MISA, cookie đăng nhập TikTok hay Facebook. Mục này giải thích hệ thống bảo vệ chúng như thế nào.

Mục tiêu ​

Dù ai đó lấy được cơ sở dữ liệu, hoặc đọc được nhật ký và đường truyền của máy chủ chính, họ cũng không giải mã được khóa, mật khẩu hay cookie của bạn. Chỉ một thành phần riêng, gọi là bộ kết nối (adapter) của từng loại kênh, mới giải mã được, và chỉ vào đúng lúc cần gọi dịch vụ bên ngoài.

Thông tin của bạn đi qua hệ thống như thế nào ​

Trình duyệt của bạn ──(mã hóa ngay khi bạn bấm Lưu)──► Máy chủ chính ──► Cơ sở dữ liệu
                                                          chỉ nhận và lưu bản mã             chỉ chứa bản mã
                                                                                                │
Bộ kết nối của kênh (giữ khóa riêng) ◄──── đọc bản mã ◄─────────────────────────────────────┘
        │
        └─ giải mã trong bộ nhớ, rồi gọi dịch vụ bên ngoài (OpenAI, Anthropic, Google, KiotViet, MISA…)
  1. Bạn nhập thông tin (khóa API, mật khẩu, cookie) trong hộp thoại thêm hoặc sửa kênh.
  2. Trình duyệt mã hóa ngay trên máy bạn, trước khi gửi đi. Nội dung được mã hóa bằng thuật toán AES-256-GCM; khóa AES dùng một lần này lại được bọc bằng RSA-OAEP (SHA-256) với khóa công khai của bộ kết nối tương ứng. Khóa công khai này được nhúng sẵn trong ứng dụng, không lấy từ máy chủ chính, để máy chủ chính không thể tráo khóa.
  3. Chỉ bản mã được gửi lên. Máy chủ chính chỉ kiểm tra định dạng và lưu bản mã vào cơ sở dữ liệu. Máy chủ chính không có khóa riêng, nên không giải mã được. Nếu có ai gửi thông tin ở dạng chưa mã hóa, hệ thống từ chối.
  4. Bộ kết nối giữ khóa riêng trong một ổ lưu trữ riêng của chính nó (tệp được giới hạn quyền truy cập), mỗi môi trường dùng một cặp khóa riêng. Khi cần gọi dịch vụ bên ngoài, bộ kết nối đọc bản mã, giải mã trong bộ nhớ, dùng xong thì xóa khóa tạm.
  5. Hệ thống không bao giờ hiển thị lại khóa, mật khẩu hay cookie đã lưu. Trên giao diện bạn chỉ thấy trạng thái "đã lưu" và, với khóa API hoặc token, 4 ký tự cuối để nhận biết. Khi sửa kênh, để trống ô nghĩa là giữ nguyên giá trị cũ.

Bản mã gắn chặt với workspace, người dùng và kênh ​

Mỗi bản mã được ghi kèm thông tin ngữ cảnh: workspace, người dùng đang đăng nhập, và loại kênh cùng tên trường (ví dụ ai_claude.api_key). Ngữ cảnh này lấy từ phiên đăng nhập, không lấy từ dữ liệu do trình duyệt gửi lên. Bộ kết nối kiểm tra ngữ cảnh trước khi giải mã, nên:

  • Bản mã bị sửa dù chỉ một ký tự sẽ không giải mã được.
  • Bản mã không thể bê sang workspace khác, kênh khác hoặc trường khác để dùng.

Các lớp bảo vệ ở bộ kết nối ​

  • Địa chỉ gọi ra cố định: bộ kết nối chỉ gọi tới các dịch vụ đã định sẵn trong mã của nó (ví dụ OpenAI, Anthropic, Google, KiotViet, MISA, Casso, Ahamove, AllinGo), máy chủ chính không thể bắt nó gọi tới địa chỉ khác.
  • Giới hạn tần suất: mỗi kênh bị giới hạn số lần dùng khóa mỗi phút (mặc định 300 lần), để hạn chế việc lạm dụng nếu có sự cố.
  • Nhật ký kiểm toán: mỗi lần giải mã được ghi lại (kênh nào, trường nào, khóa nào), không ghi giá trị khóa hay mật khẩu.
  • Tách thông tin định danh khỏi bí mật: những giá trị chỉ để nhận diện (ví dụ Client ID KiotViet, số điện thoại tài khoản Ahamove, App ID AllinGo) không phải bí mật nên không cần mã hóa; chỉ phần bí mật (Client Secret, API key, App Secret) được mã hóa.

Thông tin nào được mã hóa ​

KênhThông tin được mã hóaBộ kết nối giải mã
ChatGPT, Claude, GeminiAPI key, token đăng nhập tài khoản sub, tệp auth.jsonai-agent
NotebookLMCookie đăng nhập Googlenotebooklm
TikTok cá nhânCookie đăng nhập TikToktiktok-personal
Facebook cá nhânCookie đăng nhập Facebookfacebook-personal
KiotVietClient Secretkiotviet
MISAMật khẩu, khóa xác thực 2 lớp (TOTP)misa
CassoAPI Keycasso
AhamoveAPI keydelivery
AllinGoApp Secretdelivery
EmailMật khẩu hộp thưemail
TelegramBot Tokentelegram
ViberAuth Tokenviber
ZaloBotBot Tokenzalobot

Mã dùng để xác thực webhook và API Key: lưu dạng băm một chiều ​

Một số mã không cần được đọc lại, nên hệ thống chỉ lưu giá trị băm SHA-256 (không thể suy ngược ra mã gốc), dùng để đối chiếu khi có yêu cầu gửi tới:

  • API Key (mục 1.9): chỉ hiện một lần lúc tạo. Hệ thống chỉ lưu giá trị băm và vài ký tự đầu để bạn nhận biết trong danh sách. Mất khóa thì dùng Xoay khóa để cấp khóa mới.
  • Mã xác thực webhook của Casso và ZaloBot: do bộ kết nối tự sinh, máy chủ chính chỉ giữ giá trị băm để so khớp.

Mật khẩu đăng nhập vào Siêu trợ lý ​

Việc đăng nhập (Google, Apple hoặc email) do Firebase Authentication của Google xử lý. Hệ thống Siêu trợ lý không lưu mật khẩu đăng nhập của bạn, chỉ nhận phiên đăng nhập đã được xác minh.

Bạn nên làm gì để an toàn hơn ​

  1. Dùng tài khoản riêng cho kênh khi có thể: một tài khoản TikTok, Facebook hoặc Google chỉ dành cho việc chăm sóc khách. Cookie có quyền như mật khẩu của tài khoản đó.
  2. Dùng khóa API có quyền tối thiểu và đặt hạn mức chi tiêu ở nhà cung cấp AI.
  3. Gmail và Outlook: luôn dùng Mật khẩu ứng dụng, không dùng mật khẩu đăng nhập thường.
  4. Cookie hết hạn hoặc nghi bị lộ: đăng xuất khỏi tài khoản đó trên trình duyệt, xuất cookie mới và cập nhật lại kênh, hoặc bấm Ngắt kết nối hoặc Xóa kênh.
  5. URL webhook của SePay chứa mã bí mật: không chia sẻ công khai. Nghi bị lộ thì bấm Tạo lại URL.
  6. Phân quyền chặt: chỉ cấp quyền quản lý kênh cho người thật sự cần ở Cài đặt → Nhóm & Phân quyền.
  7. Nhân viên nghỉ việc: xóa khỏi Cài đặt → Thành viên ngay, và đổi các khóa nếu họ từng biết.

Những giới hạn cần biết ​

Không có cơ chế bảo mật nào là tuyệt đối. Để bạn quyết định đúng, đây là những điều hệ thống chưa hoặc không thể làm:

  • Người kiểm soát trình duyệt hoặc mã giao diện có thể thấy thông tin lúc bạn gõ. Mã hóa chỉ bảo vệ thông tin sau khi bạn bấm Lưu. Hãy dùng máy tính tin cậy và không cài tiện ích lạ.
  • Nếu máy chủ chính bị chiếm quyền, kẻ tấn công không đọc được khóa của bạn, nhưng có thể nhờ bộ kết nối dùng thử khóa đó (được giới hạn tần suất và ghi nhật ký). Vì vậy việc đặt hạn mức chi tiêu ở nhà cung cấp AI vẫn quan trọng.
  • Một số tệp tạm khi chạy: cookie NotebookLM và tệp auth.json của Codex được bộ kết nối ghi ra tệp có giới hạn quyền trong ổ riêng của nó để thư viện hoặc công cụ dòng lệnh dùng được.
  • Khóa riêng hiện lưu dạng tệp trong ổ riêng của bộ kết nối (chưa dùng kho khóa chuyên dụng như KMS hoặc HSM).
  • Chưa áp dụng cho mọi kênh: các kênh SePay, Web Chat, Facebook Messenger (Page), WhatsApp chính thức và Zalo OA hiện chưa dùng cơ chế mã hóa trình duyệt đến bộ kết nối nói trên (token của các kênh này được hệ thống quản lý theo cách khác) và đang được chuyển dần sang cơ chế này.
  • Nội dung hội thoại gửi tới nhà cung cấp AI khi bạn dùng trợ lý (OpenAI, Anthropic, Google, NotebookLM) để họ tạo câu trả lời, theo điều khoản của từng nhà cung cấp.

Ngắt kết nối và xóa dữ liệu ​

  • Ngắt kết nối một kênh sẽ dừng nhận và gửi tin của kênh đó. Với kênh Facebook cá nhân, hệ thống còn xóa phiên và cookie đã lưu.
  • Xóa kênh sẽ xóa cấu hình kênh khỏi hệ thống.
  • Bạn có thể xóa tài khoản trong ứng dụng iPhone/iPad (Hồ sơ → xóa tài khoản). Liên hệ contact@sieutroly.ai nếu cần hỗ trợ xóa dữ liệu của workspace.

Hỗ trợ: contact@sieutroly.ai