Dò API key và thông tin bí mật
Trước khi dán log, mã nguồn hay tệp .env vào ChatGPT, hãy quét qua: các khóa như sk-proj-… (OpenAI), AKIA… (AWS), ghp_… (GitHub), AIza… (Google), xoxb-… (Slack), sk_live_… (Stripe), JWT, khóa riêng PEM và giá trị DB_PASSWORD=… sẽ được tô sáng rồi thay bằng [REDACTED_…]. Chuỗi ngẫu nhiên dài từ 24 ký tự có entropy Shannon từ 4,0 bit mỗi ký tự trở lên cũng được đánh dấu. Không có gì rời khỏi trình duyệt của bạn.
Cách dùng
- Dán log, mã, tệp cấu hình hoặc prompt bạn định gửi cho chat AI. Việc quét bắt đầu ngay khi bạn gõ.
- Xem các chỗ được tô và danh sách kèm số dòng. Màu đỏ là định dạng khóa đã biết, màu xanh là chuỗi ngẫu nhiên có thể là bí mật.
- Sao chép văn bản đã che. Bật "Giữ 4 ký tự đầu" nếu muốn người đọc biết đó là khóa gì, ví dụ ghp_****.
Cách tính
Khóa của các dịch vụ quen thuộc được nhận ra nhờ tiền tố và độ dài cố định: OpenAI sk- và sk-proj-, Anthropic sk-ant-, khóa truy cập AWS (AKIA hoặc ASIA kèm 16 chữ in hoa hoặc chữ số), GitHub ghp_, gho_ và github_pat_, Google AIza kèm 35 ký tự, Slack xoxb- và xoxp-, Stripe sk_live_, pk_live_ và rk_, JWT (ba phần base64url bắt đầu bằng eyJ) và khối -----BEGIN … PRIVATE KEY-----.
Giá trị cũng được bắt theo tên. Trong tệp .env và tệp cấu hình, mọi giá trị gán cho tên chứa SECRET, TOKEN, PASSWORD, API_KEY, ACCESS_KEY hoặc PRIVATE_KEY đều bị che, cùng với khóa bí mật AWS (40 ký tự sau aws_secret_access_key) và mật khẩu trong chuỗi kết nối như postgres://user:password@host. Giá trị giữ chỗ như changeme, <your-key>, ${VAR} và **** được bỏ qua.
Chuỗi không có định dạng quen thuộc được chấm điểm bằng entropy Shannon: H = -Σ p(c) log2 p(c). Token dài từ 24 ký tự, trộn chữ hoa, chữ thường và chữ số, đạt từ 4,0 bit mỗi ký tự sẽ bị đánh dấu. Một khóa ngẫu nhiên 32 ký tự thường đạt 4,5 đến 5. Chuỗi chỉ gồm ký tự thập lục phân như mã băm commit và UUID được bỏ qua.
Khi hai quy tắc cùng trúng một đoạn, quy tắc cụ thể hơn được dùng: khóa nằm trong OPENAI_API_KEY=… được ghi là khóa OpenAI chứ không phải giá trị .env chung. Mọi thứ chạy trên trang này. Văn bản không được tải lên, không được lưu và không bao giờ được ghi vào địa chỉ trang.
Các định dạng nhận ra được
| Dịch vụ | Trông như |
|---|---|
| OpenAI | sk-… , sk-proj-… |
| Anthropic | sk-ant-… |
| AWS | AKIA… (20 ký tự) + bí mật 40 ký tự |
| GitHub | ghp_… , github_pat_… |
| Google API | AIza… (39 ký tự) |
| Slack | xoxb-… , xoxp-… , hooks.slack.com URL |
| Stripe | sk_live_… , pk_live_… , rk_… |
| JWT | eyJ….eyJ….… |
| Khóa riêng | -----BEGIN … PRIVATE KEY----- |
| Chuỗi kết nối | scheme://user:password@host |
| Giá trị .env | TÊN_CÓ_SECRET/TOKEN/PASSWORD=… |
Câu hỏi thường gặp
Văn bản của tôi có bị gửi đi đâu không?
Không. Việc quét và che diễn ra trong trình duyệt. Văn bản không được tải lên, không lưu vào bộ nhớ cục bộ và không thêm vào URL, nên không có gì bị chia sẻ nhầm. Ô nhập sẽ trống khi bạn rời trang.
Tôi lỡ dán khóa vào ChatGPT rồi. Giờ sao?
Hãy đổi khóa. Thu hồi khóa trong bảng điều khiển của nhà cung cấp và tạo khóa mới, kể cả khi đã xóa cuộc trò chuyện. Tùy cài đặt, cuộc trò chuyện có thể được giữ lại để rà soát lạm dụng hoặc dùng để huấn luyện, nên khóa đã lộ một lần cần coi như bị rò rỉ.
Sao một chuỗi bình thường lại bị coi là bí mật?
Bước kiểm tra entropy đánh dấu các chuỗi dài trông ngẫu nhiên, và một số giá trị vô hại cũng như vậy: mã build, ảnh base64, URL có chữ ký. Dấu xanh chỉ là phỏng đoán. Tắt "Đánh dấu chuỗi ngẫu nhiên" để chỉ xem các định dạng đã biết và giá trị có tên.
Công cụ có thể bỏ sót gì?
Mật khẩu ngắn hoặc tự đặt viết trong câu, bí mật không có tên và ít ngẫu nhiên, khóa của dịch vụ không có tiền tố cố định, và giá trị bị ngắt qua nhiều dòng. Hãy đọc kết quả trước khi gửi. Quét giúp giảm rủi ro chứ không chứng minh văn bản đã sạch.
Khóa trong ví dụ có thật không?
Không. Ví dụ dùng khóa mẫu trong tài liệu AWS, token mẫu công khai của jwt.io và các chuỗi tự đặt. Chúng đúng định dạng nhưng không mở được gì.