Detector de chaves de API e segredos
Antes de colar logs, código ou um arquivo .env no ChatGPT, verifique: chaves como sk-proj-… (OpenAI), AKIA… (AWS), ghp_… (GitHub), AIza… (Google), xoxb-… (Slack), sk_live_… (Stripe), JWTs, chaves privadas PEM e valores DB_PASSWORD=… são destacados e trocados por [REDACTED_…]. Sequências aleatórias com 24 ou mais caracteres e pelo menos 4,0 bits de entropia de Shannon por caractere também são marcadas. Nada sai do seu navegador.
Como usar
- Cole o log, código, arquivo de configuração ou prompt que você ia mandar para um chat de IA. A verificação começa enquanto você digita.
- Confira os trechos destacados e a lista com números de linha. Vermelho indica formatos de chave conhecidos; azul, sequências aleatórias que podem ser segredos.
- Copie o texto mascarado. Marque "Manter os 4 primeiros caracteres" se quiser que dê para ver qual chave era, como ghp_****.
Como é calculado
Chaves de provedores conhecidos são reconhecidas pelo prefixo e pelo tamanho fixos: OpenAI sk- e sk-proj-, Anthropic sk-ant-, chaves de acesso da AWS (AKIA ou ASIA mais 16 letras maiúsculas ou dígitos), GitHub ghp_, gho_ e github_pat_, Google AIza mais 35 caracteres, Slack xoxb- e xoxp-, Stripe sk_live_, pk_live_ e rk_, JWTs (três partes base64url começando com eyJ) e blocos -----BEGIN … PRIVATE KEY-----.
Valores também são pegos pelo nome. Em arquivos .env e de configuração, é mascarado o valor de qualquer nome que contenha SECRET, TOKEN, PASSWORD, API_KEY, ACCESS_KEY ou PRIVATE_KEY, a chave secreta da AWS (40 caracteres após aws_secret_access_key) e a senha em strings de conexão como postgres://usuario:senha@host. Marcadores como changeme, <your-key>, ${VAR} e **** são ignorados.
Sequências sem formato conhecido recebem uma nota pela entropia de Shannon: H = -Σ p(c) log2 p(c). Um token de 24 ou mais caracteres que mistura maiúsculas, minúsculas e dígitos e atinge pelo menos 4,0 bits por caractere é marcado. Uma chave aleatória de 32 caracteres costuma ficar entre 4,5 e 5. Sequências só hexadecimais, como hashes de commit e UUIDs, são ignoradas.
Quando duas regras pegam o mesmo trecho, vale a mais específica: a chave dentro de OPENAI_API_KEY=… aparece como OpenAI, e não como segredo genérico de .env. Tudo acontece nesta página. O texto não é enviado, não é salvo e nunca vai para o endereço.
Formatos reconhecidos
| Provedor | Aparência |
|---|---|
| OpenAI | sk-… , sk-proj-… |
| Anthropic | sk-ant-… |
| AWS | AKIA… (20 caracteres) + segredo de 40 caracteres |
| GitHub | ghp_… , github_pat_… |
| Google API | AIza… (39 caracteres) |
| Slack | xoxb-… , xoxp-… , hooks.slack.com URL |
| Stripe | sk_live_… , pk_live_… , rk_… |
| JWT | eyJ….eyJ….… |
| Chave privada | -----BEGIN … PRIVATE KEY----- |
| String de conexão | scheme://user:password@host |
| Valor de .env | NOME_COM_SECRET/TOKEN/PASSWORD=… |
Perguntas frequentes
Meu texto é enviado para algum lugar?
Não. A verificação e a máscara rodam no seu navegador. O texto não é enviado, não fica no armazenamento local e não entra na URL, então não há nada para compartilhar sem querer. Ao sair da página, a caixa é limpa.
Já colei uma chave no ChatGPT. E agora?
Troque a chave. Revogue-a no painel do provedor e crie outra, mesmo que tenha apagado a conversa. Dependendo das suas configurações, as conversas podem ser guardadas para análise de abuso ou usadas em treinamento, e uma chave exposta uma vez deve ser tratada como vazada.
Por que uma sequência comum foi marcada como segredo?
A verificação de entropia marca sequências longas com cara de aleatórias, e alguns valores inofensivos são assim: IDs de build, imagens em base64, URLs assinadas. As marcas azuis são palpites. Desmarque "Marcar sequências aleatórias" para ver só formatos conhecidos e valores com nome.
O que ele pode deixar passar?
Senhas curtas ou inventadas escritas numa frase, segredos sem nome e com pouca aleatoriedade, chaves de provedores sem prefixo fixo e valores quebrados em várias linhas. Leia o resultado antes de enviar. A verificação reduz o risco, não prova que o texto está limpo.
As chaves do exemplo são reais?
Não. O exemplo usa as chaves de amostra da documentação da AWS, o token de exemplo público do jwt.io e sequências inventadas. Têm o formato certo, mas não abrem nada.