Detector de claves API y secretos
Antes de pegar registros, código o un archivo .env en ChatGPT, revísalo: claves como sk-proj-… (OpenAI), AKIA… (AWS), ghp_… (GitHub), AIza… (Google), xoxb-… (Slack), sk_live_… (Stripe), JWT, claves privadas PEM y valores DB_PASSWORD=… se resaltan y se sustituyen por [REDACTED_…]. También se marcan las cadenas aleatorias de 24 o más caracteres con al menos 4,0 bits de entropía de Shannon por carácter. Nada sale de tu navegador.
Cómo se usa
- Pega el registro, código, archivo de configuración o prompt que vas a enviar a un chat de IA. La revisión empieza mientras escribes.
- Mira las marcas y la lista con números de línea. En rojo, formatos de clave conocidos; en azul, cadenas aleatorias que pueden ser secretos.
- Copia el texto censurado. Activa "Dejar los 4 primeros caracteres" si quieres que se vea de qué clave se trataba, por ejemplo ghp_****.
Cómo se calcula
Las claves de proveedores conocidos se reconocen por su prefijo y longitud fijos: OpenAI sk- y sk-proj-, Anthropic sk-ant-, claves de acceso de AWS (AKIA o ASIA más 16 mayúsculas o dígitos), GitHub ghp_, gho_ y github_pat_, Google AIza más 35 caracteres, Slack xoxb- y xoxp-, Stripe sk_live_, pk_live_ y rk_, JWT (tres partes base64url que empiezan por eyJ) y bloques -----BEGIN … PRIVATE KEY-----.
También se detectan por el nombre. En archivos .env y de configuración se oculta el valor asignado a cualquier nombre que contenga SECRET, TOKEN, PASSWORD, API_KEY, ACCESS_KEY o PRIVATE_KEY, la clave secreta de AWS (40 caracteres tras aws_secret_access_key) y la contraseña de cadenas de conexión como postgres://usuario:contraseña@host. Se ignoran marcadores como changeme, <your-key>, ${VAR} y ****.
Las cadenas sin forma conocida se puntúan con la entropía de Shannon: H = -Σ p(c) log2 p(c). Se marca un token de 24 o más caracteres que mezcle mayúsculas, minúsculas y dígitos y alcance al menos 4,0 bits por carácter. Una clave aleatoria de 32 caracteres suele dar entre 4,5 y 5. Se omiten las cadenas solo hexadecimales, como hashes de commit y UUID.
Si dos reglas coinciden en el mismo texto, gana la más específica: la clave dentro de OPENAI_API_KEY=… se etiqueta como OpenAI y no como secreto genérico de .env. Todo ocurre en esta página: el texto no se sube, no se guarda y nunca se escribe en la dirección.
Formatos que reconoce
| Proveedor | Aspecto |
|---|---|
| OpenAI | sk-… , sk-proj-… |
| Anthropic | sk-ant-… |
| AWS | AKIA… (20 caracteres) + secreto 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….… |
| Clave privada | -----BEGIN … PRIVATE KEY----- |
| Cadena de conexión | scheme://user:password@host |
| Valor de .env | NOMBRE_CON_SECRET/TOKEN/PASSWORD=… |
Preguntas frecuentes
¿Se envía mi texto a algún sitio?
No. La revisión y la censura se hacen en tu navegador. El texto no se sube, no se guarda en el almacenamiento local y no se añade a la URL, así que no hay nada que compartir por error. Al salir de la página se vacía la caja.
Ya pegué una clave en ChatGPT. ¿Qué hago?
Rótala. Revoca la clave en el panel del proveedor y crea una nueva, aunque hayas borrado el chat. Según tu configuración, los chats pueden conservarse para revisión de abusos o usarse para entrenamiento, y una clave expuesta una vez debe darse por filtrada.
¿Por qué marca una cadena normal como secreto?
La comprobación de entropía señala cadenas largas que parecen aleatorias, y algunos valores inofensivos lo parecen: IDs de compilación, imágenes en base64, URL firmadas. Las marcas azules son suposiciones. Desactiva "Marcar cadenas aleatorias" para ver solo formatos conocidos y valores con nombre.
¿Qué puede pasar por alto?
Contraseñas cortas o inventadas escritas en una frase, secretos sin nombre y con poca aleatoriedad, claves de proveedores sin prefijo fijo y valores partidos en varias líneas. Lee el resultado antes de enviarlo. Revisar reduce el riesgo, no demuestra que el texto esté limpio.
¿Las claves de ejemplo son reales?
No. El ejemplo usa las claves de muestra de la documentación de AWS, el token de ejemplo público de jwt.io y cadenas inventadas. Tienen la forma correcta pero no abren nada.