Поиск API-ключей и секретов

Прежде чем вставлять логи, код или файл .env в ChatGPT, проверьте их: ключи вида sk-proj-… (OpenAI), AKIA… (AWS), ghp_… (GitHub), AIza… (Google), xoxb-… (Slack), sk_live_… (Stripe), JWT, закрытые ключи PEM и значения DB_PASSWORD=… подсвечиваются и заменяются на [REDACTED_…]. Случайные строки от 24 символов с энтропией Шеннона не ниже 4,0 бита на символ тоже отмечаются. Ничего не покидает ваш браузер.

Текст остаётся в этой вкладке. Он не загружается, не сохраняется и не попадает в адрес. Поиск по шаблонам может пропустить короткие пароли и ключи без известного формата, а синие отметки могут оказаться безвредными. Прочитайте результат перед отправкой.

Удалось решить задачу?
Предпочитать в Google

Как пользоваться

  1. Вставьте лог, код, конфиг или промпт, который собирались отправить в ИИ-чат. Проверка идёт прямо во время ввода.
  2. Посмотрите подсветку и список с номерами строк. Красным отмечены известные форматы ключей, синим случайные строки, которые могут оказаться секретами.
  3. Скопируйте текст со скрытыми значениями. Включите «Оставить первые 4 символа», чтобы было видно, какой это был ключ, например ghp_****.

Как считается

Ключи известных сервисов распознаются по фиксированному префиксу и длине: OpenAI sk- и sk-proj-, Anthropic sk-ant-, ключи доступа AWS (AKIA или ASIA и ещё 16 заглавных букв или цифр), GitHub ghp_, gho_ и github_pat_, Google AIza и ещё 35 символов, Slack xoxb- и xoxp-, Stripe sk_live_, pk_live_ и rk_, JWT (три части base64url, начинающиеся с eyJ) и блоки -----BEGIN … PRIVATE KEY-----.

Значения находятся и по имени. В .env и конфигурационных файлах скрывается всё, что присвоено имени с SECRET, TOKEN, PASSWORD, API_KEY, ACCESS_KEY или PRIVATE_KEY, а также секретный ключ AWS (40 символов после aws_secret_access_key) и пароль в строках подключения вида postgres://user:пароль@host. Заглушки вроде changeme, <your-key>, ${VAR} и **** пропускаются.

Строки без известного формата оцениваются по энтропии Шеннона: H = -Σ p(c) log2 p(c). Отмечается токен от 24 символов, где есть заглавные и строчные буквы и цифры, а энтропия не ниже 4,0 бита на символ. Случайный ключ из 32 символов обычно даёт от 4,5 до 5 бит. Строки только из шестнадцатеричных символов, такие как хеши коммитов и UUID, пропускаются.

Если два правила срабатывают на одном месте, побеждает более точное: ключ внутри OPENAI_API_KEY=… помечается как ключ OpenAI, а не как обычное значение .env. Всё работает на этой странице. Текст не загружается, не сохраняется и не попадает в адрес страницы.

Распознаваемые форматы

СервисКак выглядит
OpenAIsk-… , sk-proj-…
Anthropicsk-ant-…
AWSAKIA… (20 символов) + секрет из 40 символов
GitHubghp_… , github_pat_…
Google APIAIza… (39 символов)
Slackxoxb-… , xoxp-… , hooks.slack.com URL
Stripesk_live_… , pk_live_… , rk_…
JWTeyJ….eyJ….…
Закрытый ключ-----BEGIN … PRIVATE KEY-----
Строка подключенияscheme://user:password@host
Значение .envИМЯ_С_SECRET/TOKEN/PASSWORD=…

Частые вопросы

Мой текст куда-то отправляется?

Нет. Проверка и скрытие выполняются в браузере. Текст не загружается, не пишется в локальное хранилище и не добавляется в URL, поэтому случайно поделиться им нельзя. При уходе со страницы поле очищается.

Я уже вставил ключ в ChatGPT. Что делать?

Замените ключ. Отзовите его в панели сервиса и создайте новый, даже если вы удалили чат. В зависимости от настроек чаты могут храниться для проверки на злоупотребления или использоваться для обучения, поэтому ключ, который хоть раз был раскрыт, считается утёкшим.

Почему обычная строка отмечена как секрет?

Проверка энтропии отмечает длинные строки, похожие на случайные, а так могут выглядеть и безвредные значения: идентификаторы сборок, изображения в base64, подписанные URL. Синие отметки только предположения. Отключите «Отмечать случайные строки», чтобы видеть лишь известные форматы и именованные значения.

Что он может пропустить?

Короткие или придуманные пароли внутри фразы, секреты без имени и с низкой случайностью, ключи сервисов без фиксированного префикса и значения, разбитые на несколько строк. Прочитайте результат перед отправкой. Проверка снижает риск, но не доказывает, что текст чистый.

Ключи в примере настоящие?

Нет. В примере использованы демонстрационные ключи из документации AWS, публичный пример токена с jwt.io и придуманные строки. Формат у них правильный, но открыть они ничего не могут.